Evocation, un Forth que se compila a sí mismo y se audita byte a byte
El dialecto de Forth de Irenes se distribuye como un volcado hexadecimal comentado en vez de un binario, y por ahora solo apunta a amd64
Evocation es un dialecto de Forth con dos rasgos poco habituales: se compila a sí mismo y no se distribuye en binario. Lo que hay para descargar es un volcado hexadecimal comentado que explica el origen y el propósito de cada byte, y que se convierte en ejecutable con un programa mínimo que hace de raíz de confianza.
El proyecto lo mantiene Irenes y por ahora solo apunta a amd64. Entre los Forth compilados no es lo normal: la mayoría se quedan en 32 bits. El compilador no necesita nada externo para construirse, porque la única dependencia es una copia de sí mismo. Y sus autores dejan claro que no lo han escrito con ayuda de redes neuronales diferenciales "en ninguna capacidad", ni piensan hacerlo.
Un compilador que enseña su trabajo
Además de compilarse a sí mismo, Evocation se autoarranca. Tiene un modo "show your work" que, en lugar de un binario corriente, escupe un volcado hexadecimal con anotaciones: de dónde viene cada byte de la salida y cómo comprobar que es correcto. Ese volcado se puede meter en el control de versiones y luego pasar a ejecutable mediante un proceso que también es fácil de auditar.
La idea viene de los desarrolladores de mescc y guix: la diferencia entre el código fuente y un binario son los comentarios. Lo que el proyecto presenta como nuevo es que sea el primer compilador capaz de generar ese volcado de sí mismo desde una implementación en un lenguaje de alto nivel, y no desde ensamblador. De ahí el término "self-bootstrapping". Quien no conozca el artículo clásico de Ken Thompson sobre el tema encontrará ahí la motivación de todo esto.
La primera compilación no necesita un Evocation previo. Se hace así:
$ ./hex < evoke.hex > evoke
$ chmod 755 evoke
El programa hex es el único binario del repositorio y está en git. Se puede inspeccionar por cualquier medio y comparar con hex.hex, que documenta cada byte. Auditar evoke.hex es bastante más trabajo, pero es posible.
Qué se puede hacer hoy
Una vez construido, el intérprete acepta código interactivo. Un ejemplo del propio README:
." Hi, Irenes!" 6 7 * . newline bye
Pila, notación polaca inversa y palabras como list-dictionary o describe para explorar el diccionario. Las cadenas se escriben con s" ...".
La documentación sigue en obras y tiene secciones marcadas como pendientes, así que no es todavía una introducción redonda. El interés aquí no está en Forth como lenguaje, sino en la cadena de confianza: un compilador que se puede reconstruir y auditar byte a byte sin depender de un binario opaco es justo el problema que arrastra buena parte del software que se despliega hoy. Que sea un proyecto de una sola persona y una sola arquitectura no lo hace menos pertinente.
