Implementing something like subtyping does have a performance cost, alas, compared to if subtyping were natively supported: you have to store the field values in some kind of vector pointed at by one of the ‘real’ fields of a subtypeable record type, which is an extra indirection, extra allocation, extra memory usage, and a bounds check you can strictly do without. And while you’re at it, you *probably* stomp the compiler’s ability to optimize with compile-time record instantiation, sigh