Python vs. Perl
Samuel Schulenburg
samschul at pacbell.net
Thu May 31 01:37:23 EDT 2001
Cedric Adjih <adjih at crepuscule.com> wrote in message news:<9efusf$k7f$1 at ites.inria.fr>...
> Rob Nikander <nikander at mindspring.com> wrote:
> > In article <slrn9gluo4.8icv.dek at socrates.cgl.ucsf.edu>, "David Konerding"
> > <dek at cgl.ucsf.edu> wrote:
>
> >>> I haven't used much Perl, but there is a huge difference from C/C++
> >>> because you can do dynamic stuff like:
> >>> str = getCommandFromSomewhere()
> >>> exec str
> >> Eh, you could always add some code to your app which inserts the code
> >> into a text file, compiles it, and dlopen's it, but I've never actually
> >> seen somebody do that :-)
> >> Dave
> >
> > I thought of a hack like that too... but I am not too familiar with dlopen...
>
> The Python way is sometimes used a level higher by simply storing
> all the data as Python code (or pickled code):
> writeFile("application-data.py", repr(self.getAllDataAsPythonLists()))
> or
> writeFile("application-data.py", cPickle.dumps(self.allData))
>
> and recovered with something like:
> eval(readFile("application-data.py"))
> or
> cPickle.loads(readFile("application-data.py"))
>
> which are a bit harder to do in C/C++.
>
> > Question: The code in the exec can make reference to variables that are "local"
> > to the place where "exec str" is. It inherits the local symbols. That is not
> > going to happen with the dlopen(), right? The "symbols" that were part
> > of a C program aren't around when it is compiled and running.
>
> The global ones are. Thats if you have a global "double x;" in your
> main C program and a shared library that declares a "extern double x;" and
> uses it, at dlopen time, the external "x" symbol of the library would be
> bound to the address of the "x" of the main program.
>
> > It would be pretty cool if there was a way to do a similar thing in C (without
> > reinventing Python/Lisp/etc). Maybe adding debug info to the executable
> > keeps enough symbol information around to pull this off?
>
> Well if you want to modify a variable in C/C++, you just
> pass a pointer to it. Globals are available also with dlsym(...),
> but I doubt you can manage to modify the locals of the calling
> function...it would be peek and poke on the stack and fiddle with
> the stack pointer ; it would be very ugly.
>
> -- Cedric
My wife is allways having Perl code given to here, and told to redo it
in 'C'.
The problen is that each project she is give was written by a
different Perl programmer, and it is a new learning curve to translate
the code.
I have not seen the same problen with Python.
Sam Schulenburg
More information about the Python-list
mailing list