¿Hay compiladores en diferentes idiomas?¿Cuál es el lenguaje de los compiladores? Están escritos con diferentes idiomas?
Respuesta
A compiler probablemente podría estar escrito en cualquier idioma. En su forma más básica, un compilador simplemente convierte el código de un idioma a otro. En el sentido de que la mayoría de las personas usa el término "compilador" hoy, se refieren a algo que toma el código fuente de algún lenguaje de nivel superior y lo convierte en ensamblado o en un lenguaje intermedio de bajo nivel (CIL).
Los compiladores a menudo se escriben en el lenguaje de dicho compilador. Por ejemplo, un compilador de C normalmente se escribe en C.
... lo que hace surgir la pregunta "¿cómo se compila la primera vez?". A lo que he escuchado dos respuestas: o bien está compilada a mano (por miedo que suene), o una trampa y utiliza un compilador existente para ese idioma.
Como @jball ha comentado, lea el artículo de Wikipedia en Bootstrapping para obtener detalles completos.
A veces sí, a veces no. Es costumbre intentar implementar el compilador de un nuevo idioma en ese idioma lo antes posible, en parte para demostrar que puede hacer un "trabajo pesado".
Pero, por supuesto, primero necesita un compilador o al menos un intérprete para ejecutar ese compilador y compilarlo, por lo que primero debe implementarlo en otro idioma.
Y para muchos idiomas especializados, escribir el compilador en el idioma en sí no es práctico porque el lenguaje no es para cosas como compiladores.
Aquí hay un par de ejemplos:
- el compilador Rubinius Rubí está escrito en Ruby,
- el compilador YARV Rubí está escrito en C,
- el compilador XRuby Rubí está escrito en Java,
- el compilador Ruby.NET Rubí está escrito en C#,
- el compilador MacRuby Rubí está escrito en Objective-C,
- la IronJS ECMA Guión compilador está escrito en C#,
- la MS Visual C# compilador está escrito en C#,
- la MS Visual C# compilador está escrito en C++, que está siendo reescrito en C#,
- el Visual Basic.NET compilador MS es escrito en C++, actualmente está reescrito en Visual Basic.NET,
- el compilador GCC C está escrito en C,
- el compilador Clang C está escrito en C++,
- compiladores más Pascal están escritos en Pascal,
- mayoría de los compiladores Oberon se escriben en Oberon,
- tanto el 6 g/8g y el gccgo Ir compiladores están escritos en C
en general, los compiladores se pueden escribir en cualquier lenguaje que en realidad es lo suficientemente potente como para escribir un compilador. Esto O Bviously incluye cualquier lenguaje completo de Turing. Pero incluso podría ser posible escribir un compilador en un lenguaje que no sea de Turing completo. (Por ejemplo, no veo ninguna razón obvia por la cual un compilador no podría ser una función total, pero las funciones totales obviamente no son completas).
En la práctica, sin embargo, los compiladores están escritos en su mayoría en tres clases de idiomas con diferentes pros y contras:
- el mismo idioma que implementa el compilador (pros: más grande de la comunidad, porque todo el mundo que conoce el lenguaje puede trabajar en el compilador, de lo contrario tendrían que conocer las dos lenguas; contras : el problema de arranque)
- lenguaje de programación primario de sistemas de bajo nivel de la plataforma en la que se supone que se ejecuta el compilador, por ejemplo C en Unix, Java en JVM, C# en la CLI (pros: muy rápido; contra: muchas veces esos lenguajes no son muy buenos para escribir compiladores, tampoco creo que los beneficios de rendimiento sean reales)
- un lenguaje que es muy bueno para escribir compiladores como ML, Haskell, Lisp, Scheme (pros: esos compiladores tienden a ser muy fáciles de entender y hackear; contras: aún necesita conocer ambos idiomas)
- caso especial de los anteriores: un lenguaje específico de dominio para escribir compiladores, como OMeta o para el análisis frontend ANTLR, YACC (pros: igual que el anterior pero aún más; contras: igual que el anterior)
Todos estos son esencialmente intercambios: escribir el compilador en el mismo idioma lo hace más fácil de entender, porque no tiene que aprender otro idioma. También puede hacer que sea más difícil de entender porque el lenguaje no es realmente muy bueno para escribir compiladores. (Imagine, por ejemplo, escribir un compilador de SQL en SQL). Incluso podría ser imposible escribir un compilador, por ejemplo (para una definición bastante flexible de "lenguaje" y "compilador") es imposible escribir un CSS compilador en CSS o un compilador HTML en HTML.
En el lado opuesto: escribir el compilador en un lenguaje especializado de compilación probablemente lo hace más fácil de entender, pero al mismo tiempo requiere que aprenda un nuevo idioma.
Tenga en cuenta que las tres clases no son disjuntas: un compilador puede pertenecer a más de una clase. Por ejemplo, un compilador para un lenguaje de compilación especializado en compiladores, escrito en sí mismo, pertenece tanto a la categoría 1 (escrita en sí misma) como a la 3 (escrita en un lenguaje bueno para escribir compiladores).
En algunos casos, en realidad puede golpear el punto óptimo. Por ejemplo, F # es un lenguaje nativo con velocidad nativa en la CLI, y es muy bueno para escribir compiladores. Entonces, escribir el compilador F # en F # le da # 1 (escribiendo en sí mismo), # 2 (escribiendo en un idioma nativo, rápido) y # 3 (escribiendo en un lenguaje que es bueno para escribir compiladores).Lo mismo aplica a Scala.
- 1. ¿Cuál es el mejor lenguaje para el modelado de física?
- 2. strtotime ¿Con diferentes idiomas?
- 3. ¿En qué idioma están escritos el compilador Java y JVM?
- 4. ¿Cuál es el mejor lenguaje de programación para escribir analizadores y compiladores?
- 5. ¿Los preprocesadores están obsoletos en los idiomas modernos?
- 6. ¿Están todos los scripts escritos en lenguajes de script?
- 7. ¿Se han traducido los compiladores de Java para diferentes configuraciones regionales?
- 8. Usando diferentes idiomas en un proyecto
- 9. Idiomas con dominio específico? ¿Cuál usas?
- 10. Imprimir Época de Época en Diferentes Idiomas
- 11. ¿Cuáles son los diferentes conceptos de lenguaje de programación y qué idiomas los muestran de forma pura?
- 12. ¿Cuál es el estado actual de apoyo Prueba de la unidad en el lenguaje R
- 13. Mezclar bibliotecas de diferentes compiladores de C++
- 14. ¿Están listos los idiomas de "Hierro" para el horario de máxima audiencia?
- 15. ¿Los compiladores de lenguaje de programación se traducen primero al ensamblaje o directamente al código de máquina?
- 16. ¿Por qué los compiladores no se traducen en idiomas más simples?
- 17. ¿Cuál es el mejor lenguaje de script para Unity3D
- 18. ¿Cuál es el estado del lenguaje Javascript?
- 19. ¿Cuál es el estado del soporte de C99 en los principales compiladores/cadenas de herramientas?
- 20. ¿Cuál es el trato con los delegados?
- 21. ¿Cuál es el estado de los idiomas de derecha a izquierda en Android?
- 22. ¿Cuál es el mejor lenguaje para el reconocimiento de huella?
- 23. Funciones virtuales en constructores, ¿por qué los idiomas son diferentes?
- 24. ¿Cuál es el propósito de la distinción entre mayúsculas y minúsculas en los idiomas?
- 25. ¿cuál es el mejor lenguaje de programación para el selenio?
- 26. ¿Cuál es el equivalente de Python's Fabric en otros idiomas?
- 27. Idiomas interpretados: aprovechar el lenguaje compilado detrás del intérprete
- 28. ¿Cuál es la diferencia entre los compiladores Borland, GCC y MinGW?
- 29. ¿Cuáles son tus esqueletos favoritos para los diferentes idiomas?
- 30. Tamaño de las enumeraciones en bytes de compiladores diferentes
No siempre: http://en.wikipedia.org/wiki/Bootstrapping_(compilers) – jball
posible duplicado de http://stackoverflow.com/questions/193560/implementing-a-compiler-in-itself –
posible duplicado de [Cuando alguien escribe un nuevo lenguaje de programación, ¿en qué lo escriben?] (http://stackoverflow.com/questions/1629513/when-someone-writes-a-new-programming-language-what-do-they -write-it-in) – nawfal