[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH 3/8] Add QBuffer
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] Re: [PATCH 3/8] Add QBuffer |
Date: |
Mon, 17 May 2010 09:40:45 +0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 |
Avi Kivity wrote:
> On 05/17/2010 03:12 AM, Anthony Liguori wrote:
>> On Sun, May 16, 2010 at 12:38 PM, Jamie Lokier<address@hidden>
>> wrote:
>>
>>> Anthony Liguori wrote:
>>>
>>>> Instead of encoding just as a string, it would be a good idea to encode
>>>> it as something like:
>>>>
>>>> {'__class__': 'base64', 'data': ...}
>>>>
>>> Is there a benefit to the class indirection, over simply a keyword?:
>>>
>>> {'__base64__': ...}
>>>
>>> __class__ seems to suggest much more than it's being used for here.
>>>
>> Yes. The problem with JSON is that it's based on JavaScript and
>> JavaScript is goofy :-)
>>
>>
>
> I suggest completely ignoring JavaScript. JSON is simply an encoding
> for numbers, strings, arrays, and key-value stores. Where's the goofiness?
>
>> JavaScript's object mechanism doesn't map well to most other languages
>> since it's prototype based. What we're calling QDict's are really
>> objects in JavaScript and they carry mostly no type information. With
>> JS, it's very simple to treat a generic object as a specialized class
>> after instantiation which means objects don't need type information.
>>
>> For non-prototype languages, which is the vast majority of clients,
>> it's necessary to have type information at instantiation time since
>> monkey patching is awkward at best. That's why we need a special,
>> reserved, object member to carry type information. The remainder of
>> the object members represent the serialized state of the object.
>>
>
> The alternative is to have a schema. Sun RPC/XDR doesn't carry any type
> information (you can't even distinguish between a number and text) yet C
> clients have to problem extracting typed information from it.
>
> Having __class__ everywhere means we're carrying the schema in every
> message instead of just once.
The device_show command is already an example where you don't have a
predefined schema. It is derived from the data stream the encodes the
vmstate fields. So far we have no collision between base64-encoded
buffers and real strings, but this may actually change when we start
annotating the fields with symbolic constants.
I really don't see the problem with __class__. Being a text protocol,
JSON is already fairly verbose.
Jan
--
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, (continued)
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Jan Kiszka, 2010/05/16
- Re: [Qemu-devel] [PATCH 3/8] Add QBuffer, Jamie Lokier, 2010/05/16
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Jan Kiszka, 2010/05/16
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Jamie Lokier, 2010/05/17
- Re: [Qemu-devel] [PATCH 3/8] Add QBuffer, Anthony Liguori, 2010/05/16
- Re: [Qemu-devel] [PATCH 3/8] Add QBuffer, Avi Kivity, 2010/05/17
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer,
Jan Kiszka <=
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Avi Kivity, 2010/05/17
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Jan Kiszka, 2010/05/17
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Avi Kivity, 2010/05/17
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Avi Kivity, 2010/05/17
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Jan Kiszka, 2010/05/17
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Avi Kivity, 2010/05/17
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Jan Kiszka, 2010/05/17
- [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Avi Kivity, 2010/05/17
- Re: [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Markus Armbruster, 2010/05/18
- Re: [Qemu-devel] Re: [PATCH 3/8] Add QBuffer, Avi Kivity, 2010/05/18