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.

Paolo

Reply via email to