From ef8e205eb2ae66678c5c8d647699463b9f4d96f0 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 22 Jun 2021 16:17:51 +0200 Subject: [PATCH] Update README --- README.md | 64 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 55199be..b3876d9 100644 --- a/README.md +++ b/README.md @@ -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: + + + - 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](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 + -to install the package from the Racket package repository, or + raco pkg install --link syndicate