La historia del desarrollo de los compiladores cruzados
En la década de 1950, John Backus de IBM dirigió un equipo de investigación para desarrollar el lenguaje FORTRAN y su compilador. Pero debido a que la gente no sabía mucho sobre la teoría de la compilación en ese momento, el trabajo de desarrollo se volvió complicado y arduo. Al mismo tiempo, Noam Chomsky inició sus investigaciones sobre la estructura del lenguaje natural. Su descubrimiento finalmente condujo a un compilador con una estructura inusualmente simple e incluso cierta automatización. Las investigaciones de Chomsky llevaron a la clasificación de las lenguas en función de la facilidad de su gramática y los algoritmos necesarios para identificarlas. Como se la denomina Jerarquía Chomsky, incluye cuatro niveles de gramática: gramática de tipo 0, gramática de tipo 1, gramática de tipo 2 y gramática de tipo 3, cada una de las cuales es un caso especial de la primera. Las gramáticas de tipo 2 (o gramáticas libres de contexto) demostraron ser las más útiles de los lenguajes de programación y hoy representan la forma estándar de construir lenguajes de programación. En las décadas de 1960 y 1970 se llevaron a cabo investigaciones sobre el problema de análisis (algoritmos efectivos para el reconocimiento de gramática libre de contexto) y resolvieron este problema de manera bastante perfecta. Se ha convertido en una parte estándar de la filosofía de compilación.
La automatización finita y la expresión regular están estrechamente relacionadas con la gramática libre de contexto y corresponden a la gramática tipo 3 de Chomsky. La investigación sobre ellos comenzó aproximadamente al mismo tiempo que la investigación de Chomsky y condujo a la forma simbólica de representar palabras en los lenguajes de programación.
Luego se perfeccionó el método para generar código objeto efectivo. Este fue el compilador original y todavía se usa en la actualidad. La gente suele llamarlo Técnica de optimización, pero debido a que en realidad nunca obtiene el código objetivo optimizado, sino que solo mejora su efectividad, en realidad debería llamarse Técnica de mejora del código).
Cuando el problema del análisis se volvió más fácil de entender, la gente dedicó mucho esfuerzo a desarrollar programas para estudiar esta parte de la construcción automática del compilador. Estos programas originalmente se llamaban compiladores-compiladores, pero se llaman más exactamente generadores de analizadores porque manejan automáticamente solo una parte de la compilación. El más famoso de estos programas es Yacc (Yet Another Compiler-compiler), que fue escrito para sistemas Unix por Steve Johnson en 1975. De manera similar, la investigación sobre autómatas de estados finitos también ha desarrollado una herramienta llamada generador de escáner, del cual Lex (desarrollado por Mike Lesk para sistemas Unix al mismo tiempo que Yacc) es el líder.
A finales de los años 1970 y principios de los 1980, una gran cantidad de proyectos se centraron en automatizar la generación de otras partes del compilador, incluida la generación de código. Estos intentos tuvieron poco éxito, presumiblemente porque la operación era demasiado compleja y no se entendía bien.
Los desarrollos recientes en el diseño de compiladores incluyen: Primero, los compiladores incluyen aplicaciones de algoritmos más complejos que se utilizan para inferir o simplificar información en un programa, esto a su vez está relacionado con el desarrollo de lenguajes de programación más complejos combinados; . Entre ellos es típico el algoritmo unificado de verificación de tipos Hindley-Milner para la compilación del lenguaje funcional. En segundo lugar, los compiladores se han convertido cada vez más en parte del entorno de desarrollo interactivo (IDE) basado en ventanas, que incluye editores, enlazadores, depuradores y programas de gestión de proyectos. No existen muchos estándares IDE de este tipo, pero el desarrollo de entornos de ventanas estándar se ha convertido en la dirección.
Por otro lado, a pesar de una gran cantidad de investigaciones en el campo de los principios de compilación, los principios básicos de diseño de compiladores no han cambiado mucho en los últimos 20 años y se están convirtiendo rápidamente en un vínculo central en los cursos de informática.
En la década de 1990, muchos compiladores gratuitos y herramientas de desarrollo de compiladores se desarrollaron como parte del Proyecto GNU u otros proyectos de código abierto. Estas herramientas se pueden utilizar para compilar todos los lenguajes de programación de computadoras. Algunos de estos proyectos se consideran de alta calidad y su código fuente gratuito está disponible para aquellos interesados en la teoría de compilación moderna.
Aproximadamente en 1999, SGI publicó el código fuente de su compilador industrial de optimización paralela Pro64, que más tarde fue utilizado como plataforma de investigación por muchos grupos de investigación de compiladores de todo el mundo y lo denominó Open64. Open64 tiene una buena estructura de diseño y un análisis y optimización integrales, lo que lo convierte en una plataforma ideal para la investigación avanzada sobre compiladores.