4c0e291658
during/spawn used not to add linkage assertions to its initial-assertion set. In addition, if a spawned actor died in its initial boot procedure, its initial assertions would never be visible. These two problems interlocked to cause a space leak in during/spawn, where monitoring facets would never be cleaned up. This change does two things: - adds linkage assertions to the initial-assertion set in during/spawn - properly briefly signals initial-assertions even when a new actor immediately crashes. Together, these repair the space leak in during/spawn with a crashy child startup procedure. |
||
---|---|---|
.. | ||
drivers | ||
examples | ||
mc | ||
test | ||
.gitignore | ||
HOWITWORKS.md | ||
Makefile | ||
README.md | ||
assertions.rkt | ||
bag.rkt | ||
dataspace.rkt | ||
event-expander.rkt | ||
ground.rkt | ||
info.rkt | ||
lang.rkt | ||
main.rkt | ||
pattern-expander.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.