2016-04-01 23:53:46 +00:00
|
|
|
# Syndicate: A Networked, Concurrent, Functional Programming Language
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2016-04-01 23:53:46 +00:00
|
|
|
Syndicate is an actor-based concurrent language able to express
|
2015-08-18 16:47:29 +00:00
|
|
|
communication, enforce isolation, and manage resources.
|
|
|
|
Network-inspired extensions to a functional core represent imperative
|
|
|
|
actions as values, giving side-effects locality and enabling
|
|
|
|
composition of communicating processes.
|
|
|
|
|
2016-01-18 19:29:48 +00:00
|
|
|
Collaborating actors are grouped within task-specific *networks* (a.k.a.
|
2015-08-18 16:47:29 +00:00
|
|
|
virtual machines) to scope their interactions. Conversations between
|
|
|
|
actors are multi-party (using a publish/subscribe medium), and actors
|
|
|
|
can easily participate in many such conversations at once.
|
|
|
|
|
2016-04-01 23:53:46 +00:00
|
|
|
Syndicate makes *presence* notifications an integral part of pub/sub
|
2015-08-18 16:47:29 +00:00
|
|
|
through its *shared dataspaces*, akin to
|
|
|
|
[tuplespaces](https://en.wikipedia.org/wiki/Tuple_space). Each shared
|
2016-01-18 19:29:48 +00:00
|
|
|
dataspace doubles as the pub/sub subscription table for its network.
|
2015-08-18 16:47:29 +00:00
|
|
|
Actors react to *state change notifications* reporting changes in a
|
|
|
|
dataspace, including new subscriptions created by peers and removal of
|
|
|
|
subscriptions when a peer exits or crashes. State change notifications
|
|
|
|
serve to communicate changes in demand for and supply of services,
|
2016-01-18 19:29:48 +00:00
|
|
|
both within a single network and across nested layers of
|
|
|
|
networks-within-networks. Programs can give up responsibility for
|
2015-08-18 16:47:29 +00:00
|
|
|
maintaining shared state and for scoping group communications, letting
|
2016-01-18 19:29:48 +00:00
|
|
|
their containing network take on those burdens.
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2016-04-02 00:02:50 +00:00
|
|
|
## Contents
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2016-04-02 00:02:50 +00:00
|
|
|
This repository contains
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2016-04-02 00:02:50 +00:00
|
|
|
- a [Racket](http://racket-lang.org/) implementation of Syndicate
|
|
|
|
(plus auxiliary modules) in `racket/syndicate/`
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2016-04-02 00:02:50 +00:00
|
|
|
- an
|
|
|
|
[ECMAScript 5](http://www.ecma-international.org/publications/standards/Ecma-262.htm)
|
|
|
|
implementation of Syndicate in `js/`
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2016-04-02 00:02:50 +00:00
|
|
|
- larger example programs:
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2016-04-02 00:02:50 +00:00
|
|
|
- `examples/platformer`, a 2D Platform game written in Syndicate
|
|
|
|
for Racket.
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2016-04-02 00:02:50 +00:00
|
|
|
- `examples/netstack`, a TCP/IP stack written in Syndicate for
|
|
|
|
Racket. It reads and writes raw Ethernet packets from the kernel
|
|
|
|
using Linux- and OSX-specific APIs.
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2016-04-02 00:02:50 +00:00
|
|
|
- a sketch of a Haskell implementation of the core routing structures
|
|
|
|
of Syndicate in `hs/`
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2018-01-17 13:24:39 +00:00
|
|
|
## Copyright and License
|
2015-08-18 16:47:29 +00:00
|
|
|
|
2018-01-17 13:24:39 +00:00
|
|
|
Copyright © Tony Garnock-Jones 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018.
|
|
|
|
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU Lesser General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|