BookinglyTech News
Software

Heol, un Lisp de 16 bits que cabe dentro de la máquina virtual Uxn

El proyecto, todavía en desarrollo, añade evaluación de expresiones, cierres y aritmética de precisión simple al pequeño entorno de Uxn, con enlaces a Varvara.

2 min de lecturaLobsters0 vistas

Uxn ya tiene su propio Lisp. Se llama Heol, trabaja con enteros de 16 bits y está diseñado para caber con holgura dentro de esa máquina virtual, con enlaces a Varvara para hablar con el exterior. El proyecto sigue en desarrollo: no hay versión publicada, ni fecha, ni binarios listos para usar, solo el código fuente en un repositorio de SourceHut.

Heol es un Lisp de manual, sin sorpresas. La evaluación reduce expresiones: los átomos devuelven su valor y las listas se interpretan como aplicación de función, con el primer elemento como nombre y el resto como argumentos, que se evalúan antes de entrar. Nada de macros ni de azúcar raro, al menos por ahora.

Las piezas básicas

Los pares se construyen con cons, y car y cdr sacan la cabeza y la cola. Para comparar hay eq?, que devuelve #t o la lista vacía según si los dos átomos son el mismo número o el mismo símbolo. La aritmética usa notación prefija: (* (+ 3 5) 19) da 152.

Las funciones se crean con lambda, y el entorno que rodea a esa expresión queda encerrado en el procedimiento resultante, o sea, hay cierres de verdad. define ata un nombre a una expresión, con lo que (define double (lambda (x) (+ x x))) deja (double 5) en 10. Es el mecanismo clásico para recursión, y con él se escriben bucles sin necesidad de sintaxis dedicada.

Aquí está el detalle que más se aparta de otros Lisp pequeños: no existe una forma explícita de secuenciar operaciones, tipo progn o begin. Heol usa and, que devuelve el último valor no vacío. El autor avisa de la trampa en la documentación: and deja de evaluar en cuanto un argumento devuelve falso, así que encadenar efectos secundarios ahí funciona mientras todas las expresiones devuelvan algo. Un ejemplo de la propia documentación: (and (print 'hello) 42) imprime y aun así devuelve 42.

Con esas piezas ya salen programas completos. Un contador descendente con impresión por medio de print, o el factorial recursivo de siempre. Aparte quedan let* para ligaduras locales, dotimes para repetir, pair?, not, or, y deo, que manda un valor a un puerto de Varvara.

Lo que todavía no se sabe

La documentación es una página de referencia, no un anuncio. No dice qué licencia lleva Heol, ni cuándo piensa salir de la fase de desarrollo, ni si habrá una interfaz más cómoda que escribir el código y compilarlo a Uxntal. El repositorio, eso sí, está ahí y cualquiera puede mirarlo.

A quién le importa esto: a quien ya juega con Uxn y su ecosistema de herramientas mínimas. Meter un Lisp con cierres en una máquina virtual que aspira a correr en cualquier cacharro es una vía para escribir cosas no triviales sin bajar a ensamblador. Queda ver si Heol acaba teniendo licencia clara y alguien lo empaqueta, porque hoy por hoy es un experimento que se lee, no una herramienta que se despliega.