Koreografisk programmering
Inom datavetenskap är koreografisk programmering ett programmeringsparadigm där program är sammansättningar av interaktioner mellan flera samtidiga deltagare .
Översikt
Koreografier
I koreografisk programmering använder utvecklare ett koreografiskt programmeringsspråk för att definiera det avsedda kommunikationsbeteendet för samtidiga deltagare. Program i detta paradigm kallas koreografier . Koreografiska språk är inspirerade av säkerhetsprotokollnotation (även känd som "Alice och Bob"-notation). Nyckeln till dessa språk är till exempel den primitiva kommunikationen
Alice.expr -> Bob.x
läser " Alice
kommunicerar resultatet av utvärderingen av uttrycket expr
till Bob
, som lagrar det i sin lokala variabel x
". Alice, Bob, etc. kallas vanligtvis roller eller processer .
Exemplet nedan visar en koreografi för ett förenklat protokoll för enkel inloggning (SSO) baserat på en central autentiseringstjänst (CAS) som involverar tre roller:
-
Klient
som vill erhålla en åtkomsttoken frånCAS
för att interagera medtjänsten
. -
Tjänst
, som behöver veta frånCAS
omKunden
ska ges åtkomst. -
CAS
, som är den centrala autentiseringstjänsten som ansvarar för att kontrollerakundens
autentiseringsuppgifter.
Koreografin är:
Client.(credentials, serviceID) -> CAS.authRequest if CAS.check(authRequest) then CAS.token = genToken(authRequest) CAS.Success(token) -> Client.result CAS.Success(token) -> Service.result else CAS.Failure -> Client.result CAS.Failure -> Service.result
Koreografin börjar på rad 1, där klienten
kommunicerar ett par som består av några referenser och identifieraren för tjänsten den vill ha åtkomst till CAS
. CAS
lagrar detta par i sin lokala variabel authRequest
(för autentiseringsbegäran). På rad 2 CAS
om begäran är giltig för att erhålla en autentiseringstoken. Om så är fallet genererar den en token och kommunicerar ett framgångsmeddelande
som innehåller token till både klienten
och tjänsten
(raderna 3–5). I annat fall informerar CAS
klienten
och tjänsten
om att autentiseringen misslyckades genom att skicka ett felmeddelande
(raderna 7–8). Vi hänvisar till denna koreografi som "SSO-koreografin" i resten.
Endpoint Projection
En nyckelfunktion i koreografisk programmering är förmågan att sammanställa koreografier till distribuerade implementeringar. Dessa implementeringar kan vara bibliotek för programvara som behöver delta i ett datornätverk genom att följa ett protokoll, eller fristående distribuerade program.
Översättningen av en koreografi till distribuerade program kallas för endpoint projection (förkortat EPP).
Endpoint-projektion returnerar ett program för varje roll som beskrivs i källkoreografin. Till exempel, med tanke på koreografin ovan, skulle slutpunktsprojektion returnera tre program: ett för Client
, ett för Service
och ett för CAS
. De visas nedan i pseudokodform, där send
och recv
är primitiver för att skicka och ta emot meddelanden till/från andra roller.
Klient | Service | CAS |
---|---|---|
skicka (referenser, serviceID) till CAS recv resultat från CAS |
recv resultat från CAS |
recv authRequest från Client if check(authRequest) then token = genToken(authRequest) skicka Success(token) till klienten skicka Success(token) till tjänsten annars skicka Misslyckande till klienten skicka Misslyckad tjänst |
För varje roll innehåller dess kod de åtgärder som rollen ska utföra för att implementera koreografin korrekt tillsammans med de andra.
Utveckling
Paradigmet för koreografisk programmering kommer från dess titulära doktorsavhandling. Inspirationen till syntaxen för koreografiska programmeringsspråk kan spåras tillbaka till säkerhetsprotokollnotation , även känd som "Alice och Bob"-notation. Koreografisk programmering har också starkt påverkats av standarder för tjänstekoreografi och interaktionsdiagram , såväl som utvecklingen av teorin om processkalkyler .
Koreografisk programmering är ett aktivt forskningsområde. Paradigmet har använts i studiet av informationsflöde , parallell beräkning , cyberfysiska system , runtime-anpassning och systemintegration .
språk
- AIOCJ ( hemsida ). Ett koreografiskt programmeringsspråk för anpassningsbara system som producerar kod i Jolie .
- Chor ( hemsida ). Ett sessionstypat koreografiskt programmeringsspråk som kompileras till mikrotjänster i Jolie .
- Choral ( hemsida ). Ett objektorienterat koreografiskt programmeringsspråk av högre ordning som kompileras till bibliotek i Java .
- Kärnkoreografier. En grundläggande teoretisk modell för koreografisk programmering. En mekaniserad implementering finns tillgänglig i Coq .
- Kalas. Ett koreografiskt programmeringsspråk med en verifierad kompilator till CakeML.
- Piruett. En mekaniserad koreografisk programmeringsspråksteori med procedurer av högre ordning.
Se även
- Säkerhetsprotokollnotation
- Sekvensdiagram
- Servicekoreografi
- Strukturerad samtidighet
- Multitier programmering