[pyar] ¿Existe algo asi como un "compilador" Python?

Sergio Schvezov sergiusens en gmail.com
Jue Abr 24 20:36:54 ART 2014


2014-04-24 18:36 GMT-03:00 fisa <fisadev en gmail.com>:

> El día 24 de abril de 2014, 12:12, Ariel Palazzesi
> <arielpalazzesi en gmail.com> escribió:
> > Hola!
> > Como saben, recien estoy empezando a hacer algunas cosas en Python,
> > generalmente tonterias para ejecutar desde la consola de Linux.
> >
> > Veo que hay aplicaciones enormes y complejas hechas con este lenguaje, y
> me
> > pregunto ¿Hay algun compilador para el?  O siempre se interpreta?
> >
> > Saludos, y perdón por la preguntonta.
>
> Lenguaje compilado:
> 1) Escribo código.
> 2) Una sola vez (y eso es importante) lo *compilo*, con un compilador,
> y eso me genera un binario.
> 3) El binario es ejecutado todas las veces que quiero usar el programa.
>
> Lenguaje interpretado:
> 1) Escribo código.
> 2) *Cada vez que ejecuto mi programa* (y eso es importante) un
> intérprete genera instrucciones binarias y las ejecuta a partir de
> leer mi código.
>
> En esta explicación hay algunas cosas que no quedan muy claras. Por
> ejemplo: qué es "binario"? No existe tal cosa como un código de
> instrucciones en binario que sea universal y que se ejecute
> directamente sobre cualquier procesador. Hay varias arquitecturas, y
> normalmente uno no va directo al micro, sino que interactúa con cosas
> que están en el medio (especialmente el sistema operativo). Pero
> bueno, por ahora dejamos esas cosas de lado, no son las que más me
> interesan.
> Para los ejemplos voy a seguir hablando de "binarios" como lo que
> "finalmente se ejecuta en el procesador", sin tener en cuenta si en
> realidad hay alguna capa intermedia del sistema operativo y demás.
>
> Primer cosa que sí interesa: el límite entre esos dos tipos de
> lenguajes ya es borroso.
> Por ejemplo, qué pasa si mi intérprete guarda las instrucciones
> binarias generadas en alguna especie de caché, y las reutiliza la
> próxima vez que ejecuto mi programa? No sería casi lo mismo que un
> compilador? Porque hace la traducción una sola vez, y después ejecuta
> esos binarios.
> Es buena pregunta para hacerle al profe ;)
>

Me parece más borroso que eso

Si defino que a binario a algo que le puedo pasar al sistema operativo y
ejecturar sin necesidad de un tercero(interprete), en otras palabras, es
nativo para el sistema operativo y arquitectura para la cual se compilo.

Java:
javac te compila a bytecode independiente de la plataforma[1], con java
ejecuto ese bytecode. Ahora si uso gcj para compilar, cambia todo, porque
también tengo la opción de generar un binario[2] :-)

Python:
python mi.py compila y ejecuta

Go:
Esto es casi lo mismo
go run main.go
go build && ./main

C/gcc:
gcc helloworld.c && ./a.out
g++ myQtApp.cpp && make coffee && play video games && socialize? &&
nocompileerrors && ./a.out

Entonces resumiendo:
- con compilaciones tradicionales me deshago del interprete y puedo
ejecutar y ya.
- ejecutar por medio del interprete implica compilar a algo y de que el
interprete se haga cargo de ser intermediario en mi sistema.
- a veces conviene compilar porque convertir a ese bytecode intermedio o
binario es muy lento (cosa que no se ve en python o go)
- el binario para ejecutar es batteries included en cuanto interacción con
mi sistema (excepcion por shared libs o dlopen)

Mi burda explicacion sin haber estudiado ciencias de la computacion o
parecidos.

[1] http://en.wikipedia.org/wiki/Java_compiler
[2] http://en.wikipedia.org/wiki/GNU_Compiler_for_Java
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140424/1c212323/attachment.html>


More information about the pyar mailing list