syndicate-2017/index.md

89 lines
3.0 KiB
Markdown
Raw Normal View History

2016-03-09 11:23:06 +00:00
---
2016-03-30 22:32:07 +00:00
title: Home
2016-03-09 11:23:06 +00:00
layout: page
2016-04-01 18:33:58 +00:00
class: frontpage
link:
ghrepo: 'https://github.com/tonyg/syndicate'
2016-03-09 11:23:06 +00:00
---
2016-04-01 19:17:27 +00:00
**noun**
/ˈsindikit/
1. a self-organizing group of individuals, companies, corporations or
entities formed to transact some specific business, to pursue or
promote a shared interest. <small>—[Wikipedia](https://en.wikipedia.org/wiki/Syndicate)</small>
2016-04-02 01:03:03 +00:00
# Motivation
2016-03-30 22:32:07 +00:00
2016-04-02 01:03:03 +00:00
Every interactive program needs some way of
2016-03-30 22:32:07 +00:00
2016-04-02 01:03:03 +00:00
- representing the *conversations* it is having as *concurrent
components*
2016-03-30 22:32:07 +00:00
2016-04-02 01:03:03 +00:00
- *mapping incoming events* to these components
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
- managing the *shared understanding* that the components are
building as they work towards the program's goal
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
- cleaning up shared state after *partial failure* of a component
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
- *scoping* interactions and shared state inside the program
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
Existing programming languages lack linguistic support for these
requirements, leaving the programmer to fend for themselves.
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
Syndicate is a language designed to help organise interactive
programs.
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
# Features
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
Syndicate is an Actor-based language offering
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
- pub/sub pattern-based message routing, for mapping events to actors
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
- *dataspaces*, stores for semi-structured data, for managing shared
state
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
- *state change notifications* for keeping actors informed of changes
in dataspaces
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
- integrated techniques for registering and discovering services and
for cleaning up after both graceful and unexpected actor failures
2016-04-01 18:33:58 +00:00
2016-04-02 01:03:03 +00:00
- recursive layering of groups of actors, each group with a private
dataspace of its own, for organising larger programs
2016-03-09 11:23:06 +00:00
2016-04-02 01:03:03 +00:00
Together, these features help address the above challenges.
# Code
Syndicate is implemented both for [Racket](http://racket-lang.org/)
and for [ES5](https://en.wikipedia.org/wiki/ECMAScript).
<a href="{{ page.link.ghrepo }}"><img class="leftfloat" alt="Link to Syndicate github repo" src="{{ site.baseurl }}/img/GitHub-Mark-64px.png"></a>
The [Syndicate github repository]({{ page.link.ghrepo }}) contains
implementations along with some larger example programs.
<div class="clear"></div>
# Papers
<a href="{{ site.baseurl }}/papers/from-events-to-reactions-a-progress-report-20160301-1747.pdf"><img class="leftfloat" src="{{ site.baseurl }}/img/pdf_icon_gen_48x49.png"></a>
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. 9th Int. Workshop on Programming Language Approaches to
Concurrency and Communication-cEntric Software (PLACES 2016), April
2016, Eindhoven, Netherlands.
<div class="clear"></div>
<a href="{{ site.baseurl }}/papers/coordinated-concurrent-programming-in-syndicate-20160111-1409.pdf"><img class="leftfloat" src="{{ site.baseurl }}/img/pdf_icon_gen_48x49.png"></a>
Tony Garnock-Jones and Matthias Felleisen,
[“Coordinated Concurrent Programming in Syndicate”]({{ site.baseurl
}}/papers/coordinated-concurrent-programming-in-syndicate-20160111-1409.pdf),
In: Proc. 25th European Symposium on Programming (ESOP 2016), April
2016, Eindhoven, Netherlands.
<div class="clear"></div>