The version of Syndicate current at the conclusion of Tony Garnock-Jones's PhD research, end-of-2017/start-of-2018.
Go to file
Tony Garnock-Jones c56e5ad547 Switch adhoc-assertions to a bag (from a set).
This repairs a bug regarding crashes in a new actor's boot-proc.

Previously, if boot-proc raised an exception, the initial assertions
would stick around forever. By changing adhoc-assertions to a bag
rather than a set, and putting the initial assertions in the bag, we
put them somewhere they are guaranteed to be processed during actor
termination, even when an exception is signalled during boot.

This is an API change wrt the previous Syndicate implementation:
assert!/retract! now have bag semantics, not set semantics. We can add
set-semantics APIs if we end up needing them, of course, layered on
top of the bag implementation.
2018-04-27 09:59:03 +01:00
doc More minor fixes 2016-05-13 20:50:20 -04:00
examples Remove unused definition 2018-02-09 11:15:53 +00:00
historical Move syndicate-monolithic to new historical directory. 2016-07-30 14:48:59 -04:00
hs Clarify use of LGPLv3 license. Closes #35. 2018-01-17 13:24:39 +00:00
imperative Switch adhoc-assertions to a bag (from a set). 2018-04-27 09:59:03 +01:00
js Repair syndicate/js just like commit 1fa5167 repaired syndicate/rkt. 2018-03-27 22:21:14 +13:00
racket Test case showing correct behaviour for old implementation 2018-04-25 20:08:07 +01:00
LICENSE Clarify use of LGPLv3 license. Closes #35. 2018-01-17 13:24:39 +00:00
README.md Clarify use of LGPLv3 license. Closes #35. 2018-01-17 13:24:39 +00:00

README.md

Syndicate: A Networked, Concurrent, Functional Programming Language

Syndicate is an actor-based concurrent language able to express 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.

Collaborating actors are grouped within task-specific networks (a.k.a. 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.

Syndicate makes presence notifications an integral part of pub/sub through its shared dataspaces, akin to tuplespaces. Each shared dataspace doubles as the pub/sub subscription table for its network. 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, both within a single network and across nested layers of networks-within-networks. Programs can give up responsibility for maintaining shared state and for scoping group communications, letting their containing network take on those burdens.

Contents

This repository contains

  • a Racket implementation of Syndicate (plus auxiliary modules) in racket/syndicate/

  • an ECMAScript 5 implementation of Syndicate in js/

  • larger example programs:

    • examples/platformer, a 2D Platform game written in Syndicate for Racket.

    • 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.

  • a sketch of a Haskell implementation of the core routing structures of Syndicate in hs/

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/>.