En helt abstrakt kompilator garanterar att två källkomponenter är observationsmässigt likvärdiga i källspråket om och endast om deras översättningar är observationsmässigt likvärdiga i målet. Fullständig abstraktion innebär översättningen är säker: målspråk angripare kan inte göra fler observationer av en kompilerad komponent än en källspråk angripare interagerar med den ursprungliga källkomponenten. Att bevisa full abstraktion för realistiska kompilatorer är utmanande eftersom realistiska målspråk innehåller funktioner (t.ex. kontrolleffekter) som inte finns tillgängliga i källan, medan bevis för fullständig abstraktion kräver att visa att varje målkontext som en kompilerad komponent kan kopplas till kan översättas tillbaka till en beteendemässigt likvärdig källkontext. Vi bevisar det första fullständiga abstraktionsresultatet för en översättning vars målspråk innehåller undantag, men källan gör det inte. Vår översättning-specifikt, stängning omvandling av helt enkelt maskinskrivna λ-kalkyler med rekursiva typer-användningar typer på målnivå för att säkerställa att en kompilerad komponent är aldrig kopplad med angripare som har mer särskiljande effekt än källnivå angripare. Vi presenterar en ny bakåtöversättningsteknik baserad på en ytlig inbäddning av målspråket i källspråket vid en dynamisk typ. Sedan infogas gränser som medlare termer mellan den otypade inbäddningen och den starkt typade källan. Denna teknik tillåter back-translating icke-avslutande program, målfunktioner som är otypbara i källan, och väl-bromsade effekter.
I ett papper som är nära relaterat till vårt arbete, REF visa full-abstraktion av stängning omvandling av en enkel-typad lambda kalkyl med rekursiva typer till ett enkelt maskinskrivna språk med undantag och ett effektsystem för att spåra undantag.
Fully abstract compilation via universal embedding
{'venue': 'ICFP 2016', 'journal': None, 'mag_field_of_study': ['Computer Science']}