Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

Python en Go a través de “Grumpy”

Los lenguajes de programación siempre están evolucionando. La razón de ello es que también el hardware evoluciona y por ende, hay que dotar de herramientas...

Los lenguajes de programación siempre están evolucionando. La razón de ello es que también el hardware evoluciona y por ende, hay que dotar de herramientas que puedan manejar las nuevas tecnologías que van saliendo. Por otra parte, muchas empresas hoy en día requieren de software para hacer sus tareas cotidianas y por ello hay compañías que se dedican a crear los elementos que permitan estos desarrollos.

Google por ejemplo, ha desarrollado un módulo de tiempo en ejecución (runtime), para Python, que traduce el código fuente a código de Go, entonces el código corre en el módulo de ejecución del propio Go. La razón de esta idea tiene que ver con la carga de trabajo que supone hacer concurrencia y que ésta se desempeñe adecuadamente. En un artículo en el blog de Google, Dylan Trotter explica:

“Google corre millones de líneas de código de Python. El servidor de “front-end”que por ejemplo, maneja YouTube.com y el API de YouTube está escrito principalmente en Python y sirve millones de peticiones por segundo (!). El servidor de YouTube, por ejemplo, corre en CPython 2.7, por lo que hemos puesto una enorme cantidad de trabajo para mejorar el runtime y adaptar nuestras aplicaciones para que trabajen de forma óptima entonces”.

Trotter explica que aunque el trabajo ha sido relativamente exitosos, hay problemas por resolver que hacen que la concurrencia en CPython sea difícil de resolver adecuadamente. Otros runtimes de Python tienen sus propias dificultades. El mismo programador lo explica: “Nos preguntamos algo quizás loco, sin sentido. ¿Qué tal su pudiésemos implementar un runtime alternativo optimizado para peticiones en tiempo real?” La elección de Go como la plataforma se decidió gracias a los beneficios que supone, incluyendo una implementación de threads relativamente ligera y la interoperabilidad del lenguaje.

El resultado de todo esto fue bautizado como Grumpy, un runtime experimental de Python para Go, el cual traduce el código de Python en programas de Go y estos programas corren dentro del ambiente de Go. Es pues una especie de compilador de Python que genera código de Go.

La meta de Grumpy es hacer un runtime que reemplace el original para proyectos puros en Python. Hay dos limitaciones en este diseño hecho por los desarrolladores. Primero, debido a que no hay soporte a las extensiones de C, Grumpy no puede hacer uso de las extensiones de C en Python. Las elección se hizo porque da a los desarrolladores flexibilidad para diseñar un API y una representación de objetos que puedan escalarse para cargas de trabajo en paralelo.

La segunda limitación es que Grumpy no es un intérprete. Los programas de Grumpy se compilan y se ligan como cualquier otro programa de Go. Esto limita el desarrollo y la flexibilidad, pero crea la oportunidad de optimizar el desempeño en tiempo de compilación vía el análisis estático del programa. Esto también significa posibilidad de interoperabilidad del código de Go, con lo cual lo vuelve más poderoso y directo. Los programas de Grumpy pueden importar paquetes de Go como se hace con los módulos en Python.

Otra limitación es que Grumpy corre Python 2.7 y no la versión 3.0. Los desarrolladores de Google dijeron que esto es porque tienen una amplia base de código escrito en la versión 2.7. Trotter indicó que le gustaría dar soporte a Python 3, pero es mucho trabajo.

Grumpy está en versión Alpha y Trotter dice que aún “hay muchos agujeros que tapar, por ejemplo, muchos tipos interconstruidos y muchas funciones aún no están implementadas”, pero por supuesto que esto con el tiempo será subsanado.

Referencias: Grumpyi-programmer 

Comentarios