On 1/16/13 10:38 AM, Chema Cortes wrote:
Hasta hoy, desconocía totalmente la infraestructura LLVM[1] como
soporte en la creación de compiladores (estáticos o dinámicos). Estoy
viendo que con él se están implementando bastantes lenguajes de
programación y librerías (sobre todo de cálculo).
Me preguntaba si álguien conoce algo LLVM como para comentar sus
virtudes en la implementación de lenguajes como Julia[2] (similar a
python, orientado al cálculo numérico) o como "target" de PyPy.
Entiendo que no es una "máquina virtual", a pesar de lo que pueda
parecer su acrónimo, pero me interesaría saber en particular qué tal
se lleva esta infraestructura con el multiproceso y la escalabilidad,
como en el caso de la computación paralela distribuída que posee
Julia.
Yo no puedo opinar mucho de la interacción de LLVM con Julia por que no
lo conozco demasiado, pero sí que puedo decir que en Continuum estamos
poniendo a punto Numba (https://github.com/numba/numba), un compilador
al vuelo (JIT) que traduce código Python al lenguaje intermedio (IR) que
usa LLVM internamente. LLVM, a su vez, compila el IR a código nativo
(que depende de la platforma) y lo ejecuta (o lo puede guardar en un
fichero binario, esto ya depende de la aplicación).
Numba permite, mediante decoradores y anotaciones de tipo, hacer que
funciones puras en Python (ahora mismo no se soporta todo el lenguaje,
pero sí un subconjunto bastante amplio) puedan correr a velocidad de C
puro, y lo que es mejor, de manera completamente interactiva (la
compilación al vuelo es realmente rápida). Numba es completamente
open-source, así que cualquiera puede contribuir al proyecto (de hecho
alguien de esta lista ya menciona que han contribuido ya).
Pero no hay que llevarse a engaño: LLVM realmente no es una tecnología
demasiado útil para PyPy, ya que éste último viene con su propio
compilador JIT, asi no se complementan demasiado bien. En Continuum
claramente hemos apostado más por LLVM (via Numba) que por la vía PyPy.
La ventaja de Numba es que no se tiene por qué renunciar a librerias que
son extensiones (el proyecto de migración de NumPy a PyPy está siendo
lento y plagado de trampas, y ya somos muchos los que dudamos de que se
pueda llevar a cabo de una manera completa). Numba permite compilar de
manera selectiva la parte de código Python que es un cuello de botella,
respetando toda la gama de librerias y extensiones que ya existen ahora
mismo.
Por supuesto que Blaze (https://github.com/ContinuumIO/blaze), nuestro
proyecto para reemplazar NumPy para problemas de Big Data, usará Numba
como motor de cálculo de manera que el usuario no tenga que preocuparse
de hacer extensiones para optimizar los cálculos, sino que éstos se
efectuarán a velocidad de C (¡y sin arrays temporales!) directamente.
Blaze es otro desarrollo open source, y aunque todavía está en su
infancia, esperamos que de aquí a no mucho tiempo ya pueda ser posible
hace cosas interesantes con él.
--
Francesc Alted
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/