Content deleted Content added
←Created page with '{{short description|Programming paradigm}} <!-- {{Programming paradigms}} --> In computer science, '''choreographic programming''' is a programming paradigm where programs are compositions of interactions among multiple concurrent participants.<ref name="bt-survey">{{Cite journal|url=https://doi.org/10.1561/2500000031|doi = 10.1561/2500000031|title = Behavioral Types in Programming Languages|year = 2016|last1 = Yoshida|firs...' |
Add more languages |
||
(40 intermediate revisions by 17 users not shown) | |||
Line 1:
{{short description|Programming paradigm}}
<!-- {{Programming paradigms}} -->▼
In [[computer science]], '''choreographic programming''' is a [[programming paradigm]] where programs are compositions of interactions among multiple [[concurrent computing|concurrent]] participants.<ref name="itc">{{cite book |last1=Montesi |first1=Fabrizio |title=Introduction to Choreographies |date=2023 |publisher=Cambridge University Press |doi=10.1017/9781108981491 |isbn=978-1-108-83376-9 |s2cid=102335067 |url=https://doi.org/10.1017/9781108981491}}</ref><ref name="bt-survey">{{Cite journal|url=https://doi.org/10.1561/2500000031|doi = 10.1561/2500000031|title = Behavioral Types in Programming Languages|year = 2016|last1 = Yoshida|first1 = Nobuko|last2 = Vasconcelos|first2 = Vasco T.|last3 = Padovani|first3 = Luca|last4 = Bono|first4 = Nicholas Ng|last5 = Neykova|first5 = Rumyana|last6 = Montesi|first6 = Fabrizio|last7 = Mascardi|first7 = Viviana|last8 = Martins|first8 = Francisco|last9 = Johnsen|first9 = Einar Broch|last10 = Hu|first10 = Raymond|last11 = Giachino|first11 = Elena|last12 = Gesbert|first12 = Nils|last13 = Gay|first13 = Simon J.|last14 = Deniélou|first14 = Pierre-Malo|last15 = Castagna|first15 = Giuseppe|last16 = Campos|first16 = Joana|last17 = Bravetti|first17 = Mario|last18 = Bono|first18 = Viviana|last19 = Ancona|first19 = Davide|journal = Foundations and Trends
== Overview ==
=== Choreographies ===
In choreographic programming, developers use a '''choreographic programming language''' to define the intended communication behaviour of concurrent participants. Programs in this paradigm are called '''choreographies'''.<ref name="
Choreographic languages are inspired by [[security protocol notation]] (also known as "Alice and Bob" notation). The key to these languages is the communication primitive, for example
<syntaxhighlight lang="text">
Alice.expr -> Bob.x
</syntaxhighlight>
Line 15:
The example below shows a choreography for a simplified [[single sign-on]] (SSO) protocol based on a [[Central Authentication Service]] (CAS) that involves three roles:
* <code>Client</code>, which wishes to obtain an [[access token]] from <code>CAS</code> to interact with <code>Service</code>.
* <code>Service</code>, which needs to know from <code>CAS</code> if the <code>Client</code> should be given access.
Line 21 ⟶ 20:
The choreography is:
<syntaxhighlight lang="text" line>
</syntaxhighlight>
The choreography starts in Line 1, where <code>Client</code> communicates a pair consisting of some credentials and the identifier of the service it wishes to access to <code>CAS</code>. <code>CAS</code> stores this pair in its local variable <code>authRequest</code> (for authentication request).
In Line 2, the <code>CAS</code> checks if the request is valid for obtaining an authentication token.
If so, it generates a token and communicates a <code>Success</code> message containing the token to both <code>Client</code> and <code>Service</code> (Lines
Otherwise, the <code>CAS</code> informs <code>Client</code> and <code>Service</code> that authentication failed, by sending a <code>Failure</code> message (Lines
=== Endpoint Projection ===
A key feature of choreographic programming is the capability of compiling choreographies to distributed implementations. These implementations can be
The translation of a choreography into distributed programs is called '''endpoint projection''' (EPP for short).<ref name="bt-survey" /><ref name="mp-langs" />
== Development ==▼
Endpoint projection returns a program for each role described in the source choreography.<ref name="mp-langs" /> For example, given the choreography above, endpoint projection would return three programs: one for <code>Client</code>, one for <code>Service</code>, and one for <code>CAS</code>. They are shown below in pseudocode form, where <code>send</code> and <code>recv</code> are primitives for sending and receiving messages to/from other roles.
The paradigm of choreographic programming originates from its titular PhD thesis.<ref name="M13:phd">{{cite thesis |type=PhD |last=Montesi |first=Fabrizio |date=2013 |title=Choreographic Programming |url=https://www.fabriziomontesi.com/files/choreographic_programming.pdf |___location= |publisher=IT University of Copenhagen |isbn=978-87-7949-299-8}} [https://eapls.org/items/1855/ (EAPLS Best PhD Dissertation Award)]</ref><ref name="GH21">{{Cite arXiv|eprint=2111.03484|last1=Hirsch|first1=Andrew K.|last2=Garg|first2=Deepak|title=Pirouette: Higher-Order Typed Functional Choreographies|year=2021|class=cs.PL}} [https://popl22.sigplan.org/details/POPL-2022-popl-research-papers/23/Pirouette-Higher-Order-Typed-Functional-Choreographies (POPL 2022 Distinguished Paper)]</ref><ref>{{cite web |url=https://eapls.org/items/1855/ |title=Fabrizio Montesi wins the EAPLS Best PhD Dissertation Award 2014 |author=Arend Rensink |date=2015-08-30 |publisher=European Association for Programming Languages and Systems}}</ref>▼
{{aligned table|class=wikitable|cols=2|col1header=y|rowstyle=vertical-align:middle
The inspiration for the syntax of choreographic programming languages can be traced back to [[security protocol notation]], also known as "Alice and Bob" notation. Choreographic programming has also been heavily influenced by standards for [[service choreography]] and [[sequence diagram|interaction diagrams]], as well as developments of the theory of [[process calculus|process calculi]].<ref name="mp-langs"/><ref>{{Cite journal|url=https://doi.org/10.1145/2220365.2220367|doi=10.1145/2220365.2220367|title=Structured Communication-Centered Programming for Web Services|year=2012|last1=Carbone|first1=Marco|last2=Honda|first2=Kohei|last3=Yoshida|first3=Nobuko|journal=ACM Transactions on Programming Languages and Systems|volume=34|issue=2|pages=1–78|s2cid=15737118}}</ref>▼
|title=Endpoint Projection (EPP) of the SSO choreography
|1=Client
|3=Service
|5=CAS
|2=<syntaxhighlight lang="text" line>
send (credentials, serviceID) to CAS
recv result from CAS
</syntaxhighlight>
|4=<syntaxhighlight lang="text" line>
recv result from CAS
</syntaxhighlight>
|6=<syntaxhighlight lang="text" line>
recv authRequest from Client
if check(authRequest) then
token = genToken(authRequest)
send Success(token) to Client
send Success(token) to Service
else
send Failure to Client
send Failure to Service
</syntaxhighlight>
}}
For each role, its code contains the actions that the role should execute to implement the choreography correctly together with the others.
▲== Development ==
Choreographic programming is an active area of research. The paradigm has been used in the study of [[Information_flow_(information_theory)|information flow]],<ref>{{Cite book|chapter-url=https://doi.org/10.1007/978-3-319-23165-5_20|doi = 10.1007/978-3-319-23165-5_20|chapter = Discretionary Information Flow Control for Interaction-Oriented Specifications|title = Logic, Rewriting, and Concurrency|series = Lecture Notes in Computer Science|year = 2015|last1 = Lluch Lafuente|first1 = Alberto|last2 = Nielson|first2 = Flemming|last3 = Nielson|first3 = Hanne Riis|volume = 9200|pages = 427–450|isbn = 978-3-319-23164-8|url = https://backend.orbit.dtu.dk/ws/files/119987994/Discretionary_Information_Flow_Control_for_Interaction_Oriented_Specifications.pdf}}</ref> [[parallel computing]],<ref>{{Cite book|chapter-url=https://doi.org/10.1007/978-3-319-39570-8_8|doi = 10.1007/978-3-319-39570-8_8|chapter = Choreographies in Practice|title = Formal Techniques for Distributed Objects, Components, and Systems|series = Lecture Notes in Computer Science|year = 2016|last1 = Cruz-Filipe|first1 = Luís|last2 = Montesi|first2 = Fabrizio|volume = 9688|pages = 114–123|arxiv = 1602.08863|isbn = 978-3-319-39569-2|s2cid = 18067252}}</ref> [[cyber-physical system|cyber-physical systems]],<ref>{{Cite book|chapter-url=https://doi.org/10.1145/3019612.3019656|doi=10.1145/3019612.3019656|chapter=Choreographing cyber-physical distributed control systems for the energy sector|title=Proceedings of the Symposium on Applied Computing|year=2017|last1=López|first1=Hugo A.|last2=Heussen|first2=Kai|pages=437–443|isbn=9781450344869|s2cid=39112346}}</ref><ref>{{Cite book|chapter-url=https://doi.org/10.1007/978-3-319-39570-8_13|doi = 10.1007/978-3-319-39570-8_13|chapter = Enforcing Availability in Failure-Aware Communicating Systems|title = Formal Techniques for Distributed Objects, Components, and Systems|series = Lecture Notes in Computer Science|year = 2016|last1 = López|first1 = Hugo A.|last2 = Nielson|first2 = Flemming|last3 = Nielson|first3 = Hanne Riis|volume = 9688|pages = 195–211|isbn = 978-3-319-39569-2}}</ref> [[adaptability|runtime adaptation]],<ref name="aiocj-paper">{{Cite journal|url=https://doi.org/10.23638/LMCS-13(2:1)2017|doi = 10.23638/LMCS-13(2:1)2017|year = 2017|last1 = Preda|first1 = Mila Dalla|last2 = Gabbrielli|first2 = Maurizio|last3 = Giallorenzo|first3 = Saverio|last4 = Lanese|first4 = Ivan|last5 = Mauro|first5 = Jacopo|title = Dynamic Choreographies: Theory and Implementation|journal = Logical Methods in Computer Science ; Volume 13|volume = 13|issue = 2|s2cid = 5555662}}</ref> and [[system integration]].<ref>{{Cite book|chapter-url=https://doi.org/10.1007/978-3-030-02671-4_2|doi = 10.1007/978-3-030-02671-4_2|chapter = ChIP: A Choreographic Integration Process|title = On the Move to Meaningful Internet Systems. OTM 2018 Conferences|series = Lecture Notes in Computer Science|year = 2018|last1 = Giallorenzo|first1 = Saverio|last2 = Lanese|first2 = Ivan|last3 = Russo|first3 = Daniel|volume = 11230|pages = 22–40|isbn = 978-3-030-02670-7|url = https://findresearcher.sdu.dk:8443/ws/files/153104697/ChIP.pdf}}</ref>▼
▲The paradigm of choreographic programming originates from its titular PhD thesis.<ref name="M13:phd">{{cite thesis |type=PhD |last=Montesi |first=Fabrizio |date=2013 |title=Choreographic Programming |url=https://www.fabriziomontesi.com/files/choreographic_programming.pdf |___location= |publisher=IT University of Copenhagen |isbn=978-87-7949-299-8}} [https://eapls.org/items/1855/ (EAPLS Best PhD Dissertation Award)]</ref><ref name="GH21">{{
▲The inspiration for the syntax of choreographic programming languages can be traced back to [[security protocol notation]], also known as "Alice and Bob" notation.<ref name="itc"/> Choreographic programming has also been heavily influenced by standards for [[service choreography]] and [[sequence diagram|interaction diagrams]], as well as developments of the theory of [[process calculus|process calculi]].<ref name="itc"/><ref name="mp-langs"/><ref>{{Cite journal
▲Choreographic programming is an active area of research. The paradigm has been used in the study of [[
== Languages ==
* AIOCJ ([http://www.cs.unibo.it/projects/jolie/aiocj.html website]).<ref name="aiocj-paper"/> A choreographic programming language for [[
* Chor.<ref name=":0">{{Cite book|chapter-url=https://doi.org/10.1145/2429069.2429101|doi=10.1145/2429069.2429101|chapter=Deadlock-freedom-by-design|title=Proceedings of the 40th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages - POPL '13|year=2013|last1=Carbone|first1=Marco|last2=Montesi|first2=Fabrizio|page=263|isbn=9781450318327|s2cid=15627190}}</ref> A [[session type|session-typed]] choreographic programming language that compiled to [[microservices]] in [[Jolie (programming language)|Jolie]]. In the meantime superseded by Choral.
▲* AIOCJ ([http://www.cs.unibo.it/projects/jolie/aiocj.html website]).<ref name="aiocj-paper"/> A choreographic programming language for [[Adaptation_(computer_science)|adaptable systems]] that produces code in in [[Jolie (programming language)|Jolie]].
*
*
* Core Choreographies.<ref>{{Cite journal|url=https://doi.org/10.1016/j.tcs.2019.07.005|doi = 10.1016/j.tcs.2019.07.005|title = A core model for choreographic programming|year = 2020|last1 = Cruz-Filipe|first1 = Luís|last2 = Montesi|first2 = Fabrizio|journal = Theoretical Computer Science|volume = 802|pages = 38–66|s2cid = 199122777|arxiv = 1510.03271}}</ref> A core theoretical model for choreographic programming.
* HasChor ([https://github.com/gshen42/HasChor website]).<ref>{{Cite journal |last1=Shen |first1=Gan |last2=Kashiwa |first2=Shun |last3=Kuper |first3=Lindsey |title=HasChor: Functional Choreographic Programming for All (Functional Pearl) |journal=Proceedings of the ACM on Programming Languages |date=2023-08-31 |volume=7 |url=https://doi.org/10.1145/3607849 |pages= 541–565|doi=10.1145/3607849|arxiv=2303.00924 }}</ref> A library for choreographic programming in [[Haskell]].
* Kalas.<ref>{{Cite journal |last1=Pohjola |first1=Johannes Åman |last2=Gómez-Londoño |first2=Alejandro |last3=Shaker |first3=James |last4=Norrish |first4=Michael |date=2022 |editor-last=Andronick |editor-first=June |editor2-last=de Moura |editor2-first=Leonardo |title=Kalas: A Verified, End-To-End Compiler for a Choreographic Language |url=https://drops.dagstuhl.de/opus/volltexte/2022/16736 |journal=13th International Conference on Interactive Theorem Proving (ITP 2022) |series=Leibniz International Proceedings in Informatics (LIPIcs) |___location=Dagstuhl, Germany |publisher=Schloss Dagstuhl – Leibniz-Zentrum für Informatik |volume=237 |pages=27:1–27:18 |doi=10.4230/LIPIcs.ITP.2022.27 |doi-access=free |isbn=978-3-95977-252-5|s2cid=251322644 }}</ref> A choreographic programming language with a verified compiler to CakeML.
* Pirouette.<ref name="GH21"/> A [[proof assistant|mechanised]] choreographic programming language theory with higher-order procedures.
* Klor ([https://github.com/lovrosdu/klor website]). Library-level choreographic programming in [[Clojure]].
* Tempo ([https://github.com/tempo-lang/tempo website]). A practical choreographic programming language that compiles to library source code for multiple target languages.
== See also ==
Line 59 ⟶ 89:
* [[Sequence diagram]]
* [[Service choreography]]
* [[Structured concurrency]]
* [[Multitier programming]]
== References ==
{{Reflist}}
== External links ==
* [https://www.choral-lang.org/ www.choral-lang.org]▼
▲* [https://www.choral-lang.org www.choral-lang.org]
[[
[[
|