6.8 KiB
title | layout | class | link | ||||
---|---|---|---|---|---|---|---|
Home | page | frontpage |
|
noun
/ˈsindikit/
- a self-organizing group of individuals, companies, corporations or entities formed to transact some specific business, to pursue or promote a shared interest. —Wikipedia
Overview
Syndicate is an Actor-based programming language offering
-
pub/sub pattern-based message routing, for mapping events to actors
-
dataspaces, stores for semi-structured data, for managing shared state
-
state change notifications for keeping actors informed of changes in dataspaces
-
integrated techniques for registering and discovering services and for cleaning up after both graceful and unexpected actor failures
-
recursive layering of groups of actors, each group with a private dataspace of its own, for organising larger programs
Together, these features help programmers organise their interactive programs.
Example
These two actors implement a toy “bank account” actor that listens for
deposit
messages and maintains an account
balance record in the
shared dataspace. The first is written using Syndicate implemented for
Racket, and the second using Syndicate for JavaScript.
{% capture racket_example1 %}{% include frontpage_racket_example1.md %}{% endcapture %} {% capture javascript_example1 %}{% include frontpage_javascript_example1.md %}{% endcapture %} {% capture racket_example2 %}{% include frontpage_racket_example2.md %}{% endcapture %} {% capture javascript_example2 %}{% include frontpage_javascript_example2.md %}{% endcapture %}
The next two implement a client for the “bank account”. Each time the balance in the shared dataspace changes, they print a message to the console.
The full code for the Racket example is bank-account.rkt, and for the JavaScript example, demo-bankaccount.js.
Live Syndicate/js demos
This page links to in-browser runnable demos (and source code) of Syndicate/js programs.
Code
Syndicate is implemented both for Racket and for JavaScript.
The [Syndicate github repository]({{ page.link.ghrepo }}) contains implementations along with some larger example programs.
Documentation
The system is still somewhat in flux, and documentation is still being written. My dissertation has a chapter describing the Racket implementation of Syndicate and a chapter including many examples demonstrating idioms of Syndicate programming.
Dissertation
A resource page is available, including links to the PDF and HTML versions of the dissertation document, a recording of my defense talk, and the corresponding slides.
Tony Garnock-Jones, [“Conversational Concurrency”]({{ site.baseurl }}/papers/conversational-concurrency-201712310922.pdf), PhD dissertation, December 2017, College of Computer and Information Science, Northeastern University, Boston, Massachusetts. ([PDF]({{ site.baseurl }}/papers/conversational-concurrency-201712310922.pdf); HTML; Resources)
Papers
Tony Garnock-Jones, [“From Events To Reactions: A Progress Report”]({{ site.baseurl }}/papers/from-events-to-reactions-a-progress-report-20160301-1747.pdf), In: Proc. PLACES 2016 (workshop), April 2016, Eindhoven, Netherlands. ([PDF]({{ site.baseurl }}/papers/from-events-to-reactions-a-progress-report-20160301-1747.pdf); [Slides]({{ site.baseurl }}/papers/places-2016-slides.pdf))
Tony Garnock-Jones and Matthias Felleisen, [“Coordinated Concurrent Programming in Syndicate”]({{ site.baseurl }}/papers/coordinated-concurrent-programming-in-syndicate-20160111-1409.pdf), In: Proc. ESOP 2016, April 2016, Eindhoven, Netherlands. ([PDF]({{ site.baseurl }}/papers/coordinated-concurrent-programming-in-syndicate-20160111-1409.pdf); [Slides]({{ site.baseurl }}/papers/esop-2016-slides.pdf))
Tony Garnock-Jones, Sam Tobin-Hochstadt, and Matthias Felleisen, [“The Network as a Language Construct”]({{ site.baseurl }}/papers/network-as-language-construct-20140117-1204.pdf), In: Proc. ESOP 2014, April 2016, Eindhoven, Netherlands. ([PDF]({{ site.baseurl }}/papers/network-as-language-construct-20140117-1204.pdf); [Slides]({{ site.baseurl }}/papers/esop-2014-slides.pdf))
Contact
Please feel free to email me at tonyg@leastfixedpoint.com.