2021-08-01 2021-08-02 2021-08-03 2021-08-04 [14:32:28.0308] editors call? [14:33:49.0770] bakkot: 2021-08-05 2021-08-06 2021-08-07 2021-08-08 2021-08-09 2021-08-10 2021-08-11 2021-08-12 2021-08-13 2021-08-14 [09:37:42.0683] ljharb: https://github.com/tc39/ecma262/pull/2408 is ready when you have time [09:39:20.0637] cool, will get to it today 2021-08-15 [13:44:41.0731] bakkot: why does https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values have `aoid="Type"` on it? it's not an AO [13:55:30.0007] it's used like one, so presumably the point of `aoid` is to make its usages link 2021-08-16 [19:48:25.0970] ohhh for Type() [19:48:31.0627] right [19:49:00.0720] the new type="abstract operation" changes are breaking my es-abstract operation scraping, and i'm trying to fix it [15:03:09.0779] shu: do you want to look at https://github.com/tc39/ecma262/pull/2489, or should I just mark as ready-to-merge with michael's stamp? [15:03:31.0488] It's just about the language we use, nothing major [15:22:04.0344] go ahead and ready-to-merge, i don't think it needs another set of eyes given the description [15:22:18.0587] the only thing i would've dug into is set vs set objects, and you already called that out 2021-08-17 2021-08-18 [09:04:43.0371] Michael Ficarra: why did you merge https://github.com/tc39/ecma262/pull/2491 ?? [09:05:11.0415] ahhh nvm, it wasn't a PR to master [09:05:13.0760] disregard 2021-08-19 [09:40:29.0385] bakkot: the new "duplicate ID" warning in ecmarkup is breaking my proposal technique of adding muitiple `` sections so i can artificially start the numbering later. is there another workaround for that? [09:40:46.0606] * bakkot: the new "duplicate ID" warning in ecmarkup is breaking my proposal technique of adding muitiple `` sections so i can artificially start the numbering later. is there another workaround for that? or can i disable the `duplicate-id` check? [09:59:29.0522] just build without `--strict` [10:00:15.0440] it'll still print warnings but you'll get your build artifact [11:20:40.0337] oof, ok [11:20:52.0691] i did `sec-placeholderN` and tweaked my code, and that works too [11:21:04.0655] it'd be really nice to have a first-class feature to start numbering tho [11:24:39.0091] PRs welcome! [14:43:21.0186] https://github.com/tc39/ecma262/pull/2492 2021-08-20 2021-08-21 [22:31:58.0775] seems like StringToBigInt is missing an assertion that its input is a String - does that seem right? If so i'll make a PR 2021-08-22 2021-08-23 [10:01:15.0024] eww, I really don't like StringToBigInt [10:01:33.0796] ljharb: how about you rewrite it instead to not be modifying a different algorithm? [10:02:37.0321] bakkot shu: what do you think about removing the Type(x) notation? [10:35:03.0176] > <@michaelficarra:matrix.org> ljharb: how about you rewrite it instead to not be modifying a different algorithm? you mean just inline the steps? [10:35:23.0872] > <@michaelficarra:matrix.org> bakkot shu: what do you think about removing the Type(x) notation? and replacing it with what? Type() is used quite heavily [10:47:42.0873] ljharb: I stamped https://github.com/tc39/ecma262/pull/2492 as ready-to-merge. it should go in as two commits: one with just the ecmarkup bump, one with everything else 2021-08-24 [18:57:21.0506] bakkot: 2489, squashed or separate? [19:13:43.0421] one commit is good I think [19:26:35.0439] kk [19:53:55.0585] ljharb: hang on, just noticed a typo [19:53:59.0712] `Type(x) is T` can be replaced with `x is a T` [19:54:10.0285] the one on line 955? [19:54:31.0887] Why is prose an improvement over an AO? [19:55:21.0537] ok fixed [19:55:53.0698] jmdyck: #2489 doesn't touch line 955; which typo are you referring to? [19:57:45.0477] `` missing space before "variants" [19:58:03.0771] (#2492) [19:58:07.0940] ah, whoops, that landed [20:16:04.0069] ljharb: One advantage of the `x is a T` form is that it can be more precise, e.g. `x is a declarative Environment Record` or `x is a function object` or `x is an Object with a [[Foo]] internal slot` [20:18:09.0503] How can that be more precise than an AO that has the same semantics? We can make AOs that are more precise than Type() is - that’s not an argument for inline prose, just an argument for “better than Type” [20:22:18.0315] Currently, we can say `x is a Record` or `x is an Environment Record` or `x is a declarative Environment Record` or `x is a function Environment Record` and they can all be true. Even if you create a "better than Type" AO, it's still only going to return one thing for x, so it's only going to be equivalent to *one* of those four. [20:25:59.0316] And what could a better-than-Type AO return that would give it the precision of `x is an Object with a [[Foo]] internal slot`? [10:09:41.0780] We already have that one - `RequireInternalSlot(x, [[Foo]])` [10:09:59.0310] i'd expect an `IsEnvironmentRecord` AO for the other examples [10:21:54.0975] I would much prefer to stick with either `Type` or `x is an Environment Record` over introducing an `IsEnvironmentRecord` AO [10:35:35.0882] i agree with that [10:35:45.0880] seems like churn for sake of churn [10:47:00.0943] So if x is a function Environment Record, IsEnvironmentRecord(x) would be true, but again, that only addresses one 'level' of precision. If I want to know if x is a declarative ER or a function ER, IsEnvironmentRecord(x) doesn't help. [13:47:02.0076] bakkot: thoughts on of "When applied to extended mathematical values, the operators refer to the usual mathematical operations over the extended real numbers; indeterminate forms are undefined and their use in this specification should be considered an editorial error." ? [13:54:34.0645] shu: WFM [13:57:11.0320] "indeterminate forms" is odd [13:58:01.0737] * (nm, i wasn't asked) [14:03:14.0155] jmdyck: happy to hear your thoughts too! [14:03:54.0823] Thanks! It's unclear what "indeterminate forms" means. [14:04:49.0089] i was using the term from analysis: https://en.wikipedia.org/wiki/Indeterminate_form [14:05:30.0652] we could also explicitly enumerate the forms that matter here: infty/infty, 0 * infty, infty - infty (or infty + -infty) [14:06:57.0568] or we can omit that sentence clause altogether, indeterminate forms are usually undefined, i felt like it's useful to call out that the extension of arithmetic to extended reals is only partial [14:07:17.0716] * or we can omit that clause altogether, indeterminate forms are usually undefined, i felt like it's useful to call out that the extension of arithmetic to extended reals is only partial [14:08:50.0916] I definitely would like it to be called out one way or another [14:09:25.0865] I'm fine with the current wording. would also be fine with explicitly enumerating the forbidden forms [14:11:11.0120] Is this arising from a PR? I forget. [14:13:14.0392] yes, from https://github.com/tc39/ecma262/pull/2493 [14:13:37.0571] right, just landed there myself 2021-08-25 2021-08-26 2021-08-27 [14:59:34.0576] bakkot: ping [15:02:07.0984] shu: pong [15:08:49.0658] https://docs.google.com/presentation/d/14PNcWgkd3Ik61b0Fv9qFISfjUfGz4ZThCkyC-XTTC_8/edit?usp=sharing for the structured clone slides [15:08:59.0115] ptal if you have time, and comment with concerns [15:10:50.0135] seems good [15:11:07.0705] I might emphasize that the details of how it works really do not matter, since this is strictly a layering thing for an already existing API [15:11:21.0333] since I guarantee you that e.g. Mark is going to be asking about exactly how it works [15:12:51.0041] heh yes [15:14:29.0727] does node have it as well? [15:14:33.0062] structured cloning, that is [15:16:40.0714] not currently, afaik, but see https://github.com/nodejs/node/issues/39713 [15:17:43.0876] actually, wait, maybe it does via MessageChannel in the worker_threads module [15:18:30.0771] ok yeah: https://nodejs.org/api/worker_threads.html#worker_threads_port_postmessage_value_transferlist > `value` is transferred in a way which is compatible with the HTML structured clone algorithm. [15:20:27.0497] excellent, thanks for the reference [15:33:59.0598] mark is going to be so unhappy with this [15:34:43.0482] e.g. if you structured clone a proxy for an array, it throws, thus revealing that you actually had a proxy rather than an array [15:41:48.0627] the world is already this way, what you gonna do [15:42:13.0820] pretend it isn't [15:42:25.0543] https://www.youtube.com/watch?v=PwuckTkE7T4 [15:43:00.0535] well in any case, that's the "we're not asking for normative changes here" [15:43:06.0679] yeah [15:43:57.0322] it's just I suspect mark has maybe not previously heard of or at least though much about this algorithm, so this presentation is going to be how he finds out, and it will make him unhappy [15:44:25.0944] yeah, seems very likely 2021-08-28 2021-08-29 2021-08-30 [14:09:29.0281] i had no idea there was a way to expose an array proxy, that makes me very happy :-p [14:29:45.0374] it reveals proxies in general, not just arrays [14:30:14.0451] proxies for anything non-callable and non-exotic (except array), anyway [14:31:38.0068] I guess not just "non-exotic", but specifically "no internal slots, and the prototype is object.prototype", plus a few other types [16:45:53.0878] hm [16:46:05.0200] maybe i'm not clear on how structured clone works [16:46:47.0141] atm, i can tell you if any `x` is a proxy for a builtin as long as you claim it's a specific one, modulo function, array, and error et al [16:47:37.0805] to determine that a proxy for anything else is a proxy is trickier and rests on implementation details of the handlers and/or the original function/methods [16:52:54.0753] yeah except also `structuredClone(new Proxy({}, {}))` throws [16:53:06.0749] unlike `structuredClone({})` [16:53:47.0357] it was... not written by people who care about preserving proxy transparency, is my impression [16:58:09.0090] well, i daresay the cardinality of the set of people who care about preserving proxy transparency is very small [16:58:44.0494] dunno, we sure got a lot of annoyed comments on private fields [16:58:56.0488] and that wasn't even making them any less transparent than they already are [16:58:56.0730] i do not think they were about proxy transparency [16:59:28.0373] i still think they all came down to hating #, and there was a lot of post-hoc rationalization for why they were bad even from first principles [16:59:28.0618] rather than "transparency", then, let us say that it was about the ability to wrap a proxy around a thing and have it still work like the original thing [16:59:57.0679] genuinely, no, there was a completely separate concern about proxies 2021-08-31 [17:00:06.0763] some people bandwagoned that concern because of dislike for `#` [17:01:13.0899] but a fair number people also were annoyed, as a completely separate question, that they could not easily wrap a proxy around a thing with private fields and still hook its internals [17:01:44.0135] did that seem like a practical concern or a theoretical concern to you [17:02:20.0758] practical [17:02:27.0551] let me find some of the issues [17:02:39.0497] no, no, i believe your recollection [17:02:42.0504] i have no interest in re-reading those [17:03:12.0716] i just remain surprised by real uses of Proxy [17:04:27.0105] yeah, there's some frameworks doing some stuff with them [17:04:31.0401] vue, now, notably [17:05:07.0475] before vue3, mobX was the biggest one, I think [17:06:57.0919] vue is actually pronounced "view" right [17:07:28.0397] there was that one event at Google NYC where domenic said "voo" and i've not been able to erase that memory [17:07:31.0291] ¯\_(ツ)_/¯ [17:07:44.0253] this is not one of those words I ever use in real life [18:10:28.0313] shu: yes it is absolutely "view" and domenic is super trolling with that [18:14:08.0183] well credit to him it's been wormed into my brain for several years [11:38:16.0684] nice use of abstract closures in this proposal