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/

Responder a