Un compilador es un programa de software que transforma un programa o código escrito en un lenguaje de programación de alto nivel en un lenguaje legible por máquina de bajo nivel. Cuando escribimos un programa o código que puede estar en un lenguaje de alto nivel, como C, C++ o como el que se muestra a continuación.
//Simple Java program public class simple{ public static void main(String[] args){ System.out.printIn("Hello World") } }
Un lenguaje de alto nivel está más cerca del inglés, lo que nos facilita la escritura de programas. Pero no podemos simplemente ejecutar el mismo código en una computadora ya que las máquinas no pueden entender eso. Todo lo que una computadora puede entender es código binario, es decir, unos y ceros. Por lo tanto, la solución al problema de que las computadoras no pueden entender lenguajes de alto nivel sería convertirlos en código binario comprensible por máquina. Esta es la tarea exacta que realiza un compilador.
El proceso de compilación del programa simple ‘hola mundo’ sería el siguiente:
- Creamos el programa ‘hola mundo’ y guardamos el archivo como Hola.java.
- Cuando completamos este programa, el compilador genera el código de máquina equivalente y lo guarda en el archivo de clase del mismo nombre pero con la extensión de clase Hello.class.
- Y cuando se ejecuta el programa, es el archivo de clase el que se ejecuta y da la salida.
Las compilaciones son de muchos tipos, pero en este artículo, vamos a aprender sobre una específica, que es el compilador de fuente a fuente.
Compilador de fuente a fuente:
un compilador de fuente a fuente (compilador S2S) también se conoce con otros tres nombres, el primero es el traductor de fuente a fuente, el segundo es transcompilador y el tercero es transpilador. Si tratamos de resumir el trabajo del compilador fuente a fuente en una oración, quedaría de la siguiente manera:
Un compilador S2S recibe como entrada el código fuente de un programa al que devuelve un código fuente con la misma funcionalidad general en el mismo lenguaje de programación o en uno diferente.
A diferencia del compilador general cuyo trabajo es convertir un lenguaje de programación de alto nivel a un lenguaje de máquina que es binario, el compilador fuente a fuente convierte un código fuente de un lenguaje de programación a otro lenguaje de programación que está en el mismo nivel de compilación de máquina. idioma. Por ejemplo, mientras que el compilador tradicional puede convertir C a ensamblador o Java a bytecode , el compilador fuente a fuente puede convertir un lenguaje de secuencias de comandos a otro, como Javascript a Python o C++ a Java .
A continuación se enumeran algunos ejemplos de compiladores tradicionales:
Nombre | Lenguaje fuente | Lengua de llegada |
CCG | C++ | Lenguaje binario/máquina |
Sonido metálico | C++ | Lenguaje binario/máquina |
JAVAC | Java | Código de bytes |
GCJ | Java | Código de bytes |
TJUE | Java | Código de bytes |
A continuación se enumeran algunos ejemplos de compiladores de fuente a fuente:
Nombre | Lenguaje fuente | Lengua de llegada |
Frente | C++ | C |
HPHPc | PHP | C++ |
Babel | ES^+(JS) | ES5 |
ClojureScript | clausura | JavaScript |
jsdulce | Java | TypeScript |
Swiftificar | C objetivo | Rápido |
J2ObjC | Java | C objetivo |
Haxé | Haxé |
ActionScript3, JavaScript, Java, C++, C#, PHP, Python, Lua |
Maia | Maia | Verilog |
Cerbero X | cerbero | JavaScript, Java, C++, C# |
Una de las principales aplicaciones fuente de los compiladores de fuente a fuente es convertir el código antiguo, es decir, el código heredado, a las versiones más nuevas de un lenguaje de programación o una API que ayuda a mantener la compatibilidad con versiones anteriores del código. Las herramientas son muy útiles para actualizar bases de código grandes y antiguas que, de lo contrario, llevarían demasiado tiempo para hacerlo manualmente. Un ejemplo podría ser convertir el programa de la versión anterior de C++ a la versión estable actual que es C++20. O también podría ser el caso de una API como el antiguo programa Dart para convertirlo a la versión más nueva de Dart 2.0. La estructura del podría más nuevo depende del compilador. Podría ser muy similar al código original para facilitar el proceso de desarrollo de un idioma a otro o de la versión anterior a la más nueva.
Si observamos más de cerca la tabla anterior, podemos deducir que el uso inicial de algunos de los principales lenguajes de programación, como PHP o C++, se inició como compiladores fuente a fuente, ya que su uso principal era convertir a la otros lenguajes de programación convencionales. Hoy también, si echamos un vistazo, podemos identificar lenguajes como Dart, Typescript, CoffeeScript, Emcscript y otros que se utilizan principalmente para la conversión a otros lenguajes.
Traductor de lenguaje ensamblador:
los traductores de lenguaje ensamblador son uno de los ejemplos más importantes del compilador fuente a fuente. A continuación, hemos discutido brevemente los cuatro traductores de lenguaje ensamblador.
- Intel CONV86:
es uno de los primeros compiladores que podría traducir el ensamblado al binario. A fines de los años 70, fue fabricado por Intel, que es famoso por fabricar procesadores. El propósito previsto para esto era ejecutar de manera confiable el programa creado para un procesador de 8 bits en el procesador de 16 bits de Intel. Según los usuarios, al ser uno de los primeros de su tipo, no pudo cumplir con las expectativas. - SCP TRANS86:
similar al Intel CONV86, este traductor fue desarrollado en 1980 por un ingeniero llamado Tim Paterson, conocido como el creador del famoso 86-DOS. Este traductor fue diseñado para traducir código ensamblador de Intel 8080 y Zilog Z80 a código .ASM para el procesador Intel 8086 de 16 bits de Intel. Pero al igual que su contraparte anterior, no pudo realizar el trabajo de manera efectiva y requirió muchas correcciones manuales. - Sorcim TRANS86 –
Socrium es una start-up que también ofreció un traductor de ensamblaje al mercado en 1980. También se inventó para convertir el ensamblaje a MS-DOS. Este traductor resultó ser un mejor sustituto de los dos anteriores. - Digital Research XLT86 –
Este traductor apareció en el mercado en septiembre de 1981 y fue desarrollado por Gary Kildall. Antes de este traductor, nadie más tenía el enfoque del compilador optimizador que proporcionaba un rendimiento efectivo. Al igual que SCP TRANS86, su objetivo también era convertir el código fuente .ASM de Intel 8080 en el código .A86 para Intel 8086.
Estos cuatro traductores de código ensamblador marcan el comienzo de los compiladores fuente a fuente, que ahora habían progresado mucho.
Publicación traducida automáticamente
Artículo escrito por ankit_kumar_ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA