Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tonyg/syndicate
syn·di·cate: a language for interactive programs
https://github.com/tonyg/syndicate
actor-model dataspace javascript pubsub racket tuplespace
Last synced: 11 days ago
JSON representation
syn·di·cate: a language for interactive programs
- Host: GitHub
- URL: https://github.com/tonyg/syndicate
- Owner: tonyg
- License: lgpl-3.0
- Created: 2015-03-04T16:16:42.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-07-19T02:35:40.000Z (4 months ago)
- Last Synced: 2024-10-22T21:12:53.545Z (19 days ago)
- Topics: actor-model, dataspace, javascript, pubsub, racket, tuplespace
- Language: Racket
- Homepage: http://syndicate-lang.org/
- Size: 10.4 MB
- Stars: 152
- Watchers: 12
- Forks: 11
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-racket-and-scheme - syndicate
README
# 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](https://en.wikipedia.org/wiki/Tuple_space). 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](http://racket-lang.org/) implementation of Syndicate
(plus auxiliary modules) in `racket/syndicate/`- an
[ECMAScript 5](http://www.ecma-international.org/publications/standards/Ecma-262.htm)
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 and License
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 .