Paolo Bonzini <pbonz...@redhat.com> writes: > On 14/12/2016 18:47, Markus Armbruster wrote: >> Paolo Bonzini <pbonz...@redhat.com> writes: >> >>> On 14/12/2016 14:48, Eduardo Habkost wrote: >>>>> How do you find all abstract TypeInfo in the source? The uninitiated >>>>> might grep for .abstract = true, and be misled. The initiated will be >>>>> annoyed instead, because grepping for *absence* of .instance_size = is >>>>> bothersome. >>>>> >>>>> I suspect life could be easier going forward if we instead required >>>>> .abstract = true for interfaces, and enforced it with >>>>> assert(ti->instance_size || ti->abstract) here. >>>> I was doing that before deciding to change type_initialize(). I >>>> think I still have the commit in my git reflog, I will recover it >>>> and submit it as v3. >>> >>> I think it's worse. >>> >>> Interfaces are abstract by definition. Requiring ".abstract = true" >>> makes things less intuitive. v2 seems good. >> >> What makes a TypeInfo declaration an interface? Whatever it is, it >> better be *locally* obvious. > > The fact that the superclass is an interface: > > 1) most interface names are (or should be) "interfacey". Compare > device, memory backend, console (all classes) with user-creatable, fw > path provider, hotplug handler. A few others simply end with "_IF". Of > course naming is the hardest problem in computer science so there are > some interfaces whose name might apply just as well to a class (stream > slave, ISA DMA). However... > > 2) ... currently we don't have a single case of an interface that > doesn't inherit from TYPE_INTERFACE, so all interfaces are declared with > ".parent = TYPE_INTERFACE". That does make a TypeInfo obviously an > interface. > > If we ever have a case of interface inheritance, the supertype had > better have a good name.
I see. The choice is between a complex default for .abstract that permits us to elide .abstract = true for interface types, and a simple default that requires us to spell it out explicitly. Given that we have the grand total of thirteen interface types, I prefer simple & explicit. Thirteen obvious .abstract = true are less of a mental burden than a complex default. Even 25 would be for me.