Refactor record layout following a suggestion from Taylor.
authorChris Hanson <org/chris-hanson/cph>
Sun, 22 Sep 2019 05:54:01 +0000 (22:54 -0700)
committerChris Hanson <org/chris-hanson/cph>
Sun, 22 Sep 2019 05:54:01 +0000 (22:54 -0700)
commitae03333b1638c4eea10ff0535db8730ace13096d
treed3229d7a780fc406b661e0708446da042e96e89f
parente1aee03b0f85d80a317d8b8ab56acc9d5f16ebe3
Refactor record layout following a suggestion from Taylor.

New layout is identical for records that don't have a parent type.  For those
that do have a parent type, the layout is like this:

    root-marker
    root-fields
    sub1-marker
    sub1-fields
    sub2-marker
    sub2-fields
    ...

The primary advantage of this layout is to make the record predicate be constant
time, as opposed to the previous design in which it could be linear in the depth
of the parent chain.

In addition, a number of record operations have been bummed for slightly better
performance, and the layout of record types has been altered to keep track of
the type information in a way that's better organized for generating the record
operations.

There are some behavioral changes:

* This implementation is slightly incompatible with SRFI 131, since it prohibits
  a child from having a field name that's the same as one of its ancestors.
  I'll probably change this for compatibility.

* Only a root record type can have an applicability method, and that method is
  called for all sub-types of that root type.  Arguably this is reasonable
  behavior.

* Non-root fasdumpable records must have proxy markers for all of their
  component types.  Previously, only the record type stored in slot 0 needed to
  have a fasdumpable proxy.  This isn't an immediate issue since fasdumpable
  records are used very sparingly at the moment and probably won't be supported
  outside of the runtime system.
src/runtime/bundle.scm
src/runtime/bytevector-low.scm [new file with mode: 0644]
src/runtime/bytevector.scm
src/runtime/equals.scm
src/runtime/global.scm
src/runtime/list.scm
src/runtime/make.scm
src/runtime/msort.scm
src/runtime/record.scm
src/runtime/runtime.pkg
src/sos/recslot.scm