¿Qué es Emscripten (compilador)? Definición | Programación

Emscripten es el nombre de un compilador que traduce la mayor parte del lenguaje LLVM a JavaScript. De esta forma, permite ejecutar el código de varios lenguajes de programación en los navegadores actuales.

El trabajo de Emscripten es compilar diferentes lenguajes entre sí. El principal desafío aquí es traducir un lenguaje fuente a nivel de máquina (LLVM) a otro tipo de lenguaje (lenguaje de alto nivel). Esto significa que Emscripting se enfrenta a la tarea opuesta a la que normalmente hace un compilador.

Emscripten es un proyecto de código abierto. Está disponible bajo licencia del MIT y bajo licencia de la Universidad de Illinois / NCS Open Source (licencia UIUC). El desarrollador principal del proyecto es Alon Zakai, quien también es conocido por su trabajo para Mozilla.

Desafíos y características especiales

Traducir un lenguaje a nivel de máquina a un lenguaje de alto nivel plantea una serie de desafíos que difieren de otros compiladores.

Los motores de JavaScript suelen estar diseñados para un flujo de código natural. Está disponible en código fuente manual. Por el contrario, falta en la infraestructura LLVM a nivel de máquina. En lugar de las ramas y los bucles en el código fuente escrito a mano, la secuencia del programa está determinada por saltos y etiquetas de salto.

Por tanto, una de las tareas es restaurar el lenguaje original de alto nivel. Solo de esta forma se puede crear JavaScript de alto rendimiento. Otros compiladores pueden adoptar construcciones de lenguaje de alto nivel directamente. Sin embargo, su desventaja es que solo pueden admitir un solo idioma de origen.

Además, existe un desafío adicional en la implementación de la semántica del código fuente exactamente mientras se sigue produciendo JavaScript de alto rendimiento. No todas las operaciones en el lenguaje LLVM se pueden implementar directamente en JavaScript.

Conexión a la infraestructura del compilador LLVM

LLVM es un nombre propio para el proyecto y originalmente era una abreviatura de Low Level Virtual Machine. Ya no tiene mucho en común con la versión original de una máquina virtual. El proyecto LLVM define el lenguaje ensamblador LLVM.

La LLVM IR (representación intermedia LLVM) representa una abstracción del lenguaje de máquina para los procesadores actuales El código de un determinado lenguaje de programación se puede traducir al lenguaje LLVM a través de una interfaz. Un backend puede traducir el LLVM al código de la plataforma de destino.

En este contexto, Emscripten asume el papel de backend. De esta forma, una gran cantidad de lenguajes de programación fuente originales se pueden traducir al lenguaje de la plataforma de destino (en este caso JavaScript). Emscripten aún puede hacer uso de las opciones de optimización de código que las herramientas LLVM ya contienen de fábrica.

Ejecución de lenguajes y posibilidades

Ejecución de lenguajes y posibilidades
Ejecución de lenguajes y posibilidades

Básicamente, se pueden concebir dos opciones para ejecutar un lenguaje utilizando emscripts en Internet. El código intermedio LLVM generado por una interfaz existente se puede traducir directamente a JavaScript. O todo el entorno de ejecución utilizado para ejecutar el lenguaje se traslada a JavaScript.

El método mencionado en primer lugar se considera la variante más eficaz. De esta manera, numerosos lenguajes populares y ampliamente utilizados se pueden traducir a JavaScript. Sin embargo, si todavía no existe una interfaz para un determinado lenguaje, el segundo método ofrece un enfoque alternativo.

Si el entorno de ejecución del lenguaje se escribió en un lenguaje compatible con una interfaz LLVM, es posible una traducción completa a JavaScript. Esto significa que se puede ejecutar en la web. El código se puede analizar directamente en el navegador. También se puede ejecutar en el entorno de ejecución que se ejecuta dentro del motor JavaScript.

Emscripten y su funcionalidad interna

Emscripten se desarrolló como un compilador en sí mismo dentro de JavaScript. Esto va de la mano con algunas ventajas de uso. Emscripten puede, por ejemplo, simplificar expresiones numéricas mediante una evaluación directa con eval (). El compilador también representa ciertas estructuras constantes del código de máquina LLVM internamente como un objeto JavaScript.

El trabajo de compilación de Emscriptens se puede ver en fases ideales-típicas. Primero, el código LLVM se transfiere a la representación interna del código por medio de emscripts. Esto se hace a través del llamado intertyper.

A continuación, el analizador examina esta representación interna. Esto genera información y datos que luego se pueden utilizar para la optimización. En la última fase, el jsifier convierte la representación de datos internos al código JavaScript deseado.

Aplicaciones y herramientas

Emscripting se puede utilizar en Microsoft Windows, así como en Max OS X y Linux. Los requisitos para el uso completo del compilador son los componentes LLVM, Python y Node.js. Hay otras herramientas que facilitan su uso a los usuarios. Esto debería facilitar la traducción de proyectos existentes (por ejemplo, en C y C ++) a JavaScript con Emscripts.

Esto incluye emcc, una especie de reemplazo del compilador gcc. Esto tiene convenciones de llamada en gran parte idénticas. En aplicaciones simples, los usuarios pueden simplemente usar emcc en lugar del compilador gcc para crear proyectos. Emcc se encarga de la generación del código de bits LLVM, utilizando las interfaces disponibles en Emscripts.

No te vayas sin leer: ¿Qué es LOLBAS?

La salida puede tener lugar en código JavaScript o en un JavaScript incrustado en un documento HTML. Emscripten también ofrece herramientas para proyectos que se desarrollan usando ./configure o Makefile. Las herramientas se hacen cargo de las llamadas de estas herramientas y pueden configurarlas.

Deja un comentario