Chor        choreography programming language

Choreographies for Reliable and efficient Communication software (CRC)

Starting from August 1st, 2014, the development of Chor is funded for 3 years by the Danish Council for Independent Research - Technology and Production (DFF-FTP), under the project Choreographies for Reliable and efficient Communication software (CRC) led by Fabrizio Montesi (grant n. DFF - 4005-00304).
This webpage will report on the progress of the project and make all the researched and published material publicly available at no cost. Additional resources, such as presentations, will also be included here.

What is Chor?

Chor is a new programming language for communicating systems, based on choreographies. Choreographies are global descriptions of system implementations, where the behaviour of all entities in a system is given in a single program. Choreographies enhance the quality of software, as they represent ``formal blueprints'' of how communicating systems should behave and offer a concise view of the message flows enacted by a system. In Chor, a choreography can then be projected (or compiled, if you like) onto a set of separate programs that can be run in a distributed system.

In Chor, entities communicate over sessions (as in common web services), which are modelled as first-class language elements. Sessions implement protocols, which specify the order and type of some communications that have to be implemented. A protocol may specify, for instance, a series of message exchanges between some parties for performing the authentication of a user. Chor comes with an Eclipse-based IDE and a type checker that will help you with on-the-fly verification, ensuring that your programs will always respect the protocols that you are following.

Chor is open source, and you can get the code from our sourceforge project page. The language has solid formal foundations, reported in this paper.

We are currently building this site with more information every day, so come back soon! We are also in the process of writing a more user-friendly documentation than our technical report. Meanwhile, you can download some examples from our online example repository or this file.

Watch the video (slides):

What can I use Chor for?

Chor is designed to support the development of concurrent systems based on communications. These can range from multi-threaded systems (suitable for multicore architectures) to distributed service-oriented systems. We currently support the code generation of Jolie services, but we plan to extend Chor to generate code in many other languages.

Is Chor production ready?

Chor is still a prototype, and lacks some features that may be useful for integrating its generated code with existing programs. For example, Chor is still limited to simple data structures for messages, such as strings and integers, and does not come with an integrated debugger. We are continuously working for improving Chor with common features needed in production environments, so stay tuned!

How can I install Chor?

See our Download page for instructions on how to install Chor.