Yo personalmente recomendaría OCaml. Haskell es muy agradable, pero como es puro, algunas transformaciones serán más difíciles de escribir. Por lo general, la función “gensym” para crear nombres nuevos (que a menudo se requieren en un compilador) será más difícil de codificar debido a su naturaleza con estado. Sin embargo, conozco a muchos haskellers que no estarían de acuerdo con esto, podría ser solo una cuestión de gustos.
La forma en que me gusta escribir un compilador es la siguiente: principalmente puramente funcional, con algunos efectos secundarios muy bien aislados. OCaml es una gran combinación para eso.
Pero, en general, creo que cualquier lenguaje de programación es bueno siempre que tenga tipos de datos algebric y coincidencia de patrones. Necesitará muchas transformaciones en los árboles, la coincidencia de patrones hace que el código sea más legible. Sin embargo, esto es solo una opinión personal y no un hecho. Lo que recomendaría a cualquiera que quiera usar C / C ++ es probarlo primero en un pequeño subconjunto. Defina un lenguaje pequeño con dichas expresiones aritméticas e intente escribir una transformación simple (ejemplo: propagación constante). Si no encuentra el limpiador de la versión ML, solo significa que nuestros cerebros están conectados de manera diferente 🙂
¿Cuál es el mejor lenguaje de programación para usar al escribir un compilador, por ejemplo, ML, Lisp, Java, C ++, Python, etc.
Related Content
¿Con qué frecuencia se utilizan los algoritmos en la ingeniería de software?
¿Cuáles son los mejores trabajos académicos en informática? ¿Por qué?
¿Cuáles son las principales áreas de investigación en el campo de los superconductores actualmente?
Escribimos un compilador en Haskell, aquí hay un capítulo del libro al respecto. Si bien el tema de la pureza te obliga a ser más honesto en algunos lugares, la honestidad finalmente vale la pena: GHC 7.8 admite la compilación paralela. La pureza es excelente para comprender el código que escribió hace mucho tiempo y que ha olvidado desde entonces: puede ver desde el tipo exactamente cuáles son las entradas y salidas de una función. Esto es genial para refactorizar, ya que es un tipeo fuerte (como argumentamos en ese artículo).
ML y derivados (OCaml, Haskell, etc.) tienen una larga tradición de implementación e investigación de compiladores, y las optimizaciones más comunes serán muy fáciles de implementar (o tendrán implementaciones fácilmente disponibles) en estos idiomas. Sé que Haskell tiene alex, happy y parsec, que son bibliotecas fantásticas.
Lisps está bien para escribir compiladores. Pueden ser buenos para esbozar cosas, pero creo que un sistema de tipos realmente te ayuda a expresar invariantes, que son una de las cosas más importantes para acertar en un compilador, por lo que un lisp te dejará mucho más trabajo.
C ++ es la opción obvia si desea utilizar LLVM (que parece ser una excelente opción a futuro, ya que obtiene muchas optimizaciones de forma gratuita), o el venerable combo flex / bison. C tiene el análogo lex / yacc. Existen innumerables recursos para ambas combinaciones, y para un escritor compilador por primera vez que no conoce ningún lenguaje funcional fuertemente tipado, una de estas combinaciones probablemente sería la más fácil. Editar: LLVM también tiene enlaces para otros idiomas, incluido OCaml, lo que hace de OCaml una opción fantástica.
No conozco a nadie que haya escrito un compilador de la industria en python o ruby o perl (excepto PyPy, que es un gran proyecto, por cierto, y vale la pena verlo si está interesado en ver una optimización de vanguardia investigación en práctica activa). Tengo un par de implementaciones desechables de lisp en python y ruby acumulando polvo en la parte posterior de un disco duro en alguna parte, pero no creo que esa clase de idiomas realmente se ajuste a la ley. Editar: Rubinus es un intérprete escrito en Ruby, y lo está haciendo muy bien.
Si fuera yo, usaría Haskell o LLVM con C ++ .
More Interesting
¿Qué productos han salido de Microsoft Research?
¿Cuáles son los algoritmos más importantes que todo informático debe dominar?
¿Vale la pena hacer un doctorado en seguridad de redes en Alemania?
¿Cuáles son las aplicaciones de las estadísticas en el campo de la informática?
¿Qué es el algoritmo de relleno inferior izquierdo (BLF)?
¿Cómo empiezo a aprender informática distribuida?
¿Qué pasa si Google toma el trabajo de investigación que estoy haciendo? ¿Qué tengo que hacer?
¿Cuáles son los temas de actualidad en los sistemas educativos?
¿Cuáles son los temas de investigación más interesantes en ciencias?
¿Cuál tiene un futuro más prometedor: desarrollo web o de software?