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