Un nuevo lenguaje de bajo nivel, llamado Terra, ha sido diseñado para trabajar con Lua, para generar código para hacer computación de alto desempeño. Lua es un lenguaje de scripts que puede hacerse embebido y combina una sintaxis de procedimientos con construcciones de descripciones de datos, basados en arreglos asociativos y semánticas extensibles.
Terra es un compilador simple, de tipos estáticos, con manejo de memoria manual y en ese sentido es similar a C, pero ha sido diseñado para interoperar con Lua. Las funciones de Terra son valores de primera clase en Lua, usando la palabra clave terra. Cuando es necesario, se usa el compilador JIT (Just In Time) a código de máquina.
Los detalles sobre Terra han sido publicados por Zach de Vito y un equipo de las Universidades de Stanford y Purdue. El equipo dice que usando Lua como un anfitrión para un nuevo lenguaje de bajo nivel, han desarrollado un sistema lo cual se traduce en que puedes escribir código de alto nivel en Lua y código de alto desempeño en Terra.
El equipo sugiere que Terra puede usarse como un lenguaje de scripts con extensiones de alto desempeño, como por ejemplo, un compilador JIT embebido para construir lenguajes o bien, para usarse como un lenguaje de bajo nivel. Cuando se usa como un lenguaje de scripts, la ventaja de la abstracción de bajo nivel da un control predecible de desempeño cuando esto es lo que se necesita.
La descripción dice: “Los programas de Terra pueden usar el mismo backend que usa Apple para sus compiladores de C. Esto significa que el código de Terra se desempeña de manera similar al código de C equivalente. Por ejemplo, nuestra traducción de los programas nbody y fannhakunen desde el lenguaje de programación shootout1 se desempeñan dentro del 5% de la velocidad de sus equivalentes en C compilados con Clang”.
Se pueden pues compilar lenguajes de dominios específicos, escritos en Lua, a código de alto desempeño en Terra y como éste último está construido en el ecosistema de Lua, es fácil embeber los programas Terra-Lua en otros programas como bibliotecas, por lo que se puede añadir un compilador JIT en el software existente. Y aunque todo esto parezca una argumentación que pueden seguir unos pocos, es evidente que esto da una serie de ventajas por la versatilidad que ofrece Lua y desde luego, Terra.
Terra fue diseñado para correr independientemente de Lua, por lo que puede usarse como un lenguaje de bajo nivel para los casos de que el software final no requiera de Lua. Se pone el código de Terra en un archivo “.o” o en un ejecutable. El equipo dice que puede pensarse como un reemplazo del template para C++ o para el preprocesador de C, sólo que con mejor sintaxis.
El equipo de Stanford ha sacado un artículo: “Terra: A Multi-stage Language for High Performance Computing”, en el que describen como Terra y Lua podrían usarse para generar código de alto rendimiento. En el artículo en cuestión, los autores dicen que han implementado sistemas multilenguajes totalmente en Terra.
Si quiere saber más de Terra, y del cómo usarlo para la programación generativa y la compilación de lenguajes, se puede ir al sitio oficial y además, descargar el software de GitHub.
Terra corre en Mac OS X y Linux. Terra usa LLVM 3.2, Clang 3.2 y LuaJIT 2.0.
.
Referencias
Terra
Descargas
Terra: A Multi-stage Language for High Performance Computing (pdf)