public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Alexander Graf <agraf@suse.de>, Avi Kivity <avi@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>,
	kvm@vger.kernel.org
Subject: Re: [PATCH kvm-unit-tests 2/4] Introduce a C++ wrapper for the kvm APIs
Date: Mon, 29 Nov 2010 07:44:38 -0600	[thread overview]
Message-ID: <4CF3AE46.1050102@codemonkey.ws> (raw)
In-Reply-To: <20101129080421.GA25452@redhat.com>

On 11/29/2010 02:04 AM, Michael S. Tsirkin wrote:
> On Sun, Nov 28, 2010 at 05:13:41PM -0600, Anthony Liguori wrote:
>    
>> On 11/28/2010 04:28 PM, Michael S. Tsirkin wrote:
>>      
>>>        
>>>> But rather need to use ugly factory functions with all sorts of
>>>> DO_UPCAST.  This is really unfriendly especially for writing test
>>>> cases.
>>>>          
>>> Yes, I agree. Just moving memory allocation out of there
>>> will fix most of the ugliness.
>>>        
>> So here's a short list of things I've been working on that I don't
>> believe have nice implementations in C.
>>
>> 1) Factories with string based parameters with natural constructor
>> arguments.
>>      
> This was the only item, right?  So in fact, this is needed as part of
> configuration file/command line/monitor parser.
>    

I really see it more as an API interface.  I think the best long term 
architecture for QEMU is where qemu is launched as essentially a daemon 
and is manipulated via an RPC interface to create an initial device 
model, etc.

> IMHO, this really should be separate from the device model.
> The fact that qdev currently mixes the device model
> with argument parsing is bad IMO. So we ended up with
> saying
> .driver   = "PCI"
> in hw/pc_piix.c instead of an instance of the structure.
> There's no compile-time check that the correct string
> is used and that is pretty bad IMO.
>    

Indeed.

> Yes, this makes it easier to add new properties, but making it easy is
> exactly the wrong thing to do because we really have to support such
> properties forever.
>    

One advantage of having a factory and the objects in a single place is 
that the factory is the long term supported interface and the objects 
can evolve in a more natural fashion.

> So how about a compromise: libqemu written in C, with APIs that should
> not deal with string parsing at all, and should above all else make
> sense:
> 	i8254_init_drift_mode
> 	i8254_init_catchup
>
> 	net_set_link_up
> 	net_set_link_down
>
> (and it really needs to be C for portability: so that management
>   written in C can use it).
> This API should be properly versioned, with a backwards compatibility
> story, and we should be careful about adding interfaces there.
>
> On top of this you can have a management interface written in
> any other language, and have that deal with string parsing.
>    

I still dislike the idea of implementing an object system in C.  Besides 
reinventing vtables, we'll have to also reinvent RTTI to allow for safe 
upcasting (which is unavoidable).

But really, let's defer this discussion for when patches are available.  
I understand your objections but I'm pretty convinced that the code will 
speak for itself when it's ready.

Regards,

Anthony Liguori



  reply	other threads:[~2010-11-29 13:44 UTC|newest]

