Lamina - backend de compilador implementado desde cero sin dependencias
(github.com/SkuldNorniern)Post del blog Releasing Lamina
Lamina es un proyecto de backend de compilador que recibe código de Intermediate Representation (IR code) como entrada y genera código de máquina/binarios.
Lo inicié con base en mis estudios y proyectos de lenguajes/compiladores de los últimos 4~5 años, y espero que pueda servir como una referencia simple e intuitiva para quienes estén interesados en compiladores.
Plataformas compatibles actualmente
- macOS (aarch64)
- Linux (x86_64)
- WebAssembly (wasm32/64)
Plataformas con soporte planeado
- Windows (x86_64)
- macOS (Intel)
- Linux (aarch64)
- Risc-V
En el caso de Windows aarch64, como el autor no tiene equipo para probarlo, se omitió por tener baja prioridad.
Estado actual
Actualmente no hay pases de optimización del compilador, por lo que el rendimiento es apenas un poco más lento que C#.
En una próxima actualización se implementará la capa Machine IR y, junto con eso, está prevista la incorporación de pases de optimización.
Además, antes del lanzamiento 0.1, está previsto eliminar y reescribir la mayor parte del contenido generado con IA en las partes de Testcode y codegen.
Ejemplo de frontend de compilador
Repo de Brainfuck-Lamina - compilador simple de Brainfuck
Funciones planeadas para desarrollo futuro
- Soporte para generación de código GPU (para usarlo después como backend de una biblioteca de ML implementada desde cero)
- Soporte para compilación JIT
- Provisión de un conjunto de herramientas como depurador, etc.
- Provisión de ensamblador y linker implementados desde cero (se mantendrá el soporte para utilidades existentes)
2 comentarios
Impresionante, de verdad.
Todavía es un proyecto al que le falta mucho,
¡pero gracias por verlo con buenos ojos!
Espero seguir mejorándolo para que pueda convertirse en un buen material para quienes estén estudiando sobre compiladores.