Racket implementation of Dataspaces and Syndicate.
Find a file
2024-06-12 12:30:35 +02:00
git-hooks Switch to fixcopyright package 2023-01-17 11:48:01 +01:00
historical Happy new year 2024-03-10 12:43:06 +01:00
syndicate Use after-seconds in supervise.rkt 2024-05-27 16:00:34 +02:00
syndicate-examples Allow CHAT_PORT to override chat.rkt example default port 2024-06-12 12:30:35 +02:00
syndicate-msd Happy new year 2024-03-10 12:43:06 +01:00
.gitignore Rearrange for independent packages. 2020-04-27 20:27:48 +02:00
COPYING Added license header to each source code file 2021-06-04 11:13:49 +02:00
COPYING.LESSER Added license header to each source code file 2021-06-04 11:13:49 +02:00
Makefile PROTOCOLS_BRANCH 2023-02-08 19:39:40 +01:00
README.md Update README 2022-05-17 13:45:34 +02:00
setup.sh Automate SPDX header maintenance 2021-06-04 15:55:28 +02:00

Third Racket implementation of Syndicate

Quickstart

git clone https://git.syndicate-lang.org/syndicate-lang/syndicate-rkt
cd syndicate-rkt
make link

For more detail, see below.

The language itself

This repository contains a Racket implementation of Syndicate, which includes

New design, new implementation

This implementation of Syndicate is based on the Syndicated Actor Model, a design that takes the language-level constructs of facets, capabilities denoting objects, and dataflow fields to heart. The implementation integrates these ideas into a facet- and assertion-oriented actor implementation and a capability-aware dataspace implementation.

It gains a significant performance advantage (10-30x speedup!) over 2017-era dataspace implementations by representing patterns over assertions in a new way, and a smaller but not insignificant advantage over 2019-era implementations by switching to a simpler and more general actor implementation.

The dataspace implementation techniques herein are the subject of a forthcoming paper. The prototype that embodies the new idea is in historical/prototype.rkt, and syndicate/HOWITWORKS.md describes the approach via prose.

All the drivers end up looking much nicer with this new implementation. The previously-separate GL-2D support is now integrated as just another driver (though the timing characteristics of the old implementation are not precisely preserved). The connection to the surrounding Racket environment is also much cleaner.

Compiling and running the code

You will need Racket version 8.1 or later.

Once you have Racket installed, run

raco pkg install --link syndicate

from the root directory of the Git checkout to install the package from a local snapshot. This will make #lang syndicate available to programs.

Repeat the process with syndicate-examples in place of syndicate to install the examples as well.

Alternatively, make link from the root directory of the Git checkout installs both packages from the local copy.

Running the tests

The implementation test suite lives in syndicate/test/. Run it with:

raco setup syndicate; raco test -p syndicate

Distribution

License

This program is distributed under the terms of the LGPLv3 license or any later version.

Documentation is distributed under the terms of the CC BY 4.0 license.

Authors

  • Tony Garnock-Jones

Contributors

Contributors can be found by inspecting the history of the source control repository.

How to contribute

As contributor, you retain the copyright of your work, but it must be distributed using the same license as this software. For minor patches like bug fixes, typo corrections, or improvements to the documentation, this will be implicit, and will be documented in the history of the source control repository. In case of major contributions, you must also update the header of the modified source code files, specifying something like this:

SPDX-License-Identifier: LGPL-3.0-or-later
Copyright (C) 2019-2021 Previous Author <some.email@example.net>
Copyright (C) YYYY-YYYY New Contributor <some.email@example.net>