Everytime a new road is constructed, a new bank of cells is
allocated and initialized. This lead to over three megabytes of
memory being allocated and accessed on each road change. This takes
more than 1ms to complete.
Road changes occur on each virtualization call. Each +soft happens
virtualized; so each +soft call incurs a 1ms delay. The metavase
machinery does at least two (and usually three) softs per card move
meaning sending a card move through arvo usually incurs a 3ms delay.
Before this patch, the following line took six seconds to execute.
Now it is imperceivable:
```
~:(turn (gulf 0 10.000) |=(a=@ud (mule |.(a))))
```
* release-candidate: (742 commits)
reap call sites before reaping the warm dashboard
refines -F argument handling
alphabetizes u3_opts and usage instructions
replaces -N (enable fake networking) with -L (disable networking)
removes the option to set -l, -n, and -r (raft options)
removes -X ("skip last event")
removes -M ("memory madness")
Use Ed25519 u3a_malloc in the ed25519 jet.
Fix README build instructions
properly zero-initialize u3_wcon linked-list pointer
removes second staging copy of compiler jets
[CI] Point to latest release-candidate arvo
De-duplicate dependency list
Make small stylistic improvements to crypto jets
meson v0.44.1
Use fetchGit instead of fetchTarball to get nixpkgs.
Revert change to libh2o for now -- Breaks the nix build, but unbreaks the normal build.
Minor Cleanup
Make list indentation consistent in Meson file.
Use latest urbit/argon2
...
if the warm dashboard is reaped before call sites, the activation
(and thus the label inside the activation) can be freed (during u3h_put)
while a call site in the junior still points to the label (but doesn't hold
a reference to it, since it is on a senior road). trying to take that label
during call site reap then results in a bail: foul.
the solution is to always reap call sites before reaping the warm dashboard.