JSON support for BigInt in Chrome/V8
J Decker
d3ck0r at gmail.com
Tue Jul 17 09:12:05 UTC 2018
On Tue, Jul 17, 2018 at 1:48 AM Andrea Giammarchi <
andrea.giammarchi at gmail.com> wrote:
> We miss a fundamental feature in JS, the ability to understand if a native
> constructor can be used with `new` or not.
>
> BigInt("5555555555555555555555555500003");
> 5555555555555555555555555500003n
>
> new BigInt("5555555555555555555555555500003");
> VM51:1 Uncaught TypeError: BigInt is not a constructor
>
>
```
typeof(5n)
"bigint"
```
Uint8Array([])
> VM54:1 Uncaught TypeError: Constructor Uint8Array requires 'new'
>
> new Uint8Array([])
> Uint8Array []
>
> Without that knowledge, any attempt to even think about a solution that
> would scale not only with BigInt but with everything else, is kinda futile.
>
> Best Regards.
>
>
>
>
>
>
> On Sun, Jul 15, 2018 at 8:27 AM Anders Rundgren <
> anders.rundgren.net at gmail.com> wrote:
>
>> On 2018-07-15 08:17, J Decker wrote:
>> <snip>
>> > If you want to use BigInt with JSON you have to serialize it
>> yourself:
>> >
>> > Yes; and I did forget to mentions erilaization side but the serlizer
>> could do an additional type check and emit and appropriate thing.
>>
>> It is the "appropriate thing" that is problem; the rest is trivial.
>>
>> Anders
>>
>> > I thought the replacer could be used- but the output of replacer would
>> have to type check to see if it's a bigint too....
>> > https://github.com/v8/v8/blob/master/src/json-stringifier.cc#L305 case
>> BIGINT_TYPE: hmm and digging some more there's lots of eexcpetions
>> thrown...
>> >
>> > does Number( "5n" ) ? result in a bigint? No....
>> > ```
>> > Number( "5n" )
>> > NaN
>> > var a = 5n
>> > a
>> > 5n
>> > ```
>> >
>> >
>> > var small = BigInt(5n);
>> > var big = BigInt(5555555555555555555555555500003n);
>> > JSON.stringify([big.toString(),small.toString()]);
>> >
>> > which generates ["5555555555555555555555555500003","5"]
>> >
>> > Anders
>> >
>> > > var small = 5n;
>> > > var big = 5555555555555555555555555500003n;
>> > >
>> > > n suffix as from
>> > > https://github.com/tc39/proposal-bigint
>> > >
>> > > JSON Number serialization has apparently reached a new level
>> (of confusion).
>> > >
>> > > Personally I don't see the problem. XML did just fine
>> without hard-coded data types.
>> > >
>> > > The JSON type system is basically a relic from JavaScript.
>> As such it has proved to be quite useful.
>> > > However, when you are outside of that scope, the point with
>> the JSON type system gets pretty much zero since you anyway need to map
>> extended types.
>> > >
>> > > Oracle's JSON-B solution which serializes small values as
>> Number and large values as String rather than having a unified
>> serialization based on the underlying data type seems like a pretty broken
>> concept although indeed fully conforming to the JSON specification. "Like
>> the Devil reads the Bible" as we say in Scandinavia :-)
>> > >
>> > > Adding a couple of double quotes is a major problem? If so,
>> it seems like a way more useful project making quotes optional for keys
>> (named in a specific way), like they already are in JavaScript.
>> > >
>> > > Yeah, and of course adding support for comments.
>> > >
>> > >
>> > > I'd rather not see numbers converted to strings; that would be
>> required to allow application handling of values; at a layer higher than
>> JSON core itself. It is nice that JSON keeps numbers as numbers and
>> strings as strings without needing intimite knowledge about the actual
>> 'types' they end up in.
>> > >
>> > > Comparing numeric length would be a half/useless solution since
>> bigints are required to interop with other bigints only; so small numbers
>> couldn't be 'guessed' and the application would have to provide a reviver.
>> > >
>> > >
>> > >
>> > > Anders
>> > >
>> > > _______________________________________________
>> > > es-discuss mailing list
>> > > es-discuss at mozilla.org <mailto:es-discuss at mozilla.org> <mailto:
>> es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>>
>> > > https://mail.mozilla.org/listinfo/es-discuss
>> > >
>> > >
>> > >
>> > > _______________________________________________
>> > > es-discuss mailing list
>> > > es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
>> > > https://mail.mozilla.org/listinfo/es-discuss
>> > >
>> >
>> >
>> > On Sat, Jul 14, 2018 at 9:23 PM Anders Rundgren <
>> anders.rundgren.net at gmail.com <mailto:anders.rundgren.net at gmail.com>>
>> wrote:
>> >
>> > On 2018-07-15 04:27, J Decker wrote:
>> > >
>> > >
>> > > On Sat, Jul 14, 2018 at 1:36 AM Anders Rundgren <
>> anders.rundgren.net at gmail.com <mailto:anders.rundgren.net at gmail.com>
>> <mailto:anders.rundgren.net at gmail.com <mailto:
>> anders.rundgren.net at gmail.com>>> wrote:
>> > >
>> > > var small = BigInt("5");
>> > > var big = BigInt("5555555555555555555555555500003");
>> > > JSON.stringify([big,small]);
>> > > VM330:1 Uncaught TypeError: Do not know how to serialize a
>> BigInt
>> > > at JSON.stringify (<anonymous>)
>> > > at <anonymous>:1:6
>> > >
>> > >
>> > > is BigInt the only way to create a BigInt ? Or did they also
>> implement the 'n' suffix, which I noted here
>> https://github.com/tc39/proposal-bigint/issues/24#issuecomment-392307848
>> would easily distinguish bigint from other numbers; and be easy to add on
>> the parsing side; and call BigInt(xxx) instead of Number(xxx).
>> >
>> > This problem is related to the BigInt object itself. If you create
>> such using the 'n' notation you get the same result.
>> >
>> > If you want to use BigInt with JSON you have to serialize it
>> yourself:
>> >
>> > var small = BigInt(5n);
>> > var big = BigInt(5555555555555555555555555500003n);
>> > JSON.stringify([big.toString(),small.toString()]);
>> >
>> > which generates ["5555555555555555555555555500003","5"]
>> >
>> > Anders
>> >
>> > > var small = 5n;
>> > > var big = 5555555555555555555555555500003n;
>> > >
>> > > n suffix as from
>> > > https://github.com/tc39/proposal-bigint
>> > >
>> > > JSON Number serialization has apparently reached a new level
>> (of confusion).
>> > >
>> > > Personally I don't see the problem. XML did just fine
>> without hard-coded data types.
>> > >
>> > > The JSON type system is basically a relic from JavaScript.
>> As such it has proved to be quite useful.
>> > > However, when you are outside of that scope, the point with
>> the JSON type system gets pretty much zero since you anyway need to map
>> extended types.
>> > >
>> > > Oracle's JSON-B solution which serializes small values as
>> Number and large values as String rather than having a unified
>> serialization based on the underlying data type seems like a pretty broken
>> concept although indeed fully conforming to the JSON specification. "Like
>> the Devil reads the Bible" as we say in Scandinavia :-)
>> > >
>> > > Adding a couple of double quotes is a major problem? If so,
>> it seems like a way more useful project making quotes optional for keys
>> (named in a specific way), like they already are in JavaScript.
>> > >
>> > > Yeah, and of course adding support for comments.
>> > >
>> > >
>> > > I'd rather not see numbers converted to strings; that would be
>> required to allow application handling of values; at a layer higher than
>> JSON core itself. It is nice that JSON keeps numbers as numbers and
>> strings as strings without needing intimite knowledge about the actual
>> 'types' they end up in.
>> > >
>> > > Comparing numeric length would be a half/useless solution since
>> bigints are required to interop with other bigints only; so small numbers
>> couldn't be 'guessed' and the application would have to provide a reviver.
>> > >
>> > >
>> > >
>> > > Anders
>> > >
>> > > _______________________________________________
>> > > es-discuss mailing list
>> > > es-discuss at mozilla.org <mailto:es-discuss at mozilla.org> <mailto:
>> es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>>
>> > > https://mail.mozilla.org/listinfo/es-discuss
>> > >
>> > >
>> > >
>> > > _______________________________________________
>> > > es-discuss mailing list
>> > > es-discuss at mozilla.org <mailto:es-discuss at mozilla.org>
>> > > https://mail.mozilla.org/listinfo/es-discuss
>> > >
>> >
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180717/f45a9a10/attachment.html>
More information about the es-discuss
mailing list