Re: Benchmarking en distintos lenguajes [ Era algo así como cliente en jabber... ]
Franco Catrin L.
fcatrin en tuxpan.com
Sab Nov 17 12:22:15 CLST 2007
Rodrigo Fuentealba escribió:
> El 16/11/07, Alejandro Weinstein <alejandro.weinstein en gmail.com> escribió:
>
>> On Nov 16, 2007 1:16 PM, Franco Catrin L. <fcatrin en tuxpan.com> 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
Más información sobre la lista de distribución Linux