Product Design, Manufacturing & Innovation Resources
Hogar » La estructura del compilador de tres etapas

La estructura del compilador de tres etapas

1980
Programador trabajando en la estructura de un compilador de tres etapas en una oficina de desarrollo de software.

(Imagen generada únicamente con fines ilustrativos)

Un compilador moderno suele estructurarse en tres etapas: front-end, middle-end y back-end. El front-end analiza el código fuente, verifica su corrección y crea una representación intermedia (RI). El middle-end optimiza esta RI. A continuación, el back-end traduce la RI optimizada a código máquina objetivo para una arquitectura de CPU específica.

Este diseño modular de tres etapas proporciona una separación crucial de preocupaciones. El frontend depende del lenguaje, pero es independiente de la máquina; comprende la sintaxis y la semántica de un lenguaje específico como C++ o Rust. Su salida, la Representación Intermedia (IR), es una estructura de datos abstracta e independiente de la máquina, como un Árbol de Sintaxis Abstracta (AST) o un Código de Tres Direcciones. Esto desacopla el lenguaje fuente de la máquina de destino.

El extremo intermedio es en gran medida independiente del lenguaje y de la máquina. Toma el IR y aplica una serie de pasos de optimización, como la eliminación de código muerto, el plegado constante y las optimizaciones de bucle. Al operar sobre el IR genérico, estas optimizaciones complejas pueden escribirse una sola vez y aplicarse a cualquier lenguaje compilable en ese IR.

Finalmente, el backend depende de la máquina, pero es independiente del lenguaje. Toma el IR optimizado y realiza la selección de instrucciones, la asignación de registros y la programación de instrucciones para generar código máquina eficiente para una arquitectura de destino específica, como x86-64 o ARM. Esta estructura permite construir compiladores compatibles con M lenguajes y N destinos mediante la creación de M front-ends y N back-ends, en lugar de M*N compiladores individuales. Este principio se ejemplifica en infraestructuras de compiladores modernas como GCC y LLVM.

UNESCO Nomenclature: 1203
Ciencias de la computación

Tipo

Sistema abstracto

Ruptura

Fundacional

Uso

Uso generalizado

Precursores

  • primeros diseños de compiladores monolíticos
  • concepto de abstracción en ingeniería de software
  • desarrollo de lenguajes intermedios en sistemas tempranos
  • Investigación sobre software portátil (por ejemplo, el sistema de código p)

Aplicaciones

  • compiladores reorientables (por ejemplo, GCC, llvm)
  • compilación cruzada para diferentes plataformas de hardware
  • marcos de optimización independientes del lenguaje
  • development of new programming languages by only creating a new front end
  • herramientas de análisis estático que operan en la representación intermedia

Patentes:

NA

Ideas para posibles innovaciones

  • Un estándar IR universal para la interoperabilidad entre todos los compiladores
  • Extremos medios impulsados ​​por IA que aprenden secuencias de optimización óptimas
  • Back-ends conectables para hardware experimental como computadoras ópticas o de ADN
  • Front-ends que pueden fusionar múltiples lenguajes de programación dentro de un único archivo fuente
  • Compiladores colaborativos en tiempo real con IR compartido para desarrollo en equipo
  • compiladores que generan descripciones de hardware (por ejemplo, vhdl) y código de máquina simultáneamente
  • a ‘compiler marketplace’ for third-party optimization plugins
  • compiladores autohospedados que pueden recompilar sus propios front/middle/back ends sobre la marcha
  • Depuradores de nivel ir que son independientes del lenguaje y la arquitectura
  • compiladores que utilizan el ir para predecir vulnerabilidades de rendimiento y seguridad antes de la generación del código
Relacionado con: diseño de compiladores, front-end, middle-end, back-end, representación intermedia, IR, optimización, generación de código, modularidad, GCC, llvm.

Contexto histórico

La estructura del compilador de tres etapas

1975-06-01
1980
1980
1980
1982-07-01
1988-06-01
1990
1973
1980
1980
1980
1980
1986-01-01
1990
1990

(Si la fecha es desconocida o no es relevante, por ejemplo "mecánica de fluidos", se proporciona una estimación redondeada de su aparición notable)

décimo año aniversario

Las imágenes en tamaño completo y las descargas solo están disponibles, de forma totalmente gratuita, para los miembros registrados.

> Acceso <