i'm against all these proposals.  JSON.parse should remain zero-config and 
idiot-proof.  you will *always* need a second-pass in product-development to 
revive non-JSON datatypes anyways, like Date, and thats where reviving BigInt 
should take place as well.

again, i'm ok with working on web-projects where there are bugs in the 
second-pass (which is expected).  i'm not ok with web-projects, where i cannot 
reliably trust JSON.parse to do its job (and have to add it to checklist of 
things to inspect when figuring out where the bug is in end-to-end 
communications).

fyi, the twitter example is not compelling. it already has a string-form 
“id_str” which is more appropriate/easier-to-handle in javascript-land.  what 
benefit does a pseudorandom BigInt “id” (which has no need of arithmetic) have 
over plain-string “id_str” in javascript-land? none.

kai zhu
[email protected]

> On 22 Oct 2018, at 2:59 AM, Peter Jaszkowiak <[email protected]> wrote:
> 
> What if `JSON.parse` took an options object as the second parameter?
> There's already been an instance of a JS API changing from booleans to an 
> options object: `addEventListener`.
> 
> I know it wasn't tc39, but it shows that it's possible. Another option is to 
> add a different method to the `JSON` object.
> 
> On Sun, Oct 21, 2018, 13:45 Richard Gibson <[email protected] 
> <mailto:[email protected]>> wrote:
> Yes, understood. And setting aside the undesirable characteristics of boolean 
> trap <https://ariya.io/2011/08/hall-of-api-shame-boolean-trap> interfaces for 
> the moment (which will certainly be a source of regret if ECMAScript ever 
> gets a BigFloat), my point is that doing so would affect parsing of all 
> numbers, as opposed to only those numbers that really should be BigInts. For 
> example, let's look at a sample Twitter API entity 
> <https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/tweet-object>:
> 
> {
>  "created_at":"Thu Apr 06 15:24:15 +0000 2017",
>  "id": 850006245121695744,
>  "id_str": "850006245121695744",
>  "text": "1/ Today we’re sharing our vision for the future of the Twitter API 
> platform!nhttps://t.co/XweGngmxlP <http://t.co/XweGngmxlP>",
>  "user": {
>   "id": 6253282,
>   "id_str": "6253282",
>   "name": "Twitter API",
>   "screen_name": "twitterapi",
>   "followers_count": 21,
>   "friends_count": 32
>  },  
>  "entities": {}
> }
> 
> It's nice that e.g. JSON.parse(…, null, true) would allow us to access the 
> ids as full-fidelity numbers (Twitter documents them as an int64), but much 
> less nice that the behavior would affect all numbers. For instance, let's say 
> this is one tweet in a list that we want to sort by the "follower ratio" of 
> their creators:
> 
> let creatorPopularity = tweet.user.followers_count / tweet.user.friends_count;
> // (without parse-as-BigInt) → 0.65625
> // (with parse-as-BigInt)    → 0n
> 
> We just silently lost floating-point arithmetic.
> 
> On Sun, Oct 21, 2018 at 1:00 PM Isiah Meadows <[email protected] 
> <mailto:[email protected]>> wrote:
> This would be the correct understanding here, a 4th parameter read as a 
> boolean.
> 
> On Sun, Oct 21, 2018 at 12:27 Peter Jaszkowiak <[email protected] 
> <mailto:[email protected]>> wrote:
> He was recommending a single parameter for "parse ints as bigints", not 
> changing the default behavior.
> 
> On Sun, Oct 21, 2018, 09:58 Richard Gibson <[email protected] 
> <mailto:[email protected]>> wrote:
> First, note that reviver functions do manipulate the result after it's 
> parsed. Second, "parse ints as bigints" is too big a hammer—changing the 
> output for all numbers would break currently working code. And third, it's 
> not even fully sufficient for the "big numbers" purpose, which logically also 
> includes non-integers outside the IEEE 754 64-bit range ("BigFloat").
> 
> On Sun, Oct 21, 2018 at 10:50 AM Isiah Meadows <[email protected] 
> <mailto:[email protected]>> wrote:
> Just because something exists doesn't mean it'll be  broadly used. Plus, 
> reviver functions are normally incredibly simple - you don't get enough 
> context (like key paths) to do anything crazy, and this proposal doesn't give 
> you enough context for that.
> 
> In practice, this changes literally nothing for most consumers, since the use 
> case is incredibly limited and usually requires server agreement as well. In 
> fact, that's where my skepticism lies: why add 3 new reviver parameters when 
> a single "parse ints as bigints" would solve basically the entire problem? 
> I've yet to see any other use case that couldn't be solved by manipulating 
> the result after it's parsed.
> 
> But personally, I don't see how bugs would be a major issue here considering 
> its limited utility.
> 
> On Sun, Oct 21, 2018 at 02:01 kai zhu <[email protected] 
> <mailto:[email protected]>> wrote:
> wish to express skepticism for the stage-1 proposal "JSON.parse source text 
> access" [1], from web-integration perspective.
> 
> a common javascript-painpoint is pinpointing bug-source of end-to-end 
> client<->server communications.  thankfully, JSON.parse is rarely suspect in 
> this process.  this proposal however, encourage developers to introduce 
> bugs/doubts-of-reliability to JSON.parse, making integration bug-hunting more 
> painful than it already is.
> 
> standard-operating-procedure for reviving JSON-data is a 2-step process:
> 1. JSON.parse with zero-config to rule-out bugs during this step
> 2. second-pass of plain-JSON to revive [product-specific] string-encoded 
> non-JSON datatypes like BigInt/Date/RegExp, where bugs can be expected
> 
> you normally do not want to complicate bug-hunts by contaminating step-1 with 
> bugs from step-2.
> 
> [1] stage-1 proposal - JSON.parse source text access
> https://github.com/gibson042/ecma262-proposal-JSON-parse-with-source 
> <https://github.com/gibson042/ecma262-proposal-JSON-parse-with-source>
> kai zhu
> [email protected] <mailto:[email protected]>
> 
> 
> 
> _______________________________________________
> es-discuss mailing list
> [email protected] <mailto:[email protected]>
> https://mail.mozilla.org/listinfo/es-discuss 
> <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> [email protected] <mailto:[email protected]>
> https://mail.mozilla.org/listinfo/es-discuss 
> <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> [email protected] <mailto:[email protected]>
> https://mail.mozilla.org/listinfo/es-discuss 
> <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> [email protected] <mailto:[email protected]>
> https://mail.mozilla.org/listinfo/es-discuss 
> <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to