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 8546e93e5d Implement Syndicate/js broker-client and chat app.
Support capturing with a pattern in the Syndicate/js DSL: ($foo = bar())

Struct has been cleaned up, and now offers proper Javascript objects
for its prefab-like structures. These can serialize and deserialize
themselves to/from JSON. They behave like prefabs in that two
StructureTypes created with the same label and arity behave
identically wrt Dataspaces and Tries. Sadly, prefab field names had to
go in order to support this.

Facets now track and terminate their children upon termination. This
is experimental; I suspect it is required for nested durings.

DemandMatcher can now support multiple specs, but this is less useful
than you might think since it tracks supply and demand quite naively.
It would have to have (surprise, surprise!) a mux-like structure to do
the job properly!

Added WakeDetector to main.js; adding the broker client will have to
wait until it is turned into a proper module in the src/ directory.
2016-05-10 00:40:53 -04:00
examples Gitignore 2016-04-19 18:53:00 -04:00
hs Example of nontermination inputs. 2016-03-14 14:31:36 -04:00
js Implement Syndicate/js broker-client and chat app. 2016-05-10 00:40:53 -04:00
racket Get the broker working. 2016-05-10 00:25:50 -04:00
README.md Update readmes 2016-04-01 20:02:50 -04: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.