|Tony Garnock-Jones 452e29ff7f|
Second Racket implementation of Syndicate
raco pkg install syndicate
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
the implementation of the
#lang syndicatelanguage, in the
a TCP echo server example, which listens for connections on port 5999 by default, in
syndicate-examples/echo.rkt. Connect to it using, for example,
telnet localhost 5999.
a number of other examples both small and large, in
This is a reimplementation of Syndicate that takes the language-level constructs of facets, endpoints, and fields to heart, integrating knowledge of facets and endpoints into the dataspace implementation itself.
It gains a significant performance advantage by doing so.
Programs seem to be about 20x faster (compared to the previous implementation). Some are only 10x faster, some are 30x faster.
The 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 ground.rkt implementation is much cleaner.
To see the difference in speed, try out the "many Racket logos"
animation example/demo after installing the
racket -l syndicate-examples/gl-2d-many
Hopefully you'll get a smooth 60fps, though I admit I'm running it on
a fairly fast machine so you might need to drop the
the code a bit to sustain 60fps.
Compiling and running the code
You will need Racket version 7.6 or later. (If you're using Racket CS, you'll need version 7.8 or later because of this issue.)
Once you have Racket installed, run
raco pkg install syndicate
to install the package from the Racket package repository, or
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
Repeat the process with
syndicate-examples in place of
to install the examples as well.
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
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.
- Tony Garnock-Jones
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 <email@example.com> Copyright (C) YYYY-YYYY New Contributor <firstname.lastname@example.org>