[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-2.9 v2] qom: Make all interface types abstra
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH for-2.9 v2] qom: Make all interface types abstract |
Date: |
Mon, 19 Dec 2016 11:21:52 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Paolo Bonzini <address@hidden> writes:
> On 14/12/2016 18:47, Markus Armbruster wrote:
>> Paolo Bonzini <address@hidden> 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.