I'm looking through the keyhole at something new to me, so maybe this is off base, but looking at the inheritance hierarchy... FFIIntegerType FFIUint16 FFIUint16 FFIUInt32 FFIInt32 FFIUint64 FFIInt64 FFIUint8 FFIInt8 I'm curious... why the all the Ints inherit from the UInts? Each of those classes has the same two methods #basicHandle:at: and #basicHandle:at:put. So the Int subclasses fully override the superclass methods. So there in no inherited behaviour on the instance side. On the class side, I see #externalTypeSize is inherited by the Ints, but evaluating... FFIIntegerType allSubclasses collect: [ :class | class externalType byteSize -> class externalTypeSize ] produces... 4->4 2->2 4->4 8->8 1->1 2->2 4->4 8->8 1->1 So naively the extra inheritance level seems unnecessary and perhaps having... FFIIntegerType class >> externalTypeSize ^ self externalType byteSize would allow the hierarchy to be flattened. Maybe not a great benefit, except to avoid the next person wondering the same thing :P Also, it is surprising that that FFUInt64 uses #signedLongLongAt: rather than #unsignedLongLongAt: . This seems on-purpose rather than accidental since its inherited by FFIInt64, so it seems there is something interesting to learn here that would benefit a method comment. cheers -ben