Shapes are essentially a tree data structure, where each node describes a property in an object, and most importantly, where that property will be stored in a flat object layout (the slot index associated with that property). In D, you get "constness all the way down", which means that I can't mutate the parent field, and I also can't mutate the object that the parent field points to. It's an issue in the other direction, too, because "constness all the way down" means that I can't have a class field that's immutable without also being forced to assume that the object pointed to by the field is entirely immutable.