From: Jamie Lokier <jamie@shareable.org>
To: Filip Navara <filip.navara@gmail.com>
Cc: ehabkost@redhat.com, jan.kiszka@siemens.com, dlaor@redhat.com,
qemu-devel@nongnu.org, Luiz Capitulino <lcapitulino@redhat.com>,
Avi Kivity <avi@redhat.com>, Vincent Hanquez <tab@snarc.org>
Subject: Re: [Qemu-devel] [PATCH 01/11] QMP: Introduce specification file
Date: Wed, 24 Jun 2009 19:41:58 +0100 [thread overview]
Message-ID: <20090624184158.GN14121@shareable.org> (raw)
In-Reply-To: <5b31733c0906241123w14dde78dk670ff8f5f83f4c97@mail.gmail.com>
> On Wed, Jun 24, 2009 at 7:39 PM, Vincent Hanquez<tab@snarc.org> wrote:
> > On Wed, Jun 24, 2009 at 05:22:07PM +0100, Jamie Lokier wrote:
> >> You can code a minimal XML parser in straight C quite easily, if it's
> >> a restricted subset.
> >
> > even the restricted subset is not as straighforward as a json parser. and
> > usually using a subset means you can't interact correctly with the one that
> > does the full spec.
> >
> >> XML and JSON both have the same ugly problem with binary data: they
> >> can't carry it. It's usually base64 encoded. Then again the QEMU
> >> monitor is no better this respect :-)
> >
> > JSon ***DOES*** do binary data.
> >
> > C String "abc\0\xff" -> Json String "abc\0000\00ff"
Any reason you can't simply put the UTF-8 encoding of U+0000 and
U+00FF directly in the string?
(Let's ignore Java, which encodes U+0000 in "Java-UTF-8" differently
from everyone else's UTF-8!)
Filip Navara wrote:
> I find the Json representation problematic. In C you have two distinct
> data types - null-terminated string where the length is implicitly
> known from the content (char *string) and a binary data blob (char
> *buffer, int size). If you encode them into the same JSON data type
> and don't supply "out-of-band" information about which one of the C
> types is it, the receiver has no way to decide what to decode it into.
> JSONRPC allows supplying this "out-of-band" information only for the
> JSON data types which is very limiting.
>
> For text based protocols it's vital to separate the syntax from
> semantics and decoding the above would require knowning the specific
> context and semantics.
>
> A more natural representation of binary blob in JSON would be array of
> numbers, but that would have a big overhead.
Actually, an array doesn't add much more overhead :-)
Binary has a big overhead in JSON as a string.
Encode the blob [0,1,2,3,252,253,254,255]:
JSON: "\0\1\2\3\xfc\xfd\xfe\xff"
That's fine if you've just got a few non-ASCII bytes. But for general
binary, base64 is much more compact.
Base64 expands by about 4/3, whereas a JSON \x-encoded string expands
by up to 4 times. Even a hex string is more compact :-)
A further complication is that a JSON string carries Unicode (which is
good for text), so at some point you have to know to signal a parse
error when any characters are outside the range 0-255.
But I don't know why we're talking about binary, as the monitor (old
or proposed) doesn't handle binary either, and no particular need for
binary has come up...
-- Jamie
next prev parent reply other threads:[~2009-06-24 18:42 UTC|newest]
Thread overview: 199+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1245730845.git.lcapitulino@redhat.com>
2009-06-23 4:28 ` [Qemu-devel] [PATCH 01/11] QMP: Introduce specification file Luiz Capitulino
2009-06-23 8:55 ` [Qemu-devel] " Avi Kivity
2009-06-23 9:57 ` Daniel P. Berrange
2009-06-23 10:08 ` Avi Kivity
2009-06-23 13:22 ` Luiz Capitulino
2009-06-23 13:31 ` Avi Kivity
2009-06-23 13:06 ` Luiz Capitulino
2009-06-23 13:10 ` Daniel P. Berrange
2009-06-23 17:12 ` Luiz Capitulino
2009-06-23 13:27 ` Avi Kivity
2009-06-23 17:15 ` Luiz Capitulino
2009-06-23 13:12 ` Anthony Liguori
2009-06-23 13:30 ` Avi Kivity
2009-06-23 13:34 ` Eduardo Habkost
2009-06-23 13:40 ` Anthony Liguori
2009-06-23 15:01 ` Avi Kivity
2009-06-23 15:47 ` Anthony Liguori
2009-06-23 16:02 ` Avi Kivity
2009-06-23 17:20 ` Luiz Capitulino
2009-06-23 14:45 ` [Qemu-devel] " Vincent Hanquez
2009-06-23 15:56 ` Avi Kivity
2009-06-23 15:56 ` Anthony Liguori
2009-06-23 16:04 ` Avi Kivity
2009-06-23 16:09 ` Anthony Liguori
2009-06-23 16:15 ` Avi Kivity
2009-06-23 18:32 ` Anthony Liguori
2009-06-23 18:47 ` Avi Kivity
2009-06-23 19:00 ` Anthony Liguori
2009-06-23 19:44 ` Avi Kivity
2009-06-23 19:52 ` Avi Kivity
2009-06-23 20:07 ` Anthony Liguori
2009-06-23 20:13 ` Avi Kivity
2009-06-23 22:02 ` Anthony Liguori
2009-06-23 22:02 ` Vincent Hanquez
2009-06-23 22:50 ` Anthony Liguori
2009-06-24 1:01 ` Vincent Hanquez
2009-06-24 11:55 ` James
2009-06-24 12:09 ` Daniel P. Berrange
2009-06-24 12:32 ` James
2009-06-24 12:54 ` Daniel P. Berrange
2009-06-24 14:31 ` Stefano Stabellini
2009-06-24 12:46 ` Anthony Liguori
2009-06-24 13:02 ` Daniel P. Berrange
2009-06-24 13:21 ` Avi Kivity
2009-06-24 13:09 ` Avi Kivity
2009-06-24 16:22 ` Jamie Lokier
2009-06-24 16:25 ` Avi Kivity
2009-06-24 18:52 ` Jamie Lokier
2009-06-24 17:39 ` Vincent Hanquez
2009-06-24 18:23 ` Filip Navara
2009-06-24 18:41 ` Jamie Lokier [this message]
2009-06-24 18:42 ` Vincent Hanquez
2009-06-24 18:55 ` Filip Navara
2009-06-24 18:56 ` Jamie Lokier
2009-06-24 13:34 ` Ian Jackson
2009-06-24 16:09 ` Jamie Lokier
2009-06-24 14:03 ` Filip Navara
2009-06-25 19:30 ` Luiz Capitulino
2009-06-24 14:06 ` Vincent Hanquez
2009-06-24 14:41 ` Stefano Stabellini
2009-06-24 14:56 ` Chris Webb
2009-06-24 19:01 ` Jamie Lokier
2009-06-24 15:57 ` Filip Navara
2009-06-24 16:22 ` Avi Kivity
2009-06-24 16:42 ` Filip Navara
2009-06-24 19:05 ` Jamie Lokier
2009-06-24 19:24 ` Filip Navara
2009-06-24 21:13 ` Jamie Lokier
2009-06-24 21:29 ` Filip Navara
2009-06-24 21:47 ` Jamie Lokier
2009-06-25 13:07 ` Stefano Stabellini
2009-06-25 14:55 ` Avi Kivity
2009-06-25 15:10 ` Anthony Liguori
2009-06-25 15:20 ` Avi Kivity
2009-06-25 17:04 ` Stefano Stabellini
2009-06-25 18:10 ` Anthony Liguori
2009-06-25 19:03 ` Daniel P. Berrange
2009-06-26 9:00 ` Avi Kivity
2009-06-26 9:10 ` Daniel P. Berrange
2009-06-26 9:16 ` Avi Kivity
2009-06-26 9:44 ` Daniel P. Berrange
2009-06-26 11:41 ` Vincent Hanquez
2009-06-25 18:09 ` Anthony Liguori
2009-06-25 18:31 ` Avi Kivity
2009-06-25 19:54 ` Anthony Liguori
2009-06-26 9:12 ` Avi Kivity
2009-06-26 13:21 ` Anthony Liguori
2009-06-26 15:02 ` Anthony Liguori
2009-06-26 17:36 ` Filip Navara
2009-06-26 19:36 ` Anthony Liguori
2009-06-26 20:25 ` Filip Navara
2009-06-28 13:16 ` Avi Kivity
2009-06-28 17:30 ` Anthony Liguori
2009-06-28 17:36 ` Avi Kivity
2009-06-29 9:44 ` Stefano Stabellini
2009-06-29 9:50 ` Avi Kivity
2009-06-29 10:09 ` Stefano Stabellini
2009-06-27 7:03 ` Filip Navara
2009-06-28 12:11 ` Avi Kivity
2009-06-28 13:13 ` Avi Kivity
2009-06-28 17:23 ` Anthony Liguori
2009-06-28 17:34 ` Avi Kivity
2009-06-29 0:42 ` Anthony Liguori
2009-06-29 6:04 ` Avi Kivity
2009-06-29 9:48 ` Stefano Stabellini
2009-06-29 20:23 ` Anthony Liguori
2009-06-30 5:37 ` Avi Kivity
2009-06-30 13:30 ` Anthony Liguori
2009-06-30 13:51 ` Stefano Stabellini
2009-06-30 13:52 ` Avi Kivity
2009-06-30 13:56 ` Anthony Liguori
2009-06-30 14:03 ` Luiz Capitulino
2009-06-30 16:05 ` Avi Kivity
2009-06-30 18:21 ` Anthony Liguori
2009-07-01 8:07 ` Avi Kivity
2009-06-29 14:41 ` Stefano Stabellini
2009-06-29 14:56 ` Avi Kivity
2009-06-28 17:38 ` Filip Navara
2009-06-26 11:36 ` Vincent Hanquez
2009-06-24 16:00 ` Jamie Lokier
2009-06-23 16:20 ` Avi Kivity
2009-06-23 17:59 ` Vincent Hanquez
2009-06-23 15:41 ` Blue Swirl
2009-06-23 4:28 ` [Qemu-devel] [PATCH 02/11] QMP: Introduce MONITOR_USE_CONTROL flag Luiz Capitulino
2009-06-23 4:28 ` [Qemu-devel] [PATCH 03/11] QMP: Introduce protocol print functions Luiz Capitulino
2009-06-23 13:45 ` Anthony Liguori
2009-06-23 13:53 ` Eduardo Habkost
2009-06-23 4:28 ` [Qemu-devel] [PATCH 04/11] QMP: Make monitor_handle_command() QMP aware Luiz Capitulino
2009-06-23 13:51 ` Anthony Liguori
2009-06-23 17:25 ` Luiz Capitulino
2009-06-23 4:29 ` [Qemu-devel] [PATCH 05/11] QMP: Introduce control mode chardev handling Luiz Capitulino
2009-06-23 4:29 ` [Qemu-devel] [PATCH 06/11] QMP: Introduce asynchronous events infrastructure Luiz Capitulino
2009-06-23 8:59 ` [Qemu-devel] " Jan Kiszka
2009-06-23 13:31 ` Luiz Capitulino
2009-06-23 10:08 ` Daniel P. Berrange
2009-06-23 10:11 ` Avi Kivity
2009-06-23 14:46 ` Paul Brook
2009-06-23 10:32 ` Daniel P. Berrange
2009-06-23 11:23 ` Avi Kivity
2009-06-23 13:36 ` Luiz Capitulino
2009-06-23 13:48 ` Eduardo Habkost
2009-06-23 13:51 ` Jan Kiszka
2009-06-23 16:34 ` Avi Kivity
2009-06-23 16:47 ` Daniel P. Berrange
2009-06-23 4:29 ` [Qemu-devel] [PATCH 07/11] QMP: Enable simple commands Luiz Capitulino
2009-06-23 4:29 ` [Qemu-devel] [PATCH 08/11] QMP: Port balloon command Luiz Capitulino
2009-06-23 9:42 ` [Qemu-devel] " Avi Kivity
2009-06-23 13:59 ` Anthony Liguori
2009-06-23 16:36 ` Avi Kivity
2009-06-23 16:58 ` Anthony Liguori
2009-06-23 16:59 ` Luiz Capitulino
2009-06-23 18:38 ` Anthony Liguori
2009-06-25 11:27 ` Dor Laor
2009-06-25 19:11 ` Luiz Capitulino
2009-06-26 9:21 ` Avi Kivity
2009-06-26 9:42 ` Daniel P. Berrange
2009-06-26 11:15 ` Avi Kivity
2009-06-27 15:58 ` Luiz Capitulino
2009-06-28 15:52 ` Avi Kivity
2009-06-28 16:30 ` Blue Swirl
2009-06-28 17:23 ` Filip Navara
2009-06-28 17:43 ` Avi Kivity
2009-06-28 17:51 ` Blue Swirl
2009-06-28 18:36 ` Avi Kivity
2009-06-28 22:11 ` Jamie Lokier
2009-06-25 19:59 ` Anthony Liguori
2009-06-23 4:29 ` [Qemu-devel] [PATCH 09/11] QMP: Port 'info blockstats' command Luiz Capitulino
2009-06-23 9:43 ` [Qemu-devel] " Avi Kivity
2009-06-23 9:59 ` Jan Kiszka
2009-06-23 10:09 ` Avi Kivity
2009-06-23 10:10 ` Jan Kiszka
2009-06-23 14:01 ` [Qemu-devel] " Anthony Liguori
2009-06-23 4:29 ` [Qemu-devel] [PATCH 10/11] QMP: Introduce basic events Luiz Capitulino
2009-06-23 9:46 ` [Qemu-devel] " Avi Kivity
2009-06-23 17:07 ` Luiz Capitulino
2009-06-23 10:06 ` Daniel P. Berrange
2009-06-23 4:30 ` [Qemu-devel] [PATCH 11/11] QMP: Command-line flag to enable control mode Luiz Capitulino
2009-06-23 9:03 ` [Qemu-devel] " Jan Kiszka
2009-06-23 10:04 ` Daniel P. Berrange
2009-06-23 10:11 ` Jan Kiszka
2009-06-23 10:17 ` Avi Kivity
2009-06-23 10:54 ` Jan Kiszka
2009-06-23 11:28 ` Avi Kivity
2009-06-23 11:44 ` Jan Kiszka
2009-06-23 11:51 ` Avi Kivity
2009-06-23 11:53 ` Jan Kiszka
2009-06-23 12:01 ` Avi Kivity
2009-06-23 12:39 ` Jan Kiszka
2009-06-23 12:46 ` Avi Kivity
2009-06-23 12:48 ` Avi Kivity
2009-06-23 11:54 ` Daniel P. Berrange
2009-06-23 11:48 ` Daniel P. Berrange
2009-06-23 12:25 ` Avi Kivity
2009-06-23 14:06 ` Anthony Liguori
2009-06-23 10:19 ` Daniel P. Berrange
2009-06-23 11:13 ` Jan Kiszka
2009-06-23 13:59 ` Luiz Capitulino
2009-06-23 14:06 ` Jan Kiszka
2009-06-23 17:27 ` Luiz Capitulino
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=20090624184158.GN14121@shareable.org \
--to=jamie@shareable.org \
--cc=avi@redhat.com \
--cc=dlaor@redhat.com \
--cc=ehabkost@redhat.com \
--cc=filip.navara@gmail.com \
--cc=jan.kiszka@siemens.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=tab@snarc.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.