Re: Benchmarking en distintos lenguajes [ Era algo así como cliente en jabber... ]

Franco Catrin L. fcatrin en tuxpan.com
Sab Nov 17 00:13:37 CLST 2007


Alejandro Weinstein 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?
>   
Cuando hablamos de máquina virtual con JIT piensa en lo siguiente:

*    fuente (.java) -> compilador ->  bytecode(.class)

El bytecode es código de maquina
La máquina virtual toma el bytecode y lo transforma a código de maquina 
nativo en memoria asi:

*    bytecode (.class) -> JIT -> binario x86

Luego tu procesador ejecuta el binario x86 generado como si hubiera sido 
hecho en C/ASM


Cuando tienes un interprete como python, javascript, etc tienes lo 
siguiente:

*    fuente (.py) -> compilador -> tokens (.pyc)

El .pyc son tokens, es decir, las instrucciones del código fuente se 
convierten de texto a números que la representan, pero no hay código de 
máquina involucrado.

Cuando ejecutas el codigo tienes:

*    tokens (.pyc) -> interprete -> funciones del mismo interprete.

No hay generacion de codigo nativo, sino que el inteprete en base a los 
tokens comienza a ejecutar distintas secciones de si mismo.  Imaginate 
un gigante "if" o un gigante "switch/case" que va consumiendo tokens.

Una de las gracias de los lenguajes intepretados como python es que son 
dinámicos, pueden evaluar código al momento de ejecutarse y comportarse 
dependiendo de un estado en tiempo de ejecución, esto gracias a que se 
va viendo token a token.

Para el caso de python puedes mirar en Python/eval.c
http://svn.pythonmac.org/python24/python24-fat/Python/ceval.c

Para el caso de JIT hay una charla de Miguel de Icaza con ejemplos y 
todo, incluso generando bytecode a partir de Python, una de las gracias 
de Mono y .NET

Saludos
--
Franco



Más información sobre la lista de distribución Linux