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