4 ms·
Systems for which pointers are not just integers have come and gone, sadly. Many mainframes had function pointers which were more like a struct than a pointer.
by mhh__ 4y ago
Systems for which pointers are not just integers have come and gone, sadly.
Many mainframes had function pointers which were more like a struct than a pointer.
- masklinn 4y agoTechnically that’s still pretty common on the software side, that’s what tagged pointers are. The ObjC/Swift runtime uses that for instance, the class pointer of an object also contains the refcount and a few flags.
- mhh__ 4y agoPointer tagging is still spiritually an integer (i.e. mask off the bits you guarantee the tags are in via alignment) versus (say) the pointer being multiple addresses into different bits of different types of memory and tags insert other stuff here.
- masklinn 4y ago> Pointer tagging is still spiritually an integer No, pointer tagging is spiritually a packed structure. That can be a simple union (as it is in ocaml IIRC) but it can be a lot more e.g. the objc “non-pointer isa” ended up with 5 flags (excluding raw isa discriminant) and two additional non-pointer members of 19 and 9 bits. You mask things on and off to unpack the structure into component the system will accept. Nothing precludes using tagged pointers to discriminate between kinds and locations.
- apaprocki 4y agoItanium function pointers worked like that, so it could have been the new normal if IA64 wasn’t so crazy on the whole.
- xxpor 4y agoA Raymond Chen post about the function pointer craziness: https://devblogs.microsoft.com/oldnewthing/20150731-00/?p=90771 https://devblogs.microsoft.com/oldnewthing/20150731-00/?p=90...