Crimson
Captura de metaltoy

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 if y else que devuelven valor.
  • match sobre valores y sobre rangos, when para 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

  • say imprime 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.

← todos los proyectos