00:38:37  * aki_joined
00:39:26  * akirosequit (Ping timeout: 240 seconds)
00:39:27  * aki_changed nick to akirose
00:47:53  <devsnek>why isn't 18.2.6 part of annex b
01:18:56  <Bakkot>ljharb: fwiw my experience matches Domenic's. squash-and-merge seems significantly more common than other workflows at least among big JS projects on github - prettier, babel, jest, eslint, lodash, npm, yarn, react, etc
01:19:28  <Bakkot>I have a list of the most active JS projects on github somewhere, though it's hard to pick a good criteria
01:27:49  <devsnek>squash is good, merge commits aren't great though
01:29:03  <Bakkot>squash-and-merge does not create merge commits, I don't think.
01:54:39  <ljharb>it doesn’t. The downside is that it doesn’t first update the PR branch, so there remains no programmatic link between the landed commit and the PR commit (only via github’s web Ui)
01:55:05  <ljharb>if it updated the PR branch before landing, then it’d be my favorite method (or rebasemerge)
01:59:11  <ljharb>prior to those features existing (late 2016 iirc) i believe my workflow was more common, but the convenience of squashmerge/rebasemerge has surely increased its popularity,
02:08:11  <Bakkot>what's the advantage of having there be such a programmatic link?
02:08:20  <Bakkot>I can't think of a time I'd've wanted that.
02:38:41  <ljharb>i use it for bisecting on the command line all the time - it makes the PR number obtainable without message parsing.
02:42:09  <Bakkot>by default squash and merge puts the PR number in the commit message; is that not sufficient?
02:42:45  <Bakkot>i guess that is what you mean by "message parsing"
02:44:44  <devsnek>is git update-ref lacking
02:45:30  * aki_joined
02:45:53  * akirosequit (Ping timeout: 245 seconds)
02:45:53  * aki_changed nick to akirose
04:46:29  * jmdyck1quit (Remote host closed the connection)
04:51:57  * aki_joined
04:52:27  * akirosequit (Ping timeout: 240 seconds)
04:52:28  * aki_changed nick to akirose
05:18:01  * keith_millerjoined
05:45:38  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:58:10  * aki_joined
06:58:52  * akirosequit (Ping timeout: 250 seconds)
06:58:53  * aki_changed nick to akirose
09:04:54  * aki_joined
09:04:56  * akirosequit (Ping timeout: 240 seconds)
09:05:09  * aki_changed nick to akirose
09:22:50  * keith_millerjoined
10:25:08  * obensourcequit (Ping timeout: 250 seconds)
10:35:24  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:40:05  * obensourcejoined
11:10:36  * aki_joined
11:11:27  * akirosequit (Ping timeout: 246 seconds)
11:11:27  * aki_changed nick to akirose
12:17:04  * werwerwerjoined
12:18:52  * werwerwerquit (Client Quit)
12:26:51  * jmdyckjoined
12:49:40  * keith_millerjoined
12:52:53  * keith_millerquit (Client Quit)
13:16:56  * akirosequit (Ping timeout: 240 seconds)
13:18:18  * akirosejoined
14:07:03  * keith_millerjoined
14:09:37  * keith_millerquit (Client Quit)
14:33:02  * ephemera_quit (Quit: No Ping reply in 180 seconds.)
14:34:27  * ephemera_joined
15:14:47  * gibson042joined
15:24:30  * aki_joined
15:24:47  * akirosequit (Ping timeout: 240 seconds)
15:24:47  * aki_changed nick to akirose
16:30:54  * keith_millerjoined
16:32:24  * keith_millerquit (Client Quit)
17:27:50  * keith_millerjoined
17:29:09  * keith_millerquit (Client Quit)
17:31:13  * aki_joined
17:32:26  * akirosequit (Ping timeout: 240 seconds)
17:32:26  * aki_changed nick to akirose
17:32:56  * keith_millerjoined
17:41:57  * gibson042quit (Ping timeout: 250 seconds)
17:47:51  * gibson042joined
17:48:15  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:51:45  * keith_millerjoined
17:55:43  * gibson042quit (Quit: Leaving.)
18:04:26  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:12:05  * AtumTjoined
18:12:37  * keith_millerjoined
18:31:55  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:48:45  * keith_millerjoined
19:15:08  * keith_millerquit (Remote host closed the connection)
19:15:24  * keith_millerjoined
19:20:06  * TabAtkinslooks back on the discussions about PR merging in 262
19:20:08  <TabAtkins>yikes
19:25:48  <ljharb>lol
19:37:56  * aki_joined
19:38:26  * akirosequit (Ping timeout: 240 seconds)
19:38:27  * aki_changed nick to akirose
19:41:13  * keith_m__joined
19:43:31  * gibson042joined
19:43:56  * keith_millerquit (Ping timeout: 240 seconds)
19:45:22  * keith_millerjoined
19:47:42  * keith_m__quit (Ping timeout: 246 seconds)
19:47:53  * keith_millerquit (Client Quit)
19:56:09  <Domenic>littledan: could we make numeric literals always override built-in suffixes?
19:56:33  <Domenic>So if you have a numeric__n in scope then `123n` is no longer a BigInt.
19:57:01  <littledan>Hmm, maybe. But how does that work with property access to the global object?
19:57:14  <Domenic>I don't understand the question?
19:57:45  <littledan>I mean, to check that numeric__n is out of scope, we would have to actually read that property of globalThis, right?
19:58:14  <Domenic>Hmm
19:58:38  <Domenic>The same is true for numeric__m in the proposal, right? So the worry is that it makes bigints slower/requires a guard cell thingy for them?
20:00:23  <Domenic>Or perhaps worse it requires an observable Get(globalThis, "numeric__n") every time
20:00:40  <Domenic>I guess you can skip it though if the guard cell hasn't been tripped
20:00:52  <Domenic>Still complicated
20:01:26  <Domenic>I assume we have no precedent for "lexical scoping but exclude the global"...
20:02:29  <devsnek>i thought they explicitly had to have underscores on them
20:02:33  <devsnek>like `123_n`
20:02:58  <Domenic>https://docs.google.com/presentation/d/1S6fX1smQplysYwGCZHQ5kBPLmtahVEOdNF0GHjZee7k/edit#slide=id.g32c85d338e_0_5
20:03:06  <Domenic>Numeric separators seem to have camped on `_` :-/
20:03:29  <Domenic>I'm looking at the "Do we actually need the ~" slide
20:04:15  <Domenic>(<bikeshed>I honestly think either `123:px` or `123'px` are nicer than `123~px`.</bikeshed>)
20:04:30  <devsnek>~ feels awkward to me just because so many people on the internet use it as a breath mark in fan fiction
20:04:39  <Domenic>O_o
20:04:43  <devsnek>lol
20:07:40  <littledan>yeah, the idea is, we're willing to call a function, but doing this thing of falling back when it doesn't exist is sort of weirder
20:08:06  <littledan>usually, when you do f(x), f will be in scope. But with this proposed change ,usually, when you do 10n, numeric__n won't be there
20:08:15  <littledan>so, you have to traverse a bunch of runtime objects to prove that it's not there
20:08:32  <devsnek>i would kinda expect these to just have the same semantics as tagged templates
20:08:35  <littledan>there's already a codepath in implementations for this (typeof foo), but it's just weird
20:08:37  <devsnek>except flipped around obviously
20:09:02  <littledan>Domenic: Yeah, part of this proposal is to free up _ so numeric separators can re-advance to Stage 3
20:09:09  <littledan>we have been in this weird ambiguous state for 10 months
20:09:18  <littledan>and it's my fault, and I'm sorry
20:11:21  <devsnek>littledan: i haven't much kept up with this so forgive me if i'm asking a silly question, but why wouldn't something like `function i() {} 10i` work
20:11:42  <devsnek>like tagged templates
20:11:51  <devsnek>tagged numeric literals
20:12:32  <littledan>there are two parts to the answer. One part is what I was just explaining to Domenic: we need to have space open for future built-in literals, and the fallback is weird
20:13:07  <littledan>The other part is about why do name mangling: i is a great example, as it's likely to be used in a simple for loop, but it's also likely to be used as a numeric suffix for complex numbers
20:13:25  <littledan>you wouldn't think about them overlapping, since they are sort of different domains
20:13:27  <littledan>hence, name manging
20:13:34  <devsnek>good suffixes don't make good identifiers
20:13:37  <littledan>_i just sort of made it all work without mangling, since _ was just part of the name
20:13:56  <littledan>I don't know how you can say that; everyone thinks of 3i representing imaginary numbers, and i is very common for loops
20:13:59  * AtumT_joined
20:14:21  * AtumTquit (Ping timeout: 268 seconds)
20:14:28  <devsnek>yeah that's what i meant
20:14:45  <devsnek>i was agreeing with you :)
20:16:04  <devsnek>because of that point though, i would kind of feel like maybe the best option would be to just hold off
20:18:01  <littledan>so, to step back, part of my motivation here is to build the foundation for Decimal
20:18:16  <littledan>we could do this two ways: 1) Build the primitives so Decimal can be a library 2) Just add another built-in type
20:18:27  <devsnek>personally i would do the latter
20:18:31  <littledan>tbh I'd be fine with either, if we are up for adding 5-10 such types over the next years
20:18:40  <ljharb>what are the other 4-9?
20:18:42  <littledan>the last feedback I heard from the committee is, 2) is unacceptable and we must do 1)
20:18:45  <devsnek>especially since operator overloading is a tough sell
20:18:53  <TabAtkins>Domenic: `123:px` collides with ?:, right? Or is this one of those "cover grammars will save us" things?
20:18:55  <littledan>ljharb: That'd take some more research, but I don't think it's just decimal
20:19:33  <littledan>s/from the committee/from a couple committee members/
20:20:02  <littledan>also, when I was championing BigInt, the sort of implicit deal was that I'd follow up with proposals for these things
20:20:07  <Domenic>littledan: from the future-proofing perspective it seems much nicer if we could accept the weird fallback semantics and explain BigInt as using the same type of thing. Maybe we could even put a numeric__n on the global.
20:20:08  <devsnek>TabAtkins: it would collide in `a ? 123:px : b`
20:20:26  <TabAtkins>Right.
20:20:26  <devsnek>afaik you would need infinite lookahead to correctly parse the `: b`
20:20:53  <littledan>Domenic: It's important for implementations to be able to create these literals statically
20:21:11  <littledan>I guess it could do this speculatively, but it feels ugly
20:21:44  <Domenic>Yes, I think it's an ugly implementation tradeoff; the question is whether we're OK paying that ugliness for something that IMO is much nicer for the general goal of democraticizing the numeric type primitives.
20:23:47  <littledan>yeah, I could see this alternative. If you don't mind, I'll summarize it on a slide so we can make sure it's given treatment in the discussion
20:23:57  <littledan>thanks for the reviews, everyone
20:24:05  <littledan>obviously I'm not happy about asking people to type 3~px either
20:24:12  <devsnek>how about just one new number type... the "ai" type
20:24:13  <littledan>and 3px is nicer
20:24:16  <devsnek>it just knows what you want
20:26:05  <TabAtkins>While `3px` is def nicer, I for one am willing to live in a `3~px` world if necessary. Still a vast improvement over `CSS.px(3)` (which is itself better than `new CSSUnitValue(3, "px")`).
20:27:44  <littledan>slightly off-topic, but how would you feel about adding numeric__px to the web's global scope, vs being something you're supposed to somehow import/unpack?
20:28:32  <devsnek>ok something slightly ambitious
20:28:44  <devsnek>what if we just set aside all the good suffixes
20:28:48  <devsnek>and let everything else be tags
20:29:25  <devsnek>like reserved keywords but reserved numeric tags
20:32:07  <littledan>TabAtkins: ^
20:32:19  <littledan>devsnek: That's not a bad idea
20:32:31  <devsnek>iirc this is what c++ did
20:32:40  <TabAtkins>devsnek: What are "all the good suffixes" tho?
20:32:43  <littledan>I think C++ asked that the suffixes start with _
20:32:49  <devsnek>hmm
20:33:11  <littledan>if we don't use an intervening character like ~, we would have to make lots of weird restrictions to the identifier anyway
20:33:21  <TabAtkins>littledan: I'm fine either way. It would be wild if all the CSS units were available by default, but we *do* add more of those over time, and some are a little surprising (like `q`, etc).
20:33:31  <littledan>e.g., 0x1c can't suddenly be reparsed as numeric__c(...)
20:33:47  <devsnek>oh yeah you're right they require an undercore
20:34:19  <littledan>well, I think of CSS units as something which would not be built-into JS, whereas we might reserve m for Decimal and i for imaginary and a number of others
20:35:24  <TabAtkins>Like I'm fine if there's just some easy way to use the CSS namespace object to register all the prefixes.
20:35:50  <TabAtkins>Or I suppose a built-in CSS module.
20:36:25  <Domenic>with (CSS) { ... your whole app here ... }
20:37:08  * efaustcoughs on his coffee
20:38:10  <TabAtkins>there you go
20:39:57  <TabAtkins>but really, `import * from "std:css-units";` or something
20:41:04  * keith_millerjoined
20:42:50  * Havvyquit (Read error: Connection reset by peer)
20:49:57  * Havvyjoined
20:52:04  <Domenic>That doesn't import into current scope
20:52:19  <Domenic>There is no way to splat an object into current scope besides with () {}.
20:54:11  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:04:46  <littledan>Right, so the impact is, all users have to do the name mangling manually
21:05:20  <littledan>import { numeric__px } from "std:css";
21:05:37  <littledan>Or, just smash it onto the global scope
21:20:57  * AtumT_quit (Ping timeout: 268 seconds)
21:23:33  * AtumTjoined
21:43:37  * aki_joined
21:44:52  * akirosequit (Ping timeout: 272 seconds)
21:44:52  * aki_changed nick to akirose
22:01:32  * gibson042quit (Quit: Leaving.)
22:01:40  <devsnek>what if there was a macro system like rust, then weird number literals and operator overloading would be easy
22:07:09  <Bakkot>you want sweet.js
22:07:18  <Bakkot>and you want it to be a build tool, not a part of the language
22:17:49  <TabAtkins>Domenic: Oh gosh, you're right, `*` imports have to be `* as foo` :(
22:18:15  <TabAtkins>But wait, how do you splat an object's keys into the current scope?
22:18:53  <TabAtkins>Bakkot: "you want it to be a build tool" common lisp is shaking its head and sighing
22:19:21  <ljharb>TabAtkins: you can't, without `with (obj) { /* splatted here */ }`, and that won't work in module code
22:19:40  <Bakkot>Object.assign(globalThis, foo)
22:19:54  <TabAtkins>(says the person who wrote CL read-macros to make «» be nestable string indicators, and a macro for infix math)
22:20:00  <TabAtkins>Ah, right.
22:20:49  <devsnek>all we need to do is reify module environment records as subclasses of object environment records
22:20:52  <ljharb>lol true, that would work for all the enumerable string identifier keys on `foo`
22:20:53  <devsnek>:^)
22:22:04  <devsnek>TabAtkins: honestly I'm torn between wanting sweet and wanting this in the language
22:52:34  * jwaldenjoined
23:50:50  * aki_joined
23:51:32  * akirosequit (Ping timeout: 272 seconds)
23:51:33  * aki_changed nick to akirose