Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Data packing #3
Some basic tests are finally passing so it seems like a good time to open a PR.
The premise is to get rid of the god-struct that held a pointer to each kind of Scheme value (string pointer, function pointer, even int pointer). This replace that giant struct with a 128-bit struct with 64-bit fields: a 64-bit header and a 64-bit data field. The lowest 8 bits refer to the type of the data value. Primitive values (for now: integers, bools, the empty list, [characters don't yet exist]) are stored in the 64-bit data field verbatim. Non-primitive values are stored as a pointer to the heap.
This is directly influence by the Chicken Scheme data representation. It differs in that there is only one kind of value struct and integers are only ever at least stored as 64-bit integers. But integer values will be at least twice as big as their Chicken Scheme counterparts.