From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:50285) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOW3N-0003qe-0H for qemu-devel@nongnu.org; Mon, 23 May 2011 10:24:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QOW3L-0005ux-Jr for qemu-devel@nongnu.org; Mon, 23 May 2011 10:24:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:22495) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOW3L-0005uc-9V for qemu-devel@nongnu.org; Mon, 23 May 2011 10:24:15 -0400 Date: Mon, 23 May 2011 15:24:09 +0100 From: "Daniel P. Berrange" Message-ID: <20110523142409.GW24143@redhat.com> References: <20110520180331.GA21837@amd.home.annexia.org> <4DD6AEB9.6060506@codemonkey.ws> <20110523130411.GR24143@redhat.com> <4DDA620F.1090308@codemonkey.ws> <20110523134021.GT24143@redhat.com> <4DDA663F.30907@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <4DDA663F.30907@codemonkey.ws> Subject: Re: [Qemu-devel] [PATCH] qemu: json: Fix parsing of integers >= 0x8000000000000000 Reply-To: "Daniel P. Berrange" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Luiz Capitulino , qemu-devel@nongnu.org, "Richard W.M. Jones" On Mon, May 23, 2011 at 08:50:55AM -0500, Anthony Liguori wrote: > >>The actual value of the alert will surprise you :-) > >> > >>Integers in Javascript are actually represented as doubles > >>internally which means that integer constants are only accurate up > >>to 52 bits. > >> > >>So really, we should cap integers at 32-bit :-/ > >> > >>Have I mentioned recently that I really dislike JSON... > > > >NB, I am distinguishing between JSON the generic specification and > >JSON as implemented in web browsers. JSON the specification has *no* > >limitation on integers. > > The spec has no notion of integers at all. Here's the relevant > text. Note that the BNF only has a single entry point for numbers. > It does not distinguish between integers and floating point numbers. > Also, the only discussion of valid numbers is about whether the > number can be represented as a rational number. I think the only > way to read the spec here is that *all* numbers are meant to be > represented as floating point numbers. I don't agree. It means that JSON as a format can represent arbitrary numbers, whether rational or not. Interpretation as 32/64/128 bit floating point, or as 16/32/64 bit integers is entirely a matter for the parser. The only issue is whether the implementation parser can hold the numbers without loosing precision. eg, so if JavaScript gets a number which doesn't fit in 52-bits, it'll loose some precision due to floating point storage. Nothing in the JSON spec requires other languages to throw away precision when parsing or formatting JSON. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|