Thread overview: 130+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-24 10:52 [PATCH kvm-unit-tests 0/4] API test framework Avi Kivity
2010-11-24 10:52 ` [PATCH kvm-unit-tests 1/4] Makefile: add support for C++ Avi Kivity
2010-11-24 10:52 ` [PATCH kvm-unit-tests 2/4] Introduce a C++ wrapper for the kvm APIs Avi Kivity
2010-11-24 12:59   ` Alexander Graf
2010-11-24 13:33     ` Gleb Natapov
2010-11-24 14:18     ` Anthony Liguori
2010-11-24 14:24       ` Anthony Liguori
2010-11-24 14:32       ` Avi Kivity
2010-11-24 14:31     ` Avi Kivity
2010-11-24 14:41     ` Anthony Liguori
2010-11-24 15:40       ` Gleb Natapov
2010-11-24 15:50         ` Anthony Liguori
2010-11-24 16:10           ` Avi Kivity
2010-12-02 13:52             ` Mike Day
2010-11-24 16:12           ` [PATCH kvm-unit-tests 2/4] " Gleb Natapov
2010-11-24 16:14             ` Avi Kivity
2010-11-24 16:21               ` Gleb Natapov
2010-11-24 16:25                 ` Avi Kivity
2010-11-24 16:29                   ` Gleb Natapov
2010-11-24 16:33                     ` Avi Kivity
2010-11-24 16:52                       ` Gleb Natapov
2010-11-24 16:56                         ` Avi Kivity
2010-11-24 17:02                           ` Gleb Natapov
2010-11-24 17:07                             ` Avi Kivity
2010-11-24 17:10                               ` Jes Sorensen
2010-11-24 17:12                                 ` Avi Kivity
2010-11-24 17:14                               ` Anthony Liguori
2010-11-24 16:43                 ` Anthony Liguori
2010-11-24 16:48                   ` Gleb Natapov
2010-11-24 16:56                     ` Anthony Liguori
2010-11-24 17:04                       ` Gleb Natapov
2010-11-24 16:40             ` Anthony Liguori
2010-11-24 17:33               ` Gleb Natapov
2010-11-24 17:39                 ` Avi Kivity
2010-11-24 17:41                   ` Gleb Natapov
2010-11-24 17:50                     ` Avi Kivity
2010-11-24 18:23                       ` Gleb Natapov
2010-11-24 18:50                         ` Avi Kivity
2010-11-24 18:17                 ` Anthony Liguori
2010-11-24 18:34                   ` Gleb Natapov
2010-11-24 18:53                     ` Anthony Liguori
2010-11-25  8:35                       ` Gleb Natapov
2010-11-24 16:40           ` Jes Sorensen
2010-11-24 16:47             ` Avi Kivity
2010-11-24 16:51               ` Jes Sorensen
2010-11-24 16:57                 ` Anthony Liguori
2010-11-24 17:29                   ` Avi Kivity
2010-11-24 16:59                 ` Avi Kivity
2010-11-24 17:06                   ` Jes Sorensen
2010-11-24 17:11                     ` Avi Kivity
2010-11-24 17:17                       ` Jes Sorensen
2010-11-24 17:25                         ` Avi Kivity
2010-11-24 17:28                           ` Jes Sorensen
2010-11-24 17:31                             ` Avi Kivity
2010-11-24 17:36                           ` Gleb Natapov
2010-11-24 17:41                             ` Avi Kivity
2010-11-24 17:27                         ` Anthony Liguori
2010-11-24 17:35                           ` Avi Kivity
2010-11-24 17:36                           ` Jes Sorensen
2010-11-24 17:41                             ` Avi Kivity
2010-11-24 17:43                               ` Gleb Natapov
2010-11-24 17:50                                 ` Avi Kivity
2010-11-24 18:10                                   ` Gleb Natapov
2010-11-24 18:55                                     ` Avi Kivity
2010-11-24 19:29                                       ` Jes Sorensen
2010-11-24 19:33                                         ` Avi Kivity
2010-11-24 17:43                               ` Jes Sorensen
2010-11-24 17:51                                 ` Avi Kivity
2010-11-24 17:43                             ` Anthony Liguori
2010-11-24 17:45                               ` Jes Sorensen
2010-11-24 17:51                                 ` Avi Kivity
2010-11-24 18:01                                 ` Anthony Liguori
2010-11-24 18:56                                   ` Avi Kivity
2010-11-24 16:55               ` Gleb Natapov
2010-11-24 17:01                 ` Avi Kivity
2010-11-24 17:16                   ` Gleb Natapov
2010-11-24 17:26                     ` Avi Kivity
2010-11-24 16:53             ` Anthony Liguori
2010-11-24 17:03               ` Jes Sorensen
2010-11-28 12:27       ` Michael S. Tsirkin
2010-11-28 22:04         ` Anthony Liguori
2010-11-28 22:28           ` Michael S. Tsirkin
2010-11-28 23:13             ` Anthony Liguori
2010-11-29  8:04               ` Michael S. Tsirkin
2010-11-29 13:44                 ` Anthony Liguori [this message]
2010-11-29 13:48                   ` Avi Kivity
2010-11-24 16:29     ` Jes Sorensen
2010-11-24 16:34       ` Avi Kivity
2010-11-24 16:44         ` Jes Sorensen
2010-11-24 16:49           ` Avi Kivity
2010-11-28 11:59     ` Michael S. Tsirkin
2010-11-28 13:02       ` Avi Kivity
2010-11-28 13:57         ` Michael S. Tsirkin
2010-11-28 14:34           ` Avi Kivity
2010-11-28 16:57             ` Michael S. Tsirkin
2010-11-29  9:22               ` Avi Kivity
2010-11-29 10:47                 ` Michael S. Tsirkin
2010-11-29 10:52                   ` Avi Kivity
2010-11-29 11:26                     ` Michael S. Tsirkin
2010-11-29 13:38                       ` Anthony Liguori
2010-11-24 14:10   ` Anthony Liguori
2010-11-24 14:29     ` Avi Kivity
2010-11-24 14:45       ` Anthony Liguori
2010-11-24 14:53         ` Avi Kivity
2010-11-24 14:55           ` Anthony Liguori
2010-11-25 16:32       ` Avi Kivity
2010-11-26 10:16   ` Michael S. Tsirkin
     [not found]     ` <4CF0CB9A.5060403@redhat.com>
2010-11-28  8:58       ` Michael S. Tsirkin
2010-11-28  9:31         ` Avi Kivity
2010-11-28  9:50           ` Michael S. Tsirkin
2010-11-28  9:54             ` Avi Kivity
2010-11-28 11:44               ` Michael S. Tsirkin
2010-11-28 13:14                 ` Avi Kivity
2010-11-28 14:40                   ` Michael S. Tsirkin
2010-11-28 22:12                     ` Anthony Liguori
2010-11-29  9:30                     ` Avi Kivity
2010-11-28 11:49   ` Michael S. Tsirkin
2010-11-28 13:15     ` Avi Kivity
2010-11-28 14:49       ` Michael S. Tsirkin
2010-11-29  9:30         ` Avi Kivity
2010-11-24 10:52 ` [PATCH kvm-unit-tests 3/4] Add support for calling a function in guest mode Avi Kivity
2010-11-26 14:17   ` Michael S. Tsirkin
     [not found]     ` <4CF0CC26.8030407@redhat.com>
2010-11-28  8:59       ` Michael S. Tsirkin
2010-11-28  9:22         ` Avi Kivity
2010-11-24 10:52 ` [PATCH kvm-unit-tests 4/4] Add sample test using the api test harness Avi Kivity
2010-11-26 14:17   ` Michael S. Tsirkin
     [not found]     ` <4CF0CC4A.8070100@redhat.com>
2010-11-28  9:04       ` Michael S. Tsirkin
2010-11-28  9:21         ` Avi Kivity
2010-11-29 16:09 ` [PATCH kvm-unit-tests 0/4] API test framework Marcelo Tosatti
2010-12-01 10:38   ` Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CF3AE46.1050102@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=agraf@suse.de \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=mtosatti@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox