00:03:26  * keith_millerjoined
00:19:21  <devsnek>littledan: why can't numberformat just explicitly work with bigints
00:19:34  <devsnek>its a separate primitive type, checking which was passed is pretty easy
00:20:09  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:20:24  <littledan>devsnek: How do you read so quickly?!
00:20:36  <devsnek>🤷
00:20:54  <littledan>yeah, it can, and that's what the open PR does, but I explained why I'm now coming around to the thought that this isn't a good pattern to do in general
00:23:30  <devsnek>is this whole issue popping up from the idl changes?
00:23:56  <devsnek>seems like the solution would be new apis get to throw on string, old apis have to continue coercing to number
00:42:56  * akirosequit (Ping timeout: 240 seconds)
00:44:49  * akirosejoined
00:57:15  * gibson042joined
00:58:42  * keith_millerjoined
01:06:47  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:10:46  * keith_millerjoined
01:29:56  * keith_m__joined
01:30:59  * keith_mi_quit (Ping timeout: 250 seconds)
02:52:47  * akirosequit (Ping timeout: 240 seconds)
02:52:52  * aki_joined
02:53:16  * aki_changed nick to akirose
03:13:52  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
03:15:09  * keith_millerjoined
03:16:35  * keith_millerquit (Client Quit)
03:17:54  * keith_millerjoined
03:37:09  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
04:01:49  * jwaldenquit (Quit: ChatZilla 0.9.92-rdmsoft [XULRunner 35.0.1/20150122214805])
04:07:25  * keith_millerjoined
04:59:32  * aki_joined
05:00:26  * akirosequit (Ping timeout: 244 seconds)
05:00:26  * aki_changed nick to akirose
05:12:42  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:30:50  * jmdyckquit (Quit: Leaving.)
05:35:20  * keith_millerjoined
06:47:03  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:55:23  * keith_millerjoined
07:01:31  * gibson042quit (Quit: Leaving.)
07:05:55  * aki_joined
07:06:43  * akirosequit (Ping timeout: 245 seconds)
07:06:43  * aki_changed nick to akirose
08:55:00  * howdoijoined
09:11:01  * aki_joined
09:11:56  * akirosequit (Ping timeout: 240 seconds)
09:11:57  * aki_changed nick to akirose
10:49:09  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:18:15  * aki_joined
11:18:32  * akirosequit (Ping timeout: 272 seconds)
11:18:39  * aki_changed nick to akirose
12:03:03  * keith_millerjoined
12:03:54  * howdoiquit (Quit: Connection closed for inactivity)
12:07:24  * keith_millerquit (Ping timeout: 246 seconds)
12:53:19  <littledan>We considered it for WebIDL, but it's kind of too weird when evolving an API: if you have an existing API that takes a Number, and add a BigInt overload, somehow adding that case makes String arguments throw
12:53:46  <littledan>So it would only work for brand new APIs, not evolving existing ones
12:57:08  * keith_millerjoined
13:24:54  * aki_joined
13:26:22  * akirosequit (Ping timeout: 268 seconds)
13:26:23  * aki_changed nick to akirose
13:45:04  * jmdyckjoined
14:34:44  <devsnek>littledan: it should continue sending string to bigints
14:34:48  <devsnek>er
14:34:57  <devsnek>it should continue sending string to number
14:35:18  <littledan>right, so that's what the format PR does
14:35:31  <devsnek>so what's the problem then
14:35:33  <littledan>but, this is unintuitive to some people, and overall overloading may be inappropriately used
14:35:39  <annevk>The other problem is that it makes it attractive to add BigInt overloads to cases where it doesn't necessarily make much sense, only as a convenience
14:35:39  <littledan>I mean, I wrote slides about these things
14:35:49  * serbangjoined
14:36:02  <annevk>Which would lead to inconsistencies between the web platform and ECMAScript, which generally doesn't accept BigInt where it accepts Number
14:36:21  <devsnek>your slides didn't really explain much, it just showed an example of format returning an implcitly coerced bigint
14:36:34  <devsnek>the linked webidl issue was helpful though
14:39:47  <littledan>well, I guess the slides are for me to talk about while delivering them
14:40:08  <littledan>but, if you can ask questions about what's unclear about the slides, it would be easier for me to give a detailed answer
14:40:29  <littledan>annevk: Yeah, we should definitely make the same decision across both contexts, and with Node.js as well
14:40:52  <littledan>So far, Joyee has been avoiding this overloading for Node.js, giving APIs an options bag to opt into bigint
14:48:16  * annevkdevsnek I think you ought to apologize to littledan as you’ve been a lil rude. He doesn’t owe you an explanation yet is making the time to do so and you’ve been pretty dismissive of that effort.
14:49:09  <annevk>That was meant as /msg. Sorry for that 😟
14:49:12  <littledan>well, I'm happy to clarify things here; I'm sure I'll be chatting with more people about this topic who take much less initiative to review the materials
14:49:28  <littledan>I should make a PR with the formatBigInt version
14:50:16  <littledan>there's a segment of TC39 who won't read any of the GitHub threads but will read the discussion here (while others may read neither, or both, or just the other one)
15:11:19  <devsnek>annevk: sorry I'm not trying to be dismissive, I'm trying to better understand
15:17:13  * gibson042joined
15:26:45  <bradleymeck>guybedford stumbled upon the override mistake while trying to freeze node's core in a PR
15:27:40  <bradleymeck>https://github.com/nodejs/node/pull/25685#issuecomment-457564897
15:32:17  * aki_joined
15:32:47  * akirosequit (Ping timeout: 240 seconds)
15:32:47  * aki_changed nick to akirose
15:36:19  <devsnek>bradleymeck: shoulda been using defineProperty
15:36:44  <bradleymeck>I would disagree there
15:37:52  <devsnek>🤷
15:39:17  <devsnek>bradleymeck: set explicitly interacts with the prototype though
15:39:32  <devsnek>I don't understand why this is considered a mistake
15:39:35  <bradleymeck>yup, and a non-writable prototype doesn't make the object itself immutable
15:40:01  <devsnek>no but the property that you interact with is not writable
15:40:08  <devsnek>you should make a new one if you want otherwise
15:40:29  <bradleymeck>agreed, and the problem is that JS doesn't make a new one
15:40:37  <devsnek>I find the proposed behaviour more surprising than the current
15:40:45  <devsnek>I think it would be a problem if it did
15:40:58  <bradleymeck>devsnek: there are notes and threads on this issue, basically it makes things very confusing if non-writable prototype fields are preventing prop creation
15:41:28  <devsnek>yeah I've seen the threads
15:41:45  <bradleymeck>there have been multiple people who have presented on why the current behavior is odd (myself included). we can disagree but it does make actually freezing things unrealistic
15:41:57  <bradleymeck>which kind of goes against the point of most features
15:42:06  <bradleymeck>you make a feature so that it can be used
15:42:27  <devsnek>I think it's just a logical part of the design of prototypal inheritance
15:42:38  <devsnek>yes it makes freezing things annoying but freezing things is already annoying
15:45:43  <devsnek>get and set should be symmetrical
15:47:15  <bradleymeck>they are more consistent if you overwrite
15:47:17  * bradleymeckdigs about
15:47:57  <bradleymeck>https://docs.google.com/presentation/d/17dji3YM5_LeMvdAD3Y3PQoXU1Mgm5e2yN_BraBSTkjo/edit#slide=id.g40dfe85e50_0_81
15:49:00  <devsnek>I think I saw this before
15:57:18  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:06:56  * gibson042quit (Ping timeout: 240 seconds)
16:22:01  * AtumTjoined
16:22:19  * gibson042joined
16:32:39  * keith_millerjoined
16:33:46  * keith_millerquit (Client Quit)
16:34:32  * keith_millerjoined
16:35:15  * AtumT_joined
16:36:56  * AtumTquit (Ping timeout: 240 seconds)
16:38:25  * keith_millerquit (Client Quit)
16:54:20  * keith_millerjoined
17:02:18  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:15:32  * serbangquit (Quit: Connection closed for inactivity)
17:25:17  * AtumTjoined
17:27:32  * AtumT_quit (Ping timeout: 244 seconds)
17:28:05  * keith_millerjoined
17:36:59  * jmdyckquit (Quit: Leaving.)
17:37:07  * jmdyckjoined
17:39:16  * aki_joined
17:39:17  * jmdyckquit (Read error: Connection reset by peer)
17:39:17  * jmdyck1joined
17:41:03  * akirosequit (Ping timeout: 268 seconds)
17:41:04  * aki_changed nick to akirose
18:17:03  <Bakkot>so, y'all know how the Set contructor first makes an object with the appropriate prototype and then looks up and .calls `add` on it repeatedly? Can we make it not do that when it's just a basic `new Set`?
18:18:13  <Bakkot>my understanding is the reason for this behavior is so that `new class Foo extends Set { add(x) { ... } }` invokes Foo's `add`, not to support monkeypatching of `Set.prototype.add` itself.
18:19:13  <Bakkot>I ask because in the Set methods proposal Domenic suggests creating Sets directly, i.e. with the appropriate internal slots already set up rather than invoking the Set constructor, and AFAICT the only reason these are observably different is the behavior above
18:22:54  * jwaldenjoined
18:23:10  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:23:26  <bradleymeck>Bakkot: I'd love that
18:23:47  <bradleymeck>saw that and have odd concerns while dealing with rekey
18:26:18  * AtumTquit (Ping timeout: 245 seconds)
18:26:20  * AtumT_joined
18:32:56  * AtumT_quit (Ping timeout: 240 seconds)
18:32:57  * AtumTjoined
18:49:55  * AtumT_joined
18:49:56  * keith_millerjoined
18:52:27  * AtumTquit (Ping timeout: 240 seconds)
18:54:56  * AtumT_quit (Ping timeout: 240 seconds)
18:58:47  * AtumTjoined
19:32:23  <ljharb>Bakkot: it looks it up repeatedly too?
19:32:40  <ljharb>Bakkot: if so i think the easy change is to make it only look it up once - we've made that change with iterators next before iirc
19:33:02  <ljharb>Bakkot: i'd worry about the web compat of skipping the lookup for %Set%, but i'd be stoked to see it go in
19:33:18  <Bakkot>ljharb: no, just once
19:33:47  <ljharb>ah ok
19:33:50  <gsathya>+1 to removing this call
19:33:52  <ljharb>so then yeah it'd be about the web compat part
19:33:56  <ljharb>and i'd want to do the same for Map
19:34:04  <Bakkot>and weakset and weakmap of course, yeah
19:34:25  <ljharb>seems like a great needs consensus needs data needs tests PR :-p
19:34:32  <Bakkot>to be clear, I'd still want it to be there when the Set constructor is being invoked from a subclass (or Reflect.construct I guess)
19:34:41  <ljharb>ofc
19:35:13  <Bakkot>ok, well, we are well passed advancement deadline, but I can at least bring it up this meeting
19:35:49  <Bakkot>does npm have a code search thing they can do?
19:36:05  <gsathya>Bakkot, will you switch on newtarget before looking up "add"?
19:36:05  <Bakkot>I would love to know what if any code on npm does `Set.prototype.add =`
19:36:12  <Bakkot>gsathya: yeah, exactly that
19:36:31  <gsathya>ah ok
19:36:42  <Bakkot>unless there's a better thing to do from an implementation perspective?
19:36:52  <gsathya>no, I think this is fine
19:46:43  * aki_joined
19:47:44  * akirosequit (Ping timeout: 272 seconds)
19:47:45  * aki_changed nick to akirose
19:54:51  <bradleymeck>Bakkot: Node does, idk if npm uses a separate tool
19:54:57  <bradleymeck>https://github.com/nodejs/Gzemnid
19:55:35  <bradleymeck>we also have a set of modules we run tests against https://github.com/nodejs/citgm
19:57:26  <Bakkot>gsathya: off the top of your head do you know if it would be possible to add a use-counter for overriding Set.prototype.add?
19:57:37  <Bakkot>in case the committee ends up concerned about breakage
19:57:52  <Bakkot>I can look into doing it myself if necessary, just wondering about feasibility
19:58:20  <Bakkot>added topic to agenda; issue: https://github.com/tc39/ecma262/issues/1430
20:10:24  <gsathya>Bakkot, yeah that should be fine
20:44:03  * jwaldenquit (Quit: bdinnou)
21:03:52  <ljharb>Bakkot: that's for stages, not needs consensus
21:05:22  <Bakkot>/shrug
21:05:24  <Bakkot>moved it
21:08:56  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:24:21  * keith_millerjoined
21:32:36  * jwaldenjoined
21:53:23  * aki_joined
21:54:21  * akirosequit (Ping timeout: 246 seconds)
21:54:21  * aki_changed nick to akirose
22:03:21  * AtumTquit (Quit: AtumT)
22:04:28  <Bakkot>zenparsing: I am now super confused on what your actual position on subclassability of Set is
22:05:23  <Bakkot>and/or ability of user code to hook into the behavior of built-in functions, whether or not subclasses are involved
22:08:23  <Bakkot>specifically, do you hold both of 1) `new Set` should use whatever the value of `Set.prototype.add` happens to be right now and 2) `Set.prototype.isSubsetOf` should read from [[SetData]] directly rather than looking up `has`? that seems like a weird pair of opinions to hold simultaneously, so I am worried I have misunderstood something.
22:10:13  <bradleymeck>To clarify, no one wants to change `new CustomSet([...foo])` looking up CustomSetInstance (not proto [fun]) and being able to use `CustomSet.prototype.add` to do something diff `from Set.prototype.add`?
22:11:54  <devsnek>I agree that set shouldn't have used add here but it's definitely a breaking change
22:12:25  <bradleymeck>it needs to delegate to the subclass somehow though
22:12:43  <bradleymeck>otherwise the super() call would insert directly into [[SetData]]
22:12:44  <devsnek>someone suggested using new.target
22:13:39  <Bakkot>bradleymeck: that's right
22:13:58  <Bakkot>only proposing to change what happens when you do `new Set`, not `new CustomSet`
22:14:56  <bradleymeck>I can't think of a sane replacement for Set.prototype.add
22:15:03  <bradleymeck>i wonder if anyone is doing that
22:15:12  <Bakkot>I have been unable to locate any code anywhere which would be affected by this change.
22:15:23  <bradleymeck>Bakkot: did you check gzemnid?
22:15:39  <Bakkot>bradleymeck: yeah, the full set, even! thanks for the link.
22:15:46  <Bakkot>lotta people polyfilling, but they wouldn't be affected.
22:15:57  <bradleymeck>honestly surprised no one is punching it in odd ways
22:16:02  * jmdyck1quit (Ping timeout: 246 seconds)
22:16:07  <Bakkot>some people defining their own Set type, which again wouldn't be affected.
22:16:40  <bradleymeck>Bakkot: to my knowledge the rekey (now toKey/toValue) wouldn't be affected but if ya could take a glance that would be good
22:17:24  <bradleymeck>https://github.com/tc39/proposal-richer-keys/tree/master/collection-rekey , my only concern is using a Get on the options bag + Object.prototype mutation, but thats true for most things
22:18:44  <Bakkot>bradleymeck: it would not, no. it'd still do the observable lookup on the options bag and all, the only difference would be that instead of `let adder be ? Get(map, "set")`, it would be `1. if NewTarget is %Map%, let adder be %MapProto_set%, else let adder be ? Get(map, "set")`.
22:19:16  * jmdyckjoined
22:38:29  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:50:36  * keith_millerjoined