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