@Serenitor It's different in many ways: * also changes semantics of == ("is it actually the same object" instead of "is this (other) object the same") * no dynamic dispatch is usable anyway unless {.inheritable.} is applied first * poorer performance due to dynamic heap allocation (and GC) * poorer performance due to memory fragmentation
Proof of the first thesis: type Person = ref object first, last: string let person1 = Person(first: "John", last: "Doe") let person2 = person1 # the very same object let person3 = Person(first: "John", last: "Doe") # essentially the same value echo person1 == person2 # true echo person1 == person3 # false I wouldn't be all-overjoyed with these Java-like == semantics...