Rodrigo Fuentealba escribió: > El 16/11/07, Alejandro Weinstein <[EMAIL PROTECTED]> escribió: > >> On Nov 16, 2007 1:16 PM, Franco Catrin L. <[EMAIL PROTECTED]> wrote: >> >>> El segundo link casi me deja ciego ;) >>> >> Perdon. Me olvide de advertir que habia que ponerse lentes oscuros. >> >> [sobre la diferencia entre maquina virtual e interprete] >> >> Aun no me queda del todo clara la diferencia. Por ejemplo, hay alguna >> diferencia de fondo entre un interprete Python ejecutando un archivo >> .pyc o .pyo (no un .py) y una maquina virtual java ejecutando >> bytecodes? >> > > Diferencia de fondo no hay mucha. Según [1], inclusive hay similitudes > con Java y .NET: > > 1.- Se compila a bytecode que es compatible entre arquitecturas (yo > tomo un .pyc en Windows y lo paso a Linux y funciona). > > 2.- Se hacen algunas optimizaciones pequeñas al código Python. > > 3.- De 1.- se puede inferir que no es necesario que Python como > intérprete deba destripar cadenas y revisar sintaxis, lo cual también > es una optimización a la hora de interpretar y cargar el archivo. >
Eso se hace solo una vez y se genera el .pyc. Despues de eso actua el interpete del .pyc que "ejecuta" el codigo generado [1], pero no hay JIT, entonces se lee un bytecode y se ejecuta una funcion del interperte de python, luego se lee el siguiente bytecode y se ejecuta otra fucnion del interprete de python, y asi sucesivamente. Eso es lo que se supone hace Python/eval.c [3] Es no implica que el lenguaje sea necesariamente lento, solo dificulta las optimizaciones que se puedan realizar en tiempo de ejecucion. > Ahora, una diferencia sustancial debe ser la manera en que Java y > Python reservan la cantidad de memoria necesaria para su ejecución, > pero eso ya es hilar demasiado fino y... es viernes. > Lo de la memoria reservada se puede cambiar en java mediante el parametro -Xmx, pero hay que considerar como afecta eso a la eficiencia del garbage collector y la fragmentacion de la memoria que pide al sistema operativo. Revisar tambien otro link que di sobre GC's La diferencia sustancial esta en la generacion de codigo nativo a partir del .pyc, eso es algo que python no hace, y probablemente por la naturaleza del lenguaje tampoco conviene hacer [4] [1] http://alumni.media.mit.edu/~tpminka/patterns/python/ [2] http://alumni.media.mit.edu/~tpminka/patterns/python/bytecode.txt [3] http://svn.pythonmac.org/python24/python24-fat/Python/ceval.c [4] http://en.wikipedia.org/wiki/Dynamic_language Saludos -- Franco From [EMAIL PROTECTED] Sat Nov 17 13:53:50 2007 From: [EMAIL PROTECTED] (Roberto Bonvallet) Date: Sat Nov 17 14:25:51 2007 Subject: =?iso-8859-1?q?Re=3A_Benchmarking_en_distintos_lenguajes_=5B_Era?= =?iso-8859-1?q?_algo_as=ED_como_cliente_en_jabber=2E=2E=2E_=5D?= In-Reply-To: <[EMAIL PROTECTED]> References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> El día 17/11/07, Franco Catrin L. <[EMAIL PROTECTED]> escribió: > > La diferencia sustancial esta en la generacion de codigo nativo a partir > del .pyc, eso es algo que python no hace, y probablemente por la > naturaleza del lenguaje tampoco conviene hacer [4] > Hay un compilador JIT para Python que, si bien no hace exactamente lo mismo que el de Java, también trabaja optimizando en tiempo de ejecución. http://psyco.sourceforge.net/introduction.html PyPy, la implementación de Python en Python, también viene con un compilador JIT: http://codespeak.net/pypy/dist/pypy/doc/jit.html -- Roberto Bonvallet From [EMAIL PROTECTED] Sat Nov 17 14:41:47 2007 From: [EMAIL PROTECTED] (Rodrigo Fuentealba) Date: Sat Nov 17 14:44:34 2007 Subject: =?iso-8859-1?q?Re=3A_Benchmarking_en_distintos_lenguajes_=5B_Era?= =?iso-8859-1?q?_algo_as=ED_como_cliente_en_jabber=2E=2E=2E_=5D?= In-Reply-To: <[EMAIL PROTECTED]> References: <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> Message-ID: <[EMAIL PROTECTED]> El 17/11/07, Roberto Bonvallet <[EMAIL PROTECTED]> escribió: > El día 17/11/07, Franco Catrin L. <[EMAIL PROTECTED]> escribió: > > > Hay un compilador JIT para Python que, si bien no hace exactamente lo mismo > que el de Java, también trabaja optimizando en tiempo de ejecución. > > http://psyco.sourceforge.net/introduction.html Por lo visto, el personaje de psyco quiere trabajar más en PyPy que en Psyco "itself". ¿Lo has probado? ¿Cómo podríamos hacer benchmarking? (¿El clásico "time && programa.sh && time, como las guaguas, o alguien tiene una mejor idea?) > PyPy, la implementación de Python en Python, también viene con un compilador > JIT: > > http://codespeak.net/pypy/dist/pypy/doc/jit.html Ambas páginas me interesaron muchísimo. -- Rodrigo Fuentealba