Resources
Learning Material
Book: Introduction to Choreographies
The book Introduction to Choreographies (Cambridge University Press) is a pedagogical introduction to the principles of choreographic languages, choreographic programming, and their relation to distributed implementations.
Software
Choral
Choral is an innovative choreographic programming language that leverages the principles of Object-Oriented Programming (OOP) to enhance the way developers express and implement distributed systems. At its core, Choral introduces a novel data type concept that allows data to be distributed across various participants within a distributed system. This approach redefines choreographic programming by treating choreographies as classes, and their instances as objects that collaboratively manage states and behaviours.
One of Choral’s standout features is its compiler, which, given a choreography, generates a (decentralised) implementation for each of its participants. These implementations are libraries in pure Java, whose types are under the control of the Choral programmer. This modularity enables developers to seamlessly integrate these libraries into their applications, ensuring correct participation in choreographies. By merging choreographic and object-oriented paradigms, Choral not only simplifies the development of concurrent and distributed software but also enhances the expressivity of choreographic programming with novel features like higher-order choreographies and distributed data structures. This allows for more reusable and flexible choreographies, including the ability to pass objects and parameterize choreographies without central coordination. Overall, Choral represents a significant advancement in making choreographic programming practical and accessible for modern software development.
Learn more by checking the Choral website or by reading the research article.
Ozone
Ozone is a library that lets programmers safely use Java Futures in Choral code. With Ozone, programmers can write endpoint code that handles requests in parallel or returns values asynchronously.
Learn more by watching the tutorial or by reading the research article.