add lowtagref
This materialised the proposal of low tagged reference (as lowtagref
) in Issue #2. It is a more lightweight tagged reference than tagref64
. GHC-Mu is a potential user of this type.
I am not sure about two things, please leave comments or make edits if necessary:
- Is
lowtagref
optional? (tagref64
is) - Should we have a fixed tag length (I assume a fixed
int<3>
tag when I draft the part)? An alternative is that we leave this as implementation dependent, which may be 3/4/5. I guess 3 bits tagging is reasonable as it is the default alignment for a reference type.
As for implementation, it requires GC to distinguish non-ref, ref
, tagref64
and lowtagref
for each struct field. But as we already need to distinguish the former 3, this doesn't add space overhead for object metadata.