Product Design, Manufacturing & Innovation Resources
Casa » La struttura del compilatore a tre stadi

La struttura del compilatore a tre stadi

1980
Programmatore che lavora alla struttura di un compilatore a tre stadi in un ufficio di sviluppo software.

(Immagine generata a solo scopo illustrativo)

Un compilatore moderno è tipicamente strutturato in tre fasi: front-end, middle-end e back-end. Il front-end analizza il codice sorgente, ne verifica la correttezza e crea una rappresentazione intermedia (IR). Il middle-end esegue ottimizzazioni su questa IR. Il back-end traduce quindi la IR ottimizzata in codice macchina di destinazione per una specifica architettura di CPU.

Questo design modulare a tre fasi fornisce una separazione cruciale delle attività. Il front-end è dipendente dal linguaggio ma indipendente dalla macchina; comprende la sintassi e la semantica di un linguaggio specifico come C++ o Rust. Il suo output, la Rappresentazione Intermedia (IR), è una struttura dati astratta e indipendente dalla macchina, come un Albero Sintattico Astratto (AST) o un Codice a Tre Indirizzi. Questo disaccoppia il linguaggio sorgente dalla macchina di destinazione.

La parte intermedia è in gran parte indipendente dal linguaggio e dalla macchina. Prende l'IR e applica una serie di passaggi di ottimizzazione, come l'eliminazione del codice morto, il folding delle costanti e l'ottimizzazione dei loop. Poiché opera sull'IR generico, queste ottimizzazioni complesse possono essere scritte una sola volta e applicate a qualsiasi linguaggio che possa essere compilato per quell'IR.

Infine, il back-end è dipendente dalla macchina ma indipendente dal linguaggio. Prende l'IR ottimizzato ed esegue la selezione delle istruzioni, l'allocazione dei registri e la schedulazione delle istruzioni per generare codice macchina efficiente per una specifica architettura di destinazione, come x86-64 o ARM. Questa struttura consente di realizzare compilatori che supportano M linguaggi e N destinazioni scrivendo M front-end e N back-end, anziché M*N compilatori individuali. Questo principio è esemplificato da moderne infrastrutture di compilazione come GCC e LLVM.

UNESCO Nomenclature: 1203
- Informatica

Tipo

Sistema astratto

Interruzione

Fondamento

Utilizzo

Uso diffuso

Precursori

  • primi progetti di compilatori monolitici
  • concetto di astrazione nell'ingegneria del software
  • sviluppo di lingue intermedie nei primi sistemi
  • ricerca sul software portatile (ad esempio, il sistema p-code)

Applicazioni

  • compilatori ritargettizzabili (ad esempio, GCC, llvm)
  • compilazione incrociata per diverse piattaforme hardware
  • framework di ottimizzazione indipendenti dal linguaggio
  • development of new programming languages by only creating a new front end
  • strumenti di analisi statica che operano sulla rappresentazione intermedia

Brevetti:

NA

Idee e potenziali innovazioni

  • uno standard ir universale per l'interoperabilità tra tutti i compilatori
  • middle-end basati sull'intelligenza artificiale che apprendono sequenze di ottimizzazione ottimali
  • back-end collegabili per hardware sperimentale come computer ottici o DNA
  • front-end in grado di fondere più linguaggi di programmazione all'interno di un singolo file sorgente
  • compilatori collaborativi in ​​tempo reale con ir condiviso per lo sviluppo di team
  • compilatori che generano descrizioni hardware (ad esempio, VHDL) e codice macchina simultaneamente
  • a ‘compiler marketplace’ for third-party optimization plugins
  • compilatori auto-ospitanti che possono ricompilare i propri front/middle/back end al volo
  • debugger di livello ir indipendenti dal linguaggio e dall'architettura
  • compilatori che utilizzano l'ir per prevedere le vulnerabilità di prestazioni e sicurezza prima della generazione del codice
Correlato a: progettazione di compilatori, front-end, middle-end, back-end, rappresentazione intermedia, ir, ottimizzazione, generazione di codice, modularità, GCC, llvm.

Contesto storico

La struttura del compilatore a tre stadi

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

(se la data è sconosciuta o non rilevante, ad esempio "meccanica dei fluidi", viene fornita una stima approssimativa della sua notevole comparsa)

decimo anno anniversario

Le immagini a grandezza naturale e i download sono disponibili, gratuitamente al 100%, solo per gli utenti registrati.

> Login <