Rodrigo Fuentealba escribió:
> El 16/11/07, Alejandro Weinstein <[EMAIL PROTECTED]> escribió:
>   
>> On Nov 16, 2007 1:16 PM, Franco Catrin L. <[EMAIL PROTECTED]> 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
From [EMAIL PROTECTED]  Sat Nov 17 13:53:50 2007
From: [EMAIL PROTECTED] (Roberto Bonvallet)
Date: Sat Nov 17 14:25:51 2007
Subject: =?iso-8859-1?q?Re=3A_Benchmarking_en_distintos_lenguajes_=5B_Era?=
        =?iso-8859-1?q?_algo_as=ED_como_cliente_en_jabber=2E=2E=2E_=5D?=
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

El día 17/11/07, Franco Catrin L. <[EMAIL PROTECTED]> escribió:
>
> 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]
>

Hay un compilador JIT para Python que, si bien no hace exactamente lo mismo
que el de Java, también trabaja optimizando en tiempo de ejecución.

    http://psyco.sourceforge.net/introduction.html

PyPy, la implementación de Python en Python, también viene con un compilador
JIT:

    http://codespeak.net/pypy/dist/pypy/doc/jit.html

-- 
Roberto Bonvallet
From [EMAIL PROTECTED]  Sat Nov 17 14:41:47 2007
From: [EMAIL PROTECTED] (Rodrigo Fuentealba)
Date: Sat Nov 17 14:44:34 2007
Subject: =?iso-8859-1?q?Re=3A_Benchmarking_en_distintos_lenguajes_=5B_Era?=
        =?iso-8859-1?q?_algo_as=ED_como_cliente_en_jabber=2E=2E=2E_=5D?=
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
        <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

El 17/11/07, Roberto Bonvallet <[EMAIL PROTECTED]> escribió:
> El día 17/11/07, Franco Catrin L. <[EMAIL PROTECTED]> escribió:
> >
> Hay un compilador JIT para Python que, si bien no hace exactamente lo mismo
> que el de Java, también trabaja optimizando en tiempo de ejecución.
>
>     http://psyco.sourceforge.net/introduction.html

Por lo visto, el personaje de psyco quiere trabajar más en PyPy que en
Psyco "itself".

¿Lo has probado?
¿Cómo podríamos hacer benchmarking? (¿El clásico "time && programa.sh
&& time, como las guaguas, o alguien tiene una mejor idea?)

> PyPy, la implementación de Python en Python, también viene con un compilador
> JIT:
>
>     http://codespeak.net/pypy/dist/pypy/doc/jit.html

Ambas páginas me interesaron muchísimo.

-- 
Rodrigo Fuentealba

Responder a