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

2 comentarios:

  1. Saludos profesor espero se encuentre bien tiempo sin saber de usted y me alegra ver que retoma la actividad en este blog ya que es una iniciativa que promueve el uso del lenguaje python, que ademas de ser una tecnología libre se ha convertido en un lenguaje importante en la actualidad. Yo me identifico mucho con el desde que tuve la oportunidad de ser su estudiante en la UNEFA y aunque no he podido profundizar tanto como he querido actualmente es uno de los lenguajes que le dedico cierto tiempo de practicas.. quisiera compartir con usted el siguiente blog: http://ideas-y-programacion.blogspot.com/ en el cual muestro cosas pequeñas que voy desarrollando a medida que voy conociendo a python.. Saludos Cordiales Profesor.

    ResponderEliminar
  2. Hola José Tayupo: Que alegría saber de ti y que te has mantenido en el aprendizaje del Python. Voy a revisar tu blog con calma y luego te comento... Justamente, quería comunicarme contigo. Escríbeme a mi correo jlaurentum@gmail.com para discutir contigo algunas ideas que tengo en mente.

    ResponderEliminar