Update README

This commit is contained in:
Tony Garnock-Jones 2021-06-22 16:17:51 +02:00
parent c8f32f1910
commit ef8e205eb2
1 changed files with 31 additions and 33 deletions

View File

@ -1,12 +1,8 @@
# Second Racket implementation of Syndicate
# Third Racket implementation of Syndicate
## Quickstart
raco pkg install syndicate
or
git clone https://git.syndicate-lang.org/syndicate-lang/syndicate-rkt
git clone -b novy https://git.syndicate-lang.org/syndicate-lang/syndicate-rkt
cd syndicate-rkt
make link
@ -22,27 +18,31 @@ implementation of Syndicate, which includes
- a TCP echo server example, which listens for connections on port
5999 by default, in
[`syndicate-examples/echo.rkt`](syndicate-examples/echo.rkt).
[`syndicate-examples/tcp-echo-server.rkt`](syndicate-examples/tcp-echo-server.rkt).
Connect to it using, for example, `telnet localhost 5999`.
- a number of other examples both small and large, in
[`syndicate-examples/`](syndicate-examples/).
## New implementation
## New design, 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.
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 by doing so.
It gains a *significant* performance advantage (10-30x speedup!) over
[2017-era dataspace implementations](https://git.syndicate-lang.org/syndicate-lang/syndicate-2017/src/branch/main/racket)
by representing patterns over assertions in a
[new way](syndicate/HOWITWORKS.md), and a smaller but not
insignificant advantage over
[2019-era implementations](https://git.syndicate-lang.org/syndicate-lang/syndicate-rkt/src/branch/fruit)
by switching to a simpler and more general actor implementation.
Programs seem to be about *20x faster* (compared to the
[previous implementation](https://git.syndicate-lang.org/syndicate-lang/syndicate-2017/src/branch/main/racket)).
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
The dataspace implementation techniques herein are the subject of a
forthcoming paper. The prototype that embodies the new idea is in
[historical/prototype.rkt](historical/prototype.rkt), and
[syndicate/HOWITWORKS.md](syndicate/HOWITWORKS.md) describes the
approach via prose.
@ -50,30 +50,28 @@ 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](syndicate/ground.rkt) implementation is much cleaner.
of the old implementation are not precisely preserved). The connection
to the surrounding Racket environment is also 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:
<!-- 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
<!-- 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.
<!-- 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](https://github.com/racket/racket/issues/3132).)
You will need Racket version 8.1 or later.
Once you have Racket installed, run
raco pkg install syndicate
<!-- raco pkg install syndicate -->
to install the package from the Racket package repository, or
<!-- to install the package from the Racket package repository, or -->
raco pkg install --link syndicate