--- title: Home layout: page class: frontpage link: ghrepo: 'https://github.com/tonyg/syndicate' docs: 'http://docs.racket-lang.org/syndicate@syndicate/index.html' --- # Syndicate 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 %}
{{ racket_example1 | markdownify }} {{ javascript_example1 | markdownify }}
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.
{{ racket_example2 | markdownify }} {{ javascript_example2 | markdownify }}
The full code for the Racket example is [bank-account.rkt](https://github.com/tonyg/syndicate/blob/master/racket/syndicate/examples/actor/bank-account.rkt), and for the JavaScript example, [demo-bankaccount.js](https://github.com/tonyg/syndicate/blob/master/js/compiler/demo-bankaccount.js). ## Live Syndicate/js demos [This page](examples/) links to in-browser runnable demos (and source code) of Syndicate/js programs. ## Install Follow the instructions [here](install/). ## Source Code Syndicate is implemented both for [Racket](http://racket-lang.org/) and for [JavaScript](https://en.wikipedia.org/wiki/ECMAScript). Link to Syndicate github repo 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](tonyg-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](tonyg-dissertation/) 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](tonyg-dissertation/html/); [Resources](tonyg-dissertation/))
## 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.