El lenguaje extensible e integrable ( EEL ) es un lenguaje de programación y scripts que está desarrollando David Olofson. EEL está pensado para scripts en sistemas en tiempo real con frecuencias de ciclo en el rango de kHz, como sintetizadores musicales y sistemas de control industrial, pero también aspira a ser utilizable como un lenguaje de programación de propósito general independiente de la plataforma .
En cuanto al diseño del lenguaje, la idea general es lograr un equilibrio práctico entre potencia, facilidad de uso y seguridad. La intención es ayudar a evitar muchos errores típicos de programación sin recurrir a una sintaxis demasiado verbosa o a una funcionalidad restringida.
La primera encarnación de EEL fue un analizador simple para definiciones de audio estructuradas, utilizado en el motor de sonido del juego gratuito y de código abierto Kobo Deluxe, un puerto SDL del juego XKobo para X11 . Se trataba de un intérprete simple con un control de flujo muy limitado y una sintaxis bastante diferente a la de las versiones actuales. Esta rama inicial de EEL se lanzó por primera vez en 2002 y todavía se utiliza en Kobo Deluxe a partir de la versión 0.5.1.
En diciembre de 2003, EEL se dividió en un proyecto independiente y se sometió a una importante reescritura para poder utilizarse en scripts en tiempo real en una aplicación de reología integrada . En ese momento se realizó el cambio de intérprete a compilador / máquina virtual y se materializó el lenguaje de programación EEL. El primer lanzamiento oficial se realizó en enero de 2005. Desde entonces, EEL ha evolucionado lentamente, impulsado principalmente por las necesidades personales y profesionales de su autor.
El lenguaje no está diseñado estrictamente para ningún paradigma de programación en particular , sino que admite la programación orientada a objetos , o más específicamente, la programación basada en prototipos , a través de un conjunto mínimo de características de sintaxis . También se admiten otros estilos y paradigmas de programación, como la programación funcional , modular y metaprogramación .
Como resultado de evitar punteros y proporcionar tipos de datos estructurados completamente administrados, EEL es "seguro" en el sentido de que los programas EEL no deberían poder bloquear la máquina virtual o la aplicación host.
El clásico programa hola mundo se puede escribir de la siguiente manera:
función de exportación main<args> { print("¡Hola, mundo!\n"); devuelve 0; }
El siguiente es un ejemplo de una función recursiva :
función de exportación main<args> { print("Prueba de recursión 1:\n"); procedimiento recurse(arg) { imprimir("arg = ", arg, "\n"); Si arg recurse(arg - 1); } recurse(10); print("Prueba de recursión 2; Recursión mutua:\n"); procedimiento mrecurse2(arg); procedimiento mrecurse1(arg) { imprimir("arg = ", arg, "\n"); Si arg mrecurse2(arg); } procedimiento mrecurse2(arg) { mrecurse1(arg - 1); } ; mrecurse1(10); print("Prueba de recursión 2; Recursión mutua con referencia de función:\n"); procedimiento mrrecurse1(arg, fn) { imprimir("arg = ", arg, "\n"); Si arg función(arg, función); } local mrr2 = procedimiento (arg, fn) { mrrecurse1(arg - 1, función); } ; mrrecurse1(10, mrr2); print(Pruebas de recursión realizadas.\n); devuelve 0; }
El código fuente de EEL se compila en código de bytes para una máquina virtual personalizada , que tiene un conjunto de instrucciones de nivel relativamente alto diseñado para minimizar el conteo de instrucciones y, por lo tanto, la sobrecarga. La máquina virtual EEL se basa en registros y no tiene pila, es decir, no depende de la pila de llamadas de C para administrar los contextos de la máquina virtual.
El método básico de gestión de memoria es el conteo de referencias, que permite la gestión automática de la memoria con una sincronización determinista, sin la necesidad de una recolección de basura simultánea.
La VM utiliza "listas de limbo" para realizar un seguimiento de los objetos intermedios creados dentro de expresiones y similares, lo que simplifica enormemente el manejo de excepciones y elimina la necesidad de contar referencias activamente en cada operación.
Kobo Deluxe es una aplicación de EEL. [1]