qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC] Plan for moving forward with QOM


From: Anthony Liguori
Subject: Re: [Qemu-devel] [RFC] Plan for moving forward with QOM
Date: Thu, 15 Sep 2011 09:18:35 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110516 Lightning/1.0b2 Thunderbird/3.1.10

On 09/15/2011 08:54 AM, Peter Maydell wrote:
On 15 September 2011 14:35, Paolo Bonzini<address@hidden>  wrote:
It still holds, for two reasons.  1) The properties will be named
differently for ISA and PCI versions, which is at the very least ugly; 2) if
you want to save the property names for the ISA version, you need to
duplicate the logic in NE2000 and PCI_NE2000.

If we had C++ and templates, the problem would be much less pressing: just
use inheritance for PCI and template for ISA vs. PCI.  The code duplication
at least is invisible to the programmer, it's only in the object files.

Personally I think the right way to approach this sort of thing is going
to be to have some sort of special purpose language for declaring
devices (and their composition, wiring, interfaces, properties) which is
used to generate all the tedious boilerplate code. Actual interesting code
(corresponding roughly to "method bodies") stays as C functions in
standard C source files.

It's already the case with existing qdev that just instantiating and
setting the properties for a qdev device is sufficiently tedious
that we have lots of utility foo_create() functions scattered around
the codebase. I don't think QOM is going to be any better there.

More generally, I don't think we should let our conceptual model of
how devices are composed and connected be warped by whether you can
implement it with C-and-a-pile-of-macros or not.

I think there are two real discussions happening here. One is how to model and one is what is the right representation of that modelling.

I think Paolo is strongly advocating a non-OO model that uses the command pattern to establish most of the relationships. Maybe one level of inheritance is used just to provide the right infrastructure for the objects to have properties but that's inheritance for functionality verses modelling.

I'm advocating a strict OO model. I'm not normally a fan of OO based design but I think it fits a device model pretty well because it's such a concrete hierarchy. All of the objects we create really correspond to real world objects and the inheritance relationships are pretty darn obvious. When you're holding a PCI NE2000 card in your hand, there's simply no doubt that it is-a PciDevice.

And you can look at the PCB and see that it has-a NE2K chip on it.

Regards,

Anthony Liguori


-- PMM





reply via email to

[Prev in Thread] Current Thread [Next in Thread]