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 4c0e291658 Repair longstanding, subtle bug in both old- and new-syndicate.
during/spawn used not to add linkage assertions to its
initial-assertion set. In addition, if a spawned actor died in its
initial boot procedure, its initial assertions would never be visible.
These two problems interlocked to cause a space leak in during/spawn,
where monitoring facets would never be cleaned up.

This change does two things:
 - adds linkage assertions to the initial-assertion set in during/spawn
 - properly briefly signals initial-assertions even when a new actor
   immediately crashes.

Together, these repair the space leak in during/spawn with a crashy
child startup procedure.
2018-11-04 13:43:17 +00:00
doc More minor fixes 2016-05-13 20:50:20 -04:00
examples Merge branch 'master' into imperative 2018-07-30 19:39:41 +01: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 Repair longstanding, subtle bug in both old- and new-syndicate. 2018-11-04 13:43:17 +00:00
js The problem specifies 10 elves 2018-10-24 14:29:10 +01:00
racket Repair longstanding, subtle bug in both old- and new-syndicate. 2018-11-04 13:43:17 +00: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/>.