Transpilador
# Transpilador

Transpilador es un tipo especial de compilador que traduce de un lenguaje fuente a otro fuente también de un nivel de abstracción parecido. Se diferencia de los compiladores tradicionales en que estos reciben como entrada ficheros conteniendo código fuente y generan código máquina del más bajo nivel.

## Historia

Uno de los primeros programas de este tipo fue Digital Research XLT86 en 1981, un programa escrito por Gary Kildall, el cual traducía código fuente .ASM del procesador Intel 8080 a código fuente .A86 para el procesador Intel 8086. Utilizando análisis de flujo de datos global sobre el uso de los registros del 8080, el traductor también optimizaba la salida en cuanto a tamaño de código y convenciones de invocación. Así que los programas de CP/M-80 and MP/M-80 pudieron ser portados a las plataformas CP/M-86 y MP/M-86 de forma automática. El XLT86 fue escrito en PL/I-80.

## Utilidad

La utilidad de un transpilador puede no parecer clara para la persona ajena a esta tecnología, pero se trata de programas de una importancia creciente para distintas situaciones como:

* Cuando se quiere portar un código existente a otro lenguaje más moderno
* Cuando se quiere migrar de una versión antigua del lenguaje o librerías a otra más moderna
* Cuando se utiliza un compilador de modelos (UML) se genera un código de alto nivel que puede ser transpilado a código en lenguajes tradicionales como Java o C++.

Esta última aplicación es de especial importancia hoy en día pues hay productos que ofrecen ya la posibilidad de crear aplicaciones a partir de un modelo gráfico enriquecido y generan la aplicación completa en un tiempo de desarrollo muy bajo (p.e. Outsystems, Mendix, Appian, Kony, etc.)

## Ejemplos

Uno de los usos más habituales de la actualidad es la transpilación de la versión propuesta de sintaxis de Javascript última revisión 2015 y posterior (que no es soportada todavía por ningún navegador) a la sintaxis específica soportada por los navegadores actuales. En esta categoría podemos encontrar a

* Babel: Transpilador de ECMAScript 2015+ a la sintaxis de navegadores actuales
* Traceur: Compilador de la última sintaxis de Javascript a la de los navegadores

Otros ejemplos de transpiladores son:

Lista de transpiladores :

| Nombre | Lenguaje fuente | Lenguaje destino |
| - | - | - |
| Cfront | C++ | C |
| HipHop for PHP (HPHPc) | PHP | C++ |
| Babel | JavaScript ES6 | JavaScript ES5 |
| ClojureScript | Clojure | JavaScript |
| JSweet | Java | TypeScript |
| Swiftify | Objective-C | Swift |
| J2ObjC | Java | Objective-C |
