Separation logik är en kraftfull programlogik för den statiska modulära verifieringen av imperativ program. Dynamisk kontroll av separationslogik kontrakt på gränserna mellan verifierade och opålitliga moduler är dock svårt, eftersom det kräver en att genomdriva (bland annat) som samtal från en verifierad till en opålitlig modul inte tillgång minnesresurser som för närvarande ägs av den verifierade modulen. I detta dokument föreslås en strategi för dynamisk kontraktskontroll genom att man förlitar sig på stöd för kapacitet, en välstuderad form av oförfalskade minnespekar som möjliggör finkornig, effektiv minnesåtkomstkontroll. Mer specifikt förlitar vi oss på en form av kapacitet som kallas linjär kapacitet för vilken hårdvaran hävdar att de inte kan kopieras. Vi formaliserar vår strategi som en helt abstrakt kompilator från ett statiskt verifierat källspråk till ett okontrollerat målspråk med stöd för linjär kapacitet. Den viktigaste insikten bakom vår kompilator är att minnesresurser som beskrivs av rumslig separationslogik predikat kan representeras i körtid av linjära förmågor. Kompilatorn är separation-logic-proof-directed: den använder separation logiken bevis för källprogrammet för att avgöra hur minnesåtkomst i källkodsprogrammet bör sammanställas till linjära kapacitetsåtkomster i målprogrammet. Den fullständiga abstraktionen egenskapen hos kompilatorn garanterar i huvudsak att sammanställda verifierade moduler kan interagera med opålitliga målspråk moduler som om de kompilerats från verifierad kod också.
I det samtidiga arbetet tillhandahåller REF en helt abstrakt kompilator från ett språk med specifikationer för separationslogik på opålitliga funktioner till en kapacitetsmaskin med linjär kapacitet.
Linear capabilities for fully abstract compilation of separation-logic-verified code
{'venue': 'PACMPL', 'journal': None, 'mag_field_of_study': ['Computer Science']}