Distribuerade applikationer är svåra att programmera tillförlitligt och säkert. Beroende på typade funktionella språk lovar att förhindra breda klasser av fel och sårbarheter, och att möjliggöra programverifiering för att gå sida vid sida med utveckling. Men som rekursion, effekter och rika bibliotek läggs till, med hjälp av typer för att resonera om program, specifikationer och bevis blir utmanande. Vi presenterar F, en fullfjädrad design och genomförande av ett nytt beroende skrivit språk för säker distribuerad programmering. Till skillnad från tidigare språk, F ger godtycklig rekursion samtidigt upprätthålla en logiskt konsekvent kärna; det möjliggör modulärt resonemang om tillstånd och andra effekter med hjälp av affine typer; och det stöder bevis på förfining egenskaper med hjälp av en blandning av kryptografiska bevis och logiska bevis termer. Nyckelmekanismen är ett nytt slags system som spårar flera underspråk inom F och kontrollerar deras interaktion. F subsumerar två tidigare språk, F7 och Fine. Vi bevisar typ ljudstyrka (med bevis mekaniserade i Coq) och logisk konsekvens för F. Vi har implementerat en kompilator som översätter F till.NET bytecode, baserat på en prototyp för Fine. F ger tillgång till bibliotek för konvergens, nätverk, kryptografi och interoperabilitet med C#, F# och de andra.NET-språken. Kompilatorn producerar kontrollerbara binärer med 60% kodstorlek overhead för bevis och typer, så mycket som en 45x förbättring jämfört med Fine kompilatorn, samtidigt som den möjliggör effektiv bytekodverifiering. Hittills har vi programmerat och verifierat mer än 20.000 rader av F inklusive (1) nya system för flerpartssessioner; (2) en noll-kunskap sekretessbevarande betalningsprotokoll; (3) en härkomst-medveten curated databas; (4) en svit av 17 webb-browser förlängningar verifieras för behörighetsegenskaper; och (5) en molnvärd multi-tier webbprogram med en verifierad referens monitor.
F * REF ] är ett språk som innehåller linjära typer och värdeberoende typer.
Secure distributed programming with value-dependent types
{'venue': "ICFP '11", 'journal': None, 'mag_field_of_study': ['Computer Science']}