Compilerverifiering är nödvändig för konstruktion av fullt verifierad programvara, men de flesta tidigare arbeten (t.ex. CompCert) har fokuserat på att verifiera hela programkompilatorer. För att stödja separat sammanställning och för att möjliggöra länkning av resultat från olika verifierade kompilatorer, är det viktigt att utveckla en kompositionsbegrepp av kompilator korrekthet som är modulär (bevaras under länkning), transitiv (stöder multi-pass sammanställning) och flexibel (tillämpas på kompilatorer som använder olika mellanspråk eller använder icke-standard programomvandlingar). I detta dokument, som bygger på tidigare arbete av Hur et al., utvecklar vi ett nytt tillvägagångssätt för kompilatorverifiering baserad på parametriska interspråkssimuleringar (PILS). PILS är modulära: de möjliggör kompilatorverifiering på ett sätt som stöder separat sammanställning. PILS är transitiva: vi använder dem för att verifiera Pilsner, en enkel (men icke-trivial) multi-pass optimera kompilator (programmerad i Coq) från ett ML-liknande källspråk S till ett monteringsliknande målspråk T, går igenom ett CPS-baserat mellanspråk. Pilsner är den första multi-pass kompilatorn för en högre ordning tvingande språk att vara kompositionskontrollerad. Slutligen är PILS flexibla: vi använder dem för att ytterligare verifiera (1) Zwickel, en direkt icke-optimerande kompilator för S, och (2) en handkodad självmodifierande T modul, bevisat korrekt w.r.t. En S-nivåspecifikation. Utgången från Zwickel och den självmodifierande T-modulen kan sedan säkert kopplas ihop med utmatningen från Pilsner. Sammantaget har detta varit ett betydande åtagande som omfattar flera personår och mer än 55.000 rader Coq.
Däremot fokuserar Ref på en kompositionsmetod för att sammanställa verifiering för ett relativt enkelt funktionellt språk, Pilsner, till ett idealiserat monteringsspråk.
Pilsner: a compositionally verified compiler for a higher-order imperative language
{'venue': 'ICFP 2015', 'journal': None, 'mag_field_of_study': ['Computer Science']}