lunes, 23 de enero de 2017

Sobre las variedades de Python y su interoperabilidad

Retomo nuevamente este blog después de una larga pausa exponiendo sobre el tema de las distintas variedades de Python, sobre las cuales seguramente habrán oído: CPython (no confundir con Cython), Jython, RPython, IronPython, Brython, etc. En realidad, nunca me he puesto a profundizar sobre el tema hasta que me topé con un artículo en el blog de Toptal sobre esto titulado '¿Porqué hay tantos Pythons?'. Toptal es un sitio que reúne los mejores freelancers de la industria del diseño y el desarrollo de software y aplicaciones web, con especialistas en desarrollo para Android, JavaScript, Java, Data Science y por supuesto, Python. Toptal tiene un blog, con algunos artículos traducidos al español, que vale la pena mirar.

Detrás de esta discusión sobre las distintas "variedades" de Python está el tema de cómo Python "compila" el código de un script para generar bytecode que luego es interpretado por una máquina virtual que interactúa directamente con el compilador. Entonces debemos entrar en el tema del bytecode, de las máquinas virtuales, de los compiladores y de los interpretes y sobre todo, como estos conceptos se aplican a lo que es Python realmente - ¿es un compilador o un interprete? Toda esta discusión es llevada de manera muy amena y sencilla por el autor del mencionado artículo. El entender estos temas ayuda a comprender la gran popularidad de Python entre la comunidad de desarrolladores y a qué se debe su gran versatilidad e interoperabilidad.


Python y sus máquinas virtuales - Blog Toptal

El simple hecho de que una vez que se "compila" el código en Python a bytecode (que es independiente de la máquina física) y luego este sea interpretado por una máquina virtual que interactúa directamente con la máquina física abre muchas posibilidades de interoperabilidad para Python. Por ejemplo, usando Jython, que es un Python cuya máquina virtual corre en Java, es teóricamente posible escribir aplicaciones para Android. Jython compila el código Python a bytecode de Java, es decir, a archivos .class. Para desarrollar aplicaciones para Android, uno recompilaría el bytecode de Java a bytecode de Dalvik, el cual debería correr en Android siempre y cuando el código no dependa de API's de Java que Android no provea. Ojo, yo personalmente no he probado nada de esto pero según lo que he leído (consultar fuentes), es teóricamente factible.

De igual manera, con Brython u otras variedades similares, la máquina virtual traduce el bytecode de Python a Javascript, con lo cual se abren posibilidades interesantes para desarrollar aplicaciones en la web con Python. Nuevamente, esto es territorio aún desconocido para mi. Si algún lector tiene experiencia en estos temas, mucho le agradecería que nos cuente en los comentarios de esta entrada.

Referencias