Sessionstyper garanterar statiskt att kommunikationen överensstämmer med ett protokoll. De flesta kontona för sessionsskrivning är dock inte en följd av misslyckanden, vilket innebär att de är av begränsad användning i verkliga ansökningar — särskilt distribuerade ansökningar — där misslyckandet är genomgripande. Vi presenterar den första formella integrationen av asynkrona sessionstyper med undantag för hantering i ett funktionellt programmeringsspråk. Vi definierar en kärnanalys som tillfredsställer bevarande- och framstegsegenskaper, är dödlägesfri, sammanflytande och avslutande. Vi tillhandahåller det första genomförandet av sessionstyper med undantag hantering för en fullfjädrad funktionell programmeringsspråk, genom att utöka Länkar webbprogrammeringsspråket; vårt genomförande bygger på befintligt arbete med effekthanterare. Vi illustrerar vårt tillvägagångssätt genom ett löpande exempel på tvåfaktorsautentisering, och ett större exempel på ett sessionsbaserat chattprogram där kommunikation sker över sessionsliknande kanaler och frånkopplingar hanteras graciöst.  Med tillväxten av internet och mobila enheter, liksom misslyckandet med Moores lag, samstämmighet och distribution har blivit centrala för många tillämpningar. Att skriva rätt samtidig och distribuerad kod kräver effektiva verktyg för resonemang om kommunikationsprotokoll. Medan datatyper ger ett effektivt verktyg för att resonera om formen av data som kommuniceras, protokoll kräver oss också att resonera om i vilken ordning meddelanden överförs. Sessionstyp [Honda 1993; Honda et al. 1998] är typer av protokoll. Tillstånd att göra digitala eller papperskopior av delar eller allt detta arbete för personligt bruk eller klassrum beviljas utan avgift, förutsatt att kopiorna inte görs eller distribueras för vinst eller kommersiella fördelar och att kopiorna är försedda med detta meddelande och den fullständiga hänvisningen på första sidan. Upphovsrätt till tredje parts delar av detta arbete måste hedras. För all annan användning, kontakta ägaren/författarna. Bilda. 1................................................................ Tvåfaktors Autentisering Session Skriver det första kontot för asynkrona sessionstyper i ett funktionellt programmeringsspråk, som smidigt hanterar både distribution och fel. Vi presenterar både en kärnanalys med starka metateoretiska korrekthetsegenskaper och ett praktiskt genomförande som en förlängning av webbprogrammeringsspråket Links [Cooper et al. År 2007............................................................................................................. Vi illustrerar sessionstyper med ett grundläggande exempel på tvåfaktorsautentisering. En användare anger sina referenser. Om inloggningsförsöket är från en känd enhet, då är de autentiserade och kan fortsätta att utföra privilegierade handlingar. Om inloggningsförsöket är från en oigenkännlig enhet skickas användaren en utmaningskod. De skriver in utmaningskoden i en maskinvarunyckel som ger en svarskod. Om användaren svarar med rätt svarskod är de autentiserade. En sessionstyp anger kommunikationsbeteendet för en endpoint i en kommunikationskanal som deltar i en dialog (eller session) med den andra endpointen i kanalen. Bilda. 1 visar sessionstyperna av två kanalslutpunkter som ansluter en klient och en server. Bilda. 1a visar sessionstypen för servern som först tar emot (?) ett par av ett användarnamn och lösenord från klienten. Nästa, servern väljer ( ska) om att autentisera klienten, utfärda en utmaning, eller avvisa referenser. Om servern beslutar att utfärda en utmaning skickar den (!) utmaning strängen, väntar på svaret, och antingen autentiserar eller avvisar klienten. ServerBody-typen abstracts över resten av interaktionen, till exempel att göra en insättning eller uttag. Dualitet. Kunden implementerar den dubbla sessionstypen, som visas i bild. Detta beslut träder i kraft dagen efter det att det har offentliggjorts i Europeiska unionens officiella tidning. När servern får ett värde skickar klienten ett värde och vice versa. När servern gör ett urval erbjuder klienten ett val (&) och vice versa. Denna dualitet mellan klient och server säkerställer att varje kommunikation matchas av den andra parten. Vi betecknar dualitet med en overbar; alltså TwoFactorClient = TwoFactorServer och TwoFactorServer = TwoFactorClient. Genomförande av tvåfaktors behörighetskontroll. Låt oss anta att vi har konstruktioner för att skicka och ta emot, och för att avsluta, en slutpunkt.  Vi kan nu skriva en kundimplementering. TvåFactorClient funktion tar referenser och en endpoint av typ TwoFactorClient som argument. Licensen skickas längs endpointen, sedan tre val erbjuds beroende på om servern autentiserar användaren, skickar en två-faktor utmaning, eller avvisar autentiseringsförsöket. Om servern autentiserar användaren, går programmet vidare till huvudprogrammet (klientBody(s)). Om servern skickar en utmaning tar kunden emot utmaningsnyckeln och skickar svaret, beräknat genom att generera respons. Två alternativ erbjuds sedan beroende på om utmaningen svar var framgångsrik. Avvisandet av ett autentiseringsförsök är en del av protokollet och inte ett exceptionellt beteende. Vi kan också skriva en server implementation. TvåFactorServer funktionen tar en endpoint av typ TwoFactorServer längs vilken den får referenser, som kontrolleras med hjälp av checkDetails. Om checken passerar, går servern vidare till applikationsorganet (serverBody(s)); om inte, meddelar servern klienten genom att välja den ÅtkomstFörenade grenen. Denna specifika server implementation väljer att aldrig skicka en utmaning begäran. Statiskt kontrollera sessionstyper kräver ett substrukturellt typsystem. Vi diskuterar tre alternativ: linjära typer, affina typer och linjära typer med explicit avbokning. Att bara tillhandahålla konstruktioner för att skicka och ta emot värden, och för att välja och erbjuda val, är otillräckligt för att säkert genomföra sessionstyper. Betrakta följande klient: felKlient: TwoFactorClient 1 felKlient(er) Låt t = skicka ("Alice", "hunter2") s in låt t = skicka ("Bob", "letmein") s in. .. Återanvändning av s tillåter ett (användarnamn, lösenord) par att skickas längs samma endpoint två gånger, bryter mot den grundläggande egenskapen session trohet, som anger att i ett välskrivet program, kommunikation över en endpoint matchar dess sessionstyp. För att upprätthålla sessionens trohet och säkerställa att alla kommunikationsåtgärder i en sessionstyp inträffar, kräver sessionstypsystem vanligtvis att varje endpoint används linjärt — exakt en gång. Undantag. I praktiken är linjära sessionstyper orealistiska. Hittills har vi antagit checkDetaljer alltid lyckas, vilket kan vara rimligt om du kontrollerar mot en in-minne butik, men inte om ansluter till en fjärrdatabas. Ett alternativ skulle vara att kontrollera detaljer för att returnera falska på
I Fowler m.fl.'s REF implementation of session types for the Links web programming language, afffine typing tillåter sessioner att avbrytas när undantag (inklusive tappade anslutningar) inträffar.
Exceptional asynchronous session types: session types without tiers
{'venue': 'PACMPL', 'journal': None, 'mag_field_of_study': ['Computer Science']}