69a8893da3
This is used when relaying: because we don't have access to the full term, but only the projection results, we are inserting various `(discard)`s. This is the cause of the failure in `test/core/nesting-confusion.rkt`. By adding `restriction-path`, we allow the inner dataspace to avoid showing a reconstructed term to endpoints that might be able to observe the reconstructed parts. An alternative implementation approach is to generalize patterns in the inner relay actor, translating all `(discard)`s into captures, which would give us all the relevant terms that we need. The way I've chosen to go (or at least, to try out) allows us to potentially keep the "efficient" idea of just transmitting pattern-bound values across some network link connecting dataspaces. The alternative would require transmission of the full assertions, eliding no irrelevant detail. |
||
---|---|---|
.. | ||
drivers | ||
examples | ||
test | ||
.gitignore | ||
Makefile | ||
README.md | ||
assertions.rkt | ||
bag.rkt | ||
dataspace.rkt | ||
event-expander.rkt | ||
ground.rkt | ||
info.rkt | ||
lang.rkt | ||
main.rkt | ||
pattern.rkt | ||
prototype.rkt | ||
relay.rkt | ||
skeleton.rkt | ||
syntax-classes.rkt | ||
syntax.rkt | ||
term.rkt | ||
test-implementation.rkt |
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.