Racket implementation of Dataspaces and Syndicate.
Go to file
Tony Garnock-Jones fe6430abfd Add :template 2021-06-02 12:50:21 +02:00
OLD-syndicate Work towards schema-to-pattern compiler 2021-06-02 12:37:36 +02:00
OLD-syndicate-examples Move the bulk of the existing implementation out of the way 2021-05-27 10:34:35 +02:00
historical Rearrange for independent packages. 2020-04-27 20:27:48 +02:00
syndicate Add :template 2021-06-02 12:50:21 +02:00
.gitignore Rearrange for independent packages. 2020-04-27 20:27:48 +02:00
LICENSE Clarify LICENSE situation, following syndicate-2017. 2021-06-01 09:57:28 +02:00
Makefile First steps to an actual novy implementation 2021-05-27 10:36:35 +02:00
README.md Clarify LICENSE situation, following syndicate-2017. 2021-06-01 09:57:28 +02:00

README.md

Second Racket implementation of Syndicate

Quickstart

raco pkg install syndicate

or

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 syndicate language, in the syndicate directory.

  • 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 syndicate-examples/.

New implementation

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 syndicate and syndicate-examples packages:

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 sprite-count in 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 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

Copyright © Tony Garnock-Jones 20102021.

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/>.