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:
- 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,
lowtagref for each struct field. But as we already need to distinguish the former 3, this doesn't add space overhead for object metadata.