
La criba de Eratóstenes en metaltoy, y lo que imprime al ejecutarse.
metaltoy
Un lenguaje que no compila a un archivo. Genera ARM64 en memoria y salta a ejecutarlo.
- Estado
- Compila y se compila a sí mismo
- Desarrollo
- 190 h
Un lenguaje que toma un programa de texto, lo compila a ARM64 nativo en memoria y salta a él. No hay artefacto intermedio ni paso de compilar y después correr.
Es hijo de Punk y le heredó el aire de familia, los comentarios con dos punto y coma y la orientación a expresión. De ahí en adelante divergen, y siguen divergiendo. Un programa de Punk no compila aquí.
Funcionalidades
El lenguaje
- Expresiones, variables, comparaciones, y
ifyelseque devuelven valor. matchsobre valores y sobre rangos,whenpara condiciones independientes, y bucles.- Funciones con recursión, en bloque o en una línea.
- Enteros, punto flotante con tipos inferidos, booleanos, y tipos opcionales por sigilo.
- Arreglos en el montón con índice y longitud, estructuras con campos, enumeraciones.
- Cadenas en el montón que se concatenan, se comparan por contenido y se cortan, insertan, reemplazan y parten.
- Matemática por libm, y aleatorio.
La entrada y la salida
sayimprime números y texto con formato, y cada hueco se resuelve al compilar por el tipo de su argumento, así que los tres conviven en la misma línea.- Lee un token de la entrada estándar, y lo convierte a número.
- Archivos de texto completos, o por streaming desde el disco, línea a línea o carácter a carácter.
El compilador
- Lexer, parser, inferencia y generación de código, todos propios. Nada de esto pasa por C.
- Está escrito en metaltoy y se compila a sí mismo hasta punto fijo. Se emite como ejecutable firmado, y ese binario, ya sin Python en el camino, compila su propia fuente y da los mismos bytes.
El laboratorio
- Los experimentos que lo hicieron posible quedaron guardados. Ensamblador escrito a mano, el cargador que salta al código, y un Mach-O construido byte a byte.