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

Aldrin Gonzalo Martoq Ahumada amartoq en dcc.uchile.cl
Dom Dic 2 17:07:03 CLST 2007


[Sorry, presione send antes de tiempo]

> On Nov 27, 2007 5:31 PM, Horst H. von Brand <vonbrand en inf.utfsm.cl> wrote:
> > Alejandro Weinstein <alejandro.weinstein en gmail.com> wrote:
> > > On Nov 16, 2007 10:23 AM, Franco Catrin L. <fcatrin en tuxpan.com> wrote:
> > > > Segun entiendo esos no son compilados reales, runcobol es un interprete,
> > > > no una maquina virtual.
> > > Cual es la diferencia entre un interprete y una maquina virtual? En
> > > google no pude encontrar una respuesta clara. Encontre por ejemplo:
> > Ninguna.
> > Un procesador no es mas que un interprete del lenguaje de maquina del caso,
> > implementado en silicio, una maquina virtual es el mismo interprete pero
> > implementado en C (o el lenguaje du jour). Y al otro extremo, nosotros
> > programamos contra la "maquina virtual C", que se implementa (normalmente,
> > incidentalmente) via gcc y otras tonteras mas. Nada impide que tal cosa (o
> > incluso lenguajes mucho mas complejos) se interpretara directamente

Discrepo. Lo que se llama "maquina" es la definicion de una
arquitectura y su set de instrucciones. Cuando se habla de "maquina
virtual", se quiere decir que ese set de instrucciones no es el mismo
que el implementado en hardware; por lo tanto si quieres ejecutar ese
set de instrucciones requeriras de un paso de traduccion.

Un interprete es un programa que realiza la traduccion desde un set de
instrucciones o lenguaje y las ejecuta, de manera que puedas correr el
codigo en tu maquina "real". La distincion importante es que el paso
de traduccion se hace en tiempo de ejecucion; es decir, cada vez que
corras el programa tendras el costo adicional de traduccion lo que
puede traer problemas de performance o uso de recursos (memoria por
ej). Por eso la *implementacion* de la maquina virtual de java es un
interprete.

Un ejemplo no visto es AS/400 de IBM. Cuando compilas un programa, el
set de instrucciones generado es para una maquina virtual. Cuando lo
ejecutas, el sistema operativo no lo interpreta, sino que lo traduce
(compila) al codigo de la maquina real y luego lo ejecuta. Esta
compilacion solo se realiza una vez, salvo que te cambies de
arquitectura y en tal caso, el sistema operativo lo recompilara para
la maquina real 1 sola vez. Este es un ejemplo de maquina virtual sin
interprete, pues no hay traduccion durante la ejecucion.

-- 
Aldrin Martoq


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