Description
@eddyb mentioned that there are plans to get rid of the integer allocation (NEVER_ALLOC_ID
). This is an attempt to summarize briefly what the plan is, and to document that such a plan exists. (I suppose the "refactor" label would make sense here?)
The idea is to change the "meaning" of the type Pointer
to "pointers that actually point somewhere in memory". Every operation that also works on pointers obtained from integers should use a different type. They could either use PrimVal
(but then these methods all have to handle undef
...), or a new type that factors the Pointer
and Bytes
cases out of PrimVal
, but cannot be Undef
.
ptr-to-int-cast and their inverse literally become a noop on the data side. There is no longer any need to perform "normalization" in binary_op
because all data now has a canonical representation. (The memory already does something like this, somewhat, by not adding any relocations when a pointer from the integer allocation is written to memory.)
Open questions:
- What about zero-sized types? We could either keep the ZST allocation, or make allocation return an integer when a ZST is allocated.
- Which name should the type that's either
Pointer
or just bytes have?PrimDefVal
? I'm not good with names...