Cómo convertir Python a JavaScript (y viceversa)

Python o JavaScript? Si bien todavía estamos discutiendo sobre cuál tiene la ventaja o el futuro más brillante, existen pocas dudas sobre cuál es el propietario de la interfaz web. Es JavaScript en el navegador o nada.

Bueno tal vez no nada. JavaScript es un lenguaje de destino favorito para "transpiladores" que convierten un lenguaje de programación en otro (ver: TypeScript, Emscripten, Cheerp, Cor). Y el gran número de seguidores y la gran cantidad de bibliotecas disponibles de Python lo convierten en un gran candidato para ser convertido, es decir, transpilado, a JavaScript.

Aquí hay cuatro proyectos actuales para hacer que Python sea útil en el mundo de JavaScript. Uno se destaca al poder convertir en ambas direcciones.

Brython

Una de las promesas que hace WebAssembly es permitirnos usar cualquier lenguaje que elijamos desarrollar para la web, aunque este sigue siendo un objetivo distante. La filosofía detrás de Brython, al menos en lo que respecta a Python 3, es ¿por qué esperar?

Brython implementa una versión de Python 3 para la programación web del lado del cliente a través de una biblioteca de JavaScript que emula todas las palabras clave y la mayoría de los elementos integrados para Python 3. Los scripts escritos en Python se pueden incluir directamente en una página web. Brython proporciona una interfaz de módulo Python de alto nivel (el navegador paquete) para interactuar con el DOM y el navegador, es decir, para manejar todo el trabajo que normalmente se realiza directamente en JavaScript.

Muchos ejemplos de código en vivo y una galería de miniaplicaciones demuestran cómo funciona todo. Incluso es posible usar Brython para escribir una aplicación nativa de Android en Python. La funcionalidad asíncrona está disponible, aunque debe usar Brython asíncrono módulo en lugar de Python asyncio.

Brython no escapa a las restricciones impuestas a JavaScript en el navegador. Por ejemplo, no hay soporte para tratar con el sistema de archivos local. Hay, sin embargo, soporte para usar el almacenamiento local HTML5, si todo lo que necesita es alguna forma de conservar los datos por aplicación.

JavaScripthon

JavaScripthon se enfoca estrictamente en traducir Python 3.5 y código posterior a JavaScript, sin tratar de proporcionar soporte completo en el navegador según proyectos como Brython. Emite código ES6 para minimizar la necesidad de polyfills en el lado del navegador, y juega bien con herramientas como Webpack al preservar los mapas de origen.

La mayoría de las palabras clave y comportamientos comunes de Python son compatibles, incluidos asíncrono y esperar, Python 3.6 f-strings, y métodos y herencias de clase Python. También puede insertar JavaScript en línea mediante una llamada de función especial, si alguna vez necesita desplegarse directamente a JavaScript.

Tenga en cuenta que las últimas confirmaciones para el proyecto JavaScripthon fueron en mayo de 2018, por lo que no ha recibido soporte para las últimas funciones de Python, como el "operador de morsa". Pero cualquier persona que use las características de Python 3.6 debería recibir un buen soporte.

[[También en InfoWorld: 24 bibliotecas de Python para cada desarrollador de Python ]

Jiphy

El nombre Jiphy es una abreviatura de "JavaScript in, Python out". En otras palabras, Jiphy convierte en ambas direcciones entre los dos idiomas. Además, el código de ambos idiomas puede mezclarse antes de convertirse a cualquier idioma de destino.

Antes de sumergirse y comenzar a convertir todo OpenStack a JavaScript, preste atención: Jiphy no se trata de una conversión de base de código completa. Más bien, su función es, como dice README, "reducir el cambio de contexto necesario para que un desarrollador de Python escriba código JavaScript y viceversa".

El mayor inconveniente de Jiphy es que solo admite un subconjunto de las características de Python. Ni las clases ni los argumentos predeterminados están disponibles, aunque se admiten decoradores y excepciones. Gran parte de esto se debe a que Jiphy se esfuerza por una relación de línea a línea entre el código fuente y el de destino, pero sus desarrolladores han observado Nuevas características en ES6 para un soporte más avanzado de funciones de Python.

Tenga en cuenta que el proyecto Jiphy no se ha actualizado desde finales de 2017. Jiphy debe considerarse estrictamente experimental hasta que se reanude el trabajo.

JS2Py

JS2Py convierte JavaScript a Python, como su nombre lo indica, usando un motor de conversión de Python puro. En este momento solo tiene soporte oficial para ES5, aunque hay soporte experimental de ES6 para valientes y audaces.

JS2Py admite una gran cantidad de interoperación cruzada entre Python y JavaScript. Puede importar módulos Node.js existentes en su código Python, a través de un js2py.require método. Las variables del lado de JavaScript se pueden evaluar en el lado de Python, y los objetos de Python también se pueden usar a partir del código de JavaScript.

JS2Py también incluye una máquina virtual altamente experimental que evalúa el código JavaScript de Python, pero aún no se recomienda su uso en producción.

RapydScript

RapydScript promete "JavaScript Pythonic que no apesta". El proyecto es similar a CoffeeScript en que ingiere código escrito en un lenguaje alternativo, en este caso, una versión de Python, y genera JavaScript que puede ejecutarse en cualquier lugar tal como está.

Por lo tanto, RapydScript proporciona lo mejor de ambos mundos, brindando la sintaxis limpia de Python a las capacidades de JavaScript como funciones anónimas, manipulación de DOM y la capacidad de aprovechar bibliotecas de JavaScript como jQuery o el núcleo Node.js. Así es: puede usar el código generado por Rapydscript para manejar páginas web o aplicaciones Node.

Otra característica conveniente de RapydScrypt: ofrece nomenclaturas de Python y JavaScript para ciertas operaciones cuando es posible. Por ejemplo, el PS El símbolo especial utilizado por jQuery funciona tal cual en RapydScript, y las matrices pueden admitir .empujar (JavaScript) y .adjuntar (Python) métodos.

Transcripción

Si escuchas el nombre Transcrypt y piensas en TypeScript, no estás lejos de la marca. Transcrypt sigue la misma idea básica: transpila Python a JavaScript. También trata de preservar, siempre que sea posible, la estructura y las expresiones idiomáticas del código original de Python, incluidas construcciones como lambdas y herencia múltiple entre clases.

Además, se pueden generar mapas de origen para el código transpilado que apunta de nuevo al Python original, para que los desarrolladores puedan depurar el uso de ese código en lugar del JavaScript generado. De acuerdo con la documentación, Transcrypt realiza estas tareas con el módulo Árbol de sintaxis abstracta de CPython, que permite el acceso programático a la forma en que Python analiza su propio código.

Una de las mayores ventajas de Transcrypt es el acceso automático al Modelo de objetos de documento (DOM) de JavaScript. Si intentas acceder document.getElementById en Python, por ejemplo, el código convertido usará el actual document.getElementById en JavaScript

Un proyecto asociado, y uno todavía muy en secreto, es Numscrypt, que porta la biblioteca de estadísticas y matemáticas NumPy a JavaScript. Hasta ahora, Numscrypt proporciona solo un subconjunto de las características de NumPy, aunque estas características (por ejemplo, matemática matricial) se encuentran entre las más utilizadas. Sin embargo, Numscrypt no se ha actualizado desde 2018.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *