Fuente: Ward CunninghamLa transpilaci贸n es la conversi贸n de c贸digo de un idioma a otro. Usando un transpilador especial (transcompilador), un lenguaje de programaci贸n de prop贸sito general se puede transferir a cualquier otro lenguaje de programaci贸n de prop贸sito general.
Si necesita cambiar a otro idioma, los transpiladores ayudar谩n a los desarrolladores a guardar la mayor parte del c贸digo existente sin tener que volver a escribir manualmente el c贸digo completo. Por ejemplo, al convertir programas de Python 2 a Python 3, o al mover software de la API anterior a la nueva.
Los t茅rminos transpilador y transcompilador a menudo se usan indistintamente, pero a煤n se
cree que existen diferencias. Por ejemplo, para convertir el c贸digo C ++ a C, necesita un transpilador, y para convertir Python-Ruby, necesita un transcompilador.
Babel para JavaScript es un transpilador, y
TypeScript es un lenguaje transcompilado.
A veces, despu茅s de la conversi贸n por el transportista, para el correcto funcionamiento del c贸digo, se requiere una configuraci贸n manual, mientras que en los idiomas transcompilados el c贸digo debe funcionar sin cambios. Hoy hablaremos sobre esos y otros, pero lo m谩s importante, hablaremos sobre proyectos trans populares que los desarrolladores pueden usar en su trabajo diario.
Transpilaci贸n frontal
La conversi贸n es una parte importante del desarrollo front-end: a medida que las nuevas caracter铆sticas aparecen lentamente en los navegadores, se han creado idiomas con capacidades experimentales que se traducen a idiomas compatibles con el navegador.
Los desarrolladores de navegadores que usan su propio motor de JavaScript en cada proyecto tambi茅n son responsables del auge de los idiomas trans para JavaScript. Como resultado, los navegadores tienen un rendimiento diferente, implementan su propio conjunto de funciones de JavaScript y se acercan al cumplimiento total de las especificaciones a diferentes velocidades.
Sass ,
Less y
Stylus facilitan la creaci贸n de c贸digo CSS. Por lo tanto, Sass tiene una sintaxis flexible, l贸gica (@if, cada una), matem谩ticas (puede agregar n煤meros, l铆neas y colores), por lo que toda la riqueza del c贸digo se transforma en un programa CSS regular de rub铆es.
Less (Leaner Style Sheets) tiene el mismo aspecto que CSS, pero tiene adiciones convenientes: variables, mixins, operaciones aritm茅ticas (como Sass), etc.
Stylus est谩 escrito en Node.js y difiere de Sass y Less en una sintaxis m谩s limpia. Pero, de hecho, estos tres idiomas son muy similares entre s铆, por lo que no se equivocar谩 si selecciona alguno de ellos.
Diga "隆Hola, mundo!" En CoffeeScript, que podr铆a ser m谩s simple:
alert "Hello, World!"
CoffeeScript ha sido durante mucho tiempo el proyecto JavaScript
m谩s popular . Esto no es sorprendente: combinando accesibilidad (la documentaci贸n cabe en una p谩gina), caracter铆sticas funcionales (corchetes, sangr铆a, etc.) y sintaxis pura inspirada en Ruby, este lenguaje brinda a los desarrolladores muchos grados de libertad y permite que JS sea m谩s expresivo.
Master TypeScript:
let message:string = "Hello World" console.log(message)
TypeScript es un proyecto competitivo para JavaScript, un lenguaje de secuencias de comandos con la adici贸n de escritura est谩tica opcional. Le permite describir de manera m谩s completa las propiedades y m茅todos de objetos y clases, a diferencia de JS, eliminando la necesidad de verificar todos los argumentos que se incluyen en un m茅todo o funci贸n.
Existe la opini贸n de que JavaScript es un lenguaje con fallas fundamentales. De lo contrario, es dif铆cil explicar la popularidad de los trans-idiomas que trabajan espec铆ficamente para corregir sus deficiencias. Adem谩s de los proyectos anteriores, tambi茅n hay un lenguaje de programaci贸n web flexible
Dart , un compilador de JavaScript en el
compilador de cierre de JavaScript y muchas otras soluciones, que puede encontrar en la p谩gina "
Lista de idiomas que compilan en JS ".
Convierte a C
En 2006, apareci贸 el proyecto
Vala , que consta de dos lenguajes: Vala y Genie, que traducen el c贸digo C m谩s com煤n, que, a su vez, se compila en un archivo o biblioteca ejecutable.
La sintaxis de Vala es muy similar a C #, pero est谩 adaptada para una mejor compatibilidad con los sistemas GObject, mientras que Genie tiene mucho en com煤n con Python. El primer idioma ahora es m谩s com煤n que Genie, as铆 que echemos un vistazo m谩s de cerca.
驴Por qu茅 necesitabas tal proyecto? Muchos desarrolladores quer铆an escribir aplicaciones y bibliotecas para GNOME en lenguajes de alto nivel, pero por diversas razones no pod铆an o no quer铆an usar C # o Java. Vala le permite crear r谩pidamente c贸digo complejo orientado a objetos, que admite C API est谩ndar y ABI con bajos requisitos de memoria.
Las bibliotecas C # y Java no pueden usarse de la misma manera que las bibliotecas nativas de GObject de C y otros lenguajes, y no pueden considerarse parte de la plataforma GNOME. Valac, el transcompilador de Vala, crea archivos C a partir de archivos fuente de Vala como si escribiera su biblioteca o aplicaci贸n directamente en C. Usar la biblioteca Vala de la aplicaci贸n C no es diferente de usar cualquier otra biblioteca basada en GObject.
Leemos y escribimos el archivo a Vala:
voidmain () { try { string filename = "data.txt";
Puede familiarizarse con otros ejemplos de c贸digo en el
sitio .
De Flash a multiplataforma
Haxe se cre贸 al mismo tiempo que Vala, pero est谩 destinado a transpilarse en Flash, JavaScript y Neko. Con tal conjunto de habilidades, el lenguaje estaba condenado a la extinci贸n, pero no solo sobrevivi贸, sino que tambi茅n gan贸 gran popularidad.
El secreto del 茅xito es multiplataforma. Con el tiempo, Haxe se ha convertido en un poderoso conjunto de herramientas que admiten la transcompilaci贸n en varios lenguajes y plataformas, incluidos JavaScript, C ++, C #, Java, JVM, Python, Lua, PHP y Flash.
Haxe es un lenguaje de programaci贸n moderno, de alto nivel y fuertemente tipado. Al mismo tiempo, es bastante simple y pr谩ctico, por lo que la compilaci贸n se puede adaptar a varias plataformas de destino. Su sintaxis es b谩sicamente el est谩ndar ECMAScript, pero se cambia si es necesario.
"Hola mundo" en Haxe:
class Main { static public function main():Void { trace("Hello World"); } }
En JavaScript, estas l铆neas de c贸digo se ver谩n as铆:
haxe -main HelloWorld -js HelloWorld.js
Y en Java as铆:
haxe -main HelloWorld -java path/to/java/out
La mayor铆a del c贸digo Haxe est谩 organizado en clases y funciones, lo que lo convierte en un lenguaje OOP que se parece a Java, ActionScript 3 y C #. Sin embargo, Haxe fue dise帽ado con 茅nfasis en el pragmatismo y la facilidad de sintaxis.
Y sobre los transpiladores
- C2Rust y Corrode son dos oportunidades no impecables para migrar de C a Rust.
- VOC es un transportador de Python 3.4+ a Java que lo ayudar谩 a crear aplicaciones de Android basadas en el c贸digo de Python.
- Lombok es una soluci贸n interesante para quienes no les gusta Java, o no les gusta nada m谩s que Java. Este es un complemento de compilaci贸n que agrega nuevas "palabras clave" a Java y convierte las anotaciones en c贸digo Java, lo que reduce los esfuerzos de desarrollo y proporciona funcionalidad adicional. Por ejemplo, permite el uso de la palabra clave val (un an谩logo de var de C #) en el c贸digo Java normal.
- Bridge.NET le permite usar el rendimiento de C # en JavaScript, as铆 como el potente IDE de VisualStudio y las herramientas est谩ndar de .NET (como msbuild, refactorizaci贸n, pruebas unitarias, an谩lisis est谩tico, visualizaci贸n de c贸digo, FxCop).
- Grumpy traduce el c贸digo de Python en una representaci贸n de Go y le permite ejecutar sin problemas programas de Python en entornos de tiempo de ejecuci贸n de Go. El proyecto elimina el problema del bloqueo global del int茅rprete, que no permite la ejecuci贸n paralela de varios hilos de c贸digo.
Por supuesto, hay muchos otros transpiladores. Tradicionalmente, puedes hablar sobre tus herramientas favoritas en los comentarios.
Conclusi贸n
Hay una gran cantidad de otros idiomas, por lo que para su proyecto siempre puede elegir el m谩s adecuado. Pero las situaciones en las que se necesita la conversi贸n de c贸digo a c贸digo no son infrecuentes, ya que las transcripciones de C ++ a C, PHP a C ++ y "cualquier cosa en JavaScript" ocurren con bastante frecuencia.
Un "traductor" de un idioma a otro es una buena idea, pero solo mientras el resultado pueda predecirse claramente y usarse sin riesgo. Entonces, la transici贸n de COBOL a Java fue dif铆cil, porque en Java antes de JDK 1.4
no hab铆a archivos mapeados en memoria . Y el C2Rust y Corrode mencionados en el art铆culo dan un c贸digo no idiom谩tico, marcado como inseguro y lleno de punteros en bruto.