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

La estructura del compilador de tres etapas

1980
Programador que trabaja 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
- Informática

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
  • desarrollo de nuevos lenguajes de programación simplemente creando un nuevo frontend
  • herramientas de análisis estático que operan en la representación intermedia

Patentes:

NA

Ideas para posibles innovaciones

Debido al bloqueo del tráfico generado por bots, que actualmente supera los 40.000 al día, este contenido está reservado para los miembros de la comunidad.
> Iniciar sesión < o > Registrarse < (100% gratis) para acceder a esto, al igual que a todo el demás contenido y herramientas restringidos.

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
1986-01-01
1990
1990
1973
1980
1980
1980
1982-07-01
1988-06-01
1990
1993

(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)

Invención, innovación y principios técnicos relacionados.

Las imágenes a tamaño completo y las descargas sólo están disponibles, 100% gratis, para los miembros registrados.

> Acceso <