Just tossing this out here in case anyone wants to tackle it.
It should be very easy to make
dyn SubTrait be a subtype of
dyn SuperTrait where SuperTrait is the only non-marker trait that SubTrait extends (it single-inherits from it, ignoring markers).
When this happens we can layout the vtable of SubTrait so that the SuperTrait vtable is a prefix of it, meaning no runtime coercions are required. I wouldn’t be surprised if this already worked by accident, since that’s the obvious way to layout vtables anyway.
I have been told that previous attempts at trait subtyping were always more ambitious than this and subsequently got bogged down in details. But this should be completely compatible with any future extensions without too much work.
It does lock us into guaranteeing that property of vtable layout but that seems fine?