syndicate-rkt/syndicate
Tony Garnock-Jones df6918bc6f Remove out-of-date example expansions 2019-06-21 16:43:24 +01:00
..
bin Move command-line scripts into submodule main, so tests don't get stuck 2019-05-09 11:43:34 +01:00
distributed On start, only relay subs with active holders 2019-06-20 22:54:59 +01:00
drivers Repair ws-recv usage; requires rfc6455 package v2.0 or newer 2019-05-22 23:45:15 +01:00
examples Command-line control of nickname in server-chat-client 2019-06-11 18:34:25 +01:00
mc add-observer-endpoint!, add-raw-observer-endpoint! 2019-05-04 22:58:45 +01:00
protocol Flow-controlled TCP (except in netstack); flow-controlled server/federation messages; fixes federation startup glitching 2019-05-12 13:07:38 +01:00
test Must be able to disable heartbeats for testing 2019-06-20 12:19:45 +01:00
.gitignore Tweak .gitignore 2018-04-29 14:54:22 +01:00
HOWITWORKS.md Remove out-of-date example expansions 2019-06-21 16:43:24 +01:00
Makefile Improve (?) test ergonomics. 2018-11-02 12:15:21 +00:00
README.md Notes on install and test 2018-05-03 15:21:33 +01:00
assertions.rkt strong-gensym 2019-03-24 17:16:57 +00:00
bag.rkt for/bag and for/bag/count 2018-05-03 22:09:13 +01:00
dataspace.rkt Supervision and reloading 2019-01-28 01:14:33 +00:00
distributed.rkt The Great Renaming broker -> server, part 2 2019-05-05 16:51:23 +01:00
event-expander.rkt Progress on syntax veneer 2018-04-08 11:44:32 +01:00
ground.rkt extend-ground-boot! 2019-03-20 22:36:05 +00:00
info.rkt Command-line programs for starting various kinds of server 2019-05-09 11:39:49 +01:00
lang.rkt Steps toward activation in test cases 2019-03-25 12:15:09 +00:00
main.rkt Factor out assertion structure definitions 2018-05-03 16:14:30 +01:00
pattern-expander.rkt pattern-expander.rkt 2018-05-04 23:15:09 +01:00
pattern.rkt Silly mistake 2018-11-02 15:09:20 +00:00
prototype.rkt Rearrange 2018-03-27 22:21:49 +13:00
reassert.rkt tcp-rejected; reassert-on 2019-03-18 23:27:59 +00:00
reflection.rkt Supervision and reloading 2019-01-28 01:14:33 +00:00
relay.rkt add-observer-endpoint!, add-raw-observer-endpoint! 2019-05-04 22:58:45 +01:00
reload.rkt module+ main in reload.rkt 2019-03-20 22:36:13 +00:00
skeleton.rkt Partial repair for a deep problem with visibility-restriction. 2019-06-18 17:56:09 +01:00
supervise.rkt Supervision and reloading 2019-01-28 01:14:33 +00:00
syntax-classes.rkt Add timer/timestate support; this prompted a change to endpoint registration. 2018-04-29 22:27:55 +01:00
syntax.rkt add-observer-endpoint!, add-raw-observer-endpoint! 2019-05-04 22:58:45 +01:00
term.rkt Remove unneeded #:capture-projection argument to term->skeleton-interest 2019-05-03 20:29:40 +01:00
test-implementation.rkt Steps toward activation in test cases 2019-03-25 12:15:09 +00:00

README.md

New "Imperative" Syndicate Implementation

This experimental reimplementation of Syndicate takes the language-level constructs of facets, endpoints, and fields to heart, and integrates 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. Some are only 10x faster, some are 30x faster.

The prototype that embodies the new idea is in prototype.rkt.

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.

Install the package by getting a Git checkout and running

raco pkg install --link -n imperative-syndicate `pwd`

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

raco setup imperative-syndicate; raco test -p imperative-syndicate

Try out the "many Racket logos" animation example/demo:

racket examples/gl-2d-many.rkt

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.