2010-01-05 7 views
23

Estoy iniciando un compilador de lenguaje de programación encima de LLVM. Actualmente estoy casi hecho escribiendo un compilador para un subconjunto de C que es auto compilado. Cuando termine con eso, arrancaré mi lenguaje de C, manteniendo la autocompilación sobre la marcha.Bootstrapping de un lenguaje en LLVM

Dado que el compilador es autocompilar, las características de C que uso tendré que implementar. Por lo tanto, es un equilibrio constante: si uso demasiadas funciones tendré que implementar más de lo que quiero, pero si no implemento suficientes funciones, será difícil escribir código.

Una de estas funciones son los enlaces LLVM. Generar representación intermedia de LLVM sin los enlaces de LLVM C es difícil. Sin embargo, si nosotros los enlaces LLVM, tengo que implementarlos de nuevo cuando me desvío de C.

Tengo algunas dificultades aquí, entonces busco soluciones alternativas. ¿Algunas ideas?

+0

¿Qué está escribiendo su compilador en? ¿DO? ¿Estás utilizando LLVM para la compilación de código de máquina? –

+0

Mi compilador está escrito en el subconjunto de C que compila. Lo siento, no lo he explicado bien. Mi plan actual es escribir una representación intermedia de LLVM en un archivo y luego usar LLVM para compilarla, pero eso es complicado, y estoy buscando una solución más limpia. – Imagist

+0

LLVM es una gran opción para el back-end, por cierto. He tenido mucha suerte con eso. –

Respuesta

10

Puede usar los enlaces LLVM C, pero eso requiere que su lenguaje entienda lo suficiente como para hacerlo.

Otra alternativa es escribir el lenguaje ensamblador LLVM (un archivo de texto) y usar llvm-as para convertirlo en bitcode.


Editar:

releí usted pregunta, creo que ya entiende la llvm -como vs. material de unión.

Es probable que su idioma desee enlazarse a C de todas formas para las bibliotecas de soporte, etc. Utilice los enlaces C por ahora y escriba sus propios enlaces cuando vaya más lejos.

+0

No había considerado que los enlaces C pudieran ser una solución * temporal *. Buena idea. – Imagist

1

En algún momento, es probable que desee proporcionar una API para envolver las bibliotecas C como módulos de extensión. LLVM ya puede soportar esto (sé que el loro vm lo hace). ¿Por qué no usar el sistema de extensión que use para envolver la propia API de LLVM? Es posible que ya lo apoyen también. :)

Cuestiones relacionadas