Pregunta

Estoy escribiendo un compilador Tigre en Fa # y tengo finalmente llegado al punto en que ya no puedo posponer la decisión de una arquitectura objetivo.

Este es mi primer compilador, pero definitivamente no será la última. Entonces ... ¿qué sería un buen arquitectura objetivo para un primer compilador?

he pensado sobre la orientación de la CIL (NET), pero el código intermedio en el libro parece más adecuado para una máquina registradora.

También me gustaría saber dónde ir cuando he terminado este compilador. Debería tratar focalización otra arquitectura? Debería centrarse en otra parte del compilador? ¿Por qué?

¿Fue útil?

Solución

Por pura satisfacción personal, no hay sustituto para focalización del hardware y que tiene y el funcionamiento de su código compilado en el metal desnudo . Sin embargo, existen alternativas razonables:

  • El MIPS es una instrucción muy limpio fijan y simuladores como SPIM son fácilmente disponibles. Su compilador será simple y sus experiencias de depuración relativamente feliz.

  • En función de qué está escribiendo un compilador, puede ser feliz apuntando a un compilador de lenguaje-meta de bajo nivel como LLVM o C-- . Pero ¿por qué debería alguien tener toda la diversión de escribir su parte de atrás?

  • Si tiene Intel o AMD de hardware, le recomiendo el uso de la instrucción de 64 bits conjunto con extensiones SSE. Usted tendrá el doble de los registros con los que jugar, y su código de punto flotante (si lo hay) será cuerdo.

Otros consejos

Si está utilizando F # para escribir el compilador, que emite CIL ciertamente suena como una buena decisión, ya que podrás utilizar todas las capacidades incorporadas de CodeDOM etc.

Si lo prefiere puede diseñar su propio formato de salida y escribir una máquina virtual que se ejecuta dentro de .NET, si es que haría más fácil la salida (en virtud de ser una arquitectura más adecuada). Puede ser que sea más fácil de depurar - aunque, por supuesto que sí significa escribir la máquina virtual, así:)

¿Ha pensado en la orientación de montaje x86? Hice un tigre compilador mismo hace unos años, y el emisor de montaje, aunque difícil de escribir, era una de las cosas más gratificantes en todo el proyecto. Escribir su propia pequeña máquina virtual en C también es una idea buena (si no mejor).

Orientación VM existente es pragmática, si va a crear un lenguaje de producción, pero elimina muchas posibilidades de aprendizaje del ejercicio.

Si yo fuera usted, me gustaría echar un vistazo más de cerca a las diferentes técnicas de optimización más adelante en el proyecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top