Use another indirection for representation of promises.
authorTaylor R Campbell <campbell@mumble.net>
Thu, 3 Jan 2019 07:17:32 +0000 (07:17 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Fri, 4 Jan 2019 07:08:14 +0000 (07:08 +0000)
commit4e246161076d4a2e3f9ff5f9e72dcca30a8013e5
tree076b4d1ae35ba98b5a8495913cbbba0c443e4a87
parent1a3496b8c7f7fcd61cc34c13a5f8f3e3f8ed5f86
Use another indirection for representation of promises.

The pairs never change, so merely loading the pair object from the
cell indirection gives us an atomic snapshot of it.  This way, there
is no need for without-interrupts in promise-forced?.

This makes each promise cost one more word (previously: one word to
represent plus three words of heap space; now one word to represent
plus four words of heap space), but reducing without-interrupts is a
big win -- this halves the time of test-promise.scm on my machine.

Of course, on a parallel system, the without-interrupts in %force is
still not enough (and we'll need the cell-contentses to be
load-acquire operations, not just loads).
src/runtime/boot.scm