00:00:28  <devsnek>markdown tables need wider rendering on github
00:00:29  <bterlson>devsnek: say hello to your rep maggiepint ;)
00:00:33  * mattijsquit (Ping timeout: 240 seconds)
00:00:48  <devsnek>everything looks equally terrible cuz its newlined to death
00:00:59  <jschoi>devsnek: Yeah, I had to really modify the real-world examples to not cause scrolling. Very annoying. Oh, are you looking on a phone?
00:01:05  <devsnek>nah
00:01:23  <devsnek>github just has harsh rendering width limits
00:01:36  <devsnek>bterlson: who is maggiepint?
00:03:20  <devsnek>jschoi: did you come up with this: `+> # + 2`
00:03:39  <bterlson>devsnek: works on moment, reps jsf to tc39
00:03:45  <devsnek>ah
00:04:24  * bradleymeckquit (Quit: )
00:04:25  <jschoi>devsnek: Yeah. Probably influenced by Clojure.
00:04:30  <jschoi>bterlson: https://twitter.com/__jschoi/status/971536904662409216?s=21
00:04:45  <devsnek>maybe node.js can buy a seat and send me to your meetings 😄
00:08:41  <devsnek>jschoi: i'm trying to star your repo but github is glitching out
00:09:05  <jschoi>But I have to stress that that `+> # + 2` form is an additional feature that is not part of the core proposal. It does show the potential of simply extending the core proposal to handle composition, partial application, and method extraction with just one more operator. I tried to keep it forward compatible with all of the additional features. But I don’t want to scare people with too much at once, though.
00:09:16  <jschoi>Ah, I appreciate the sentiment.
00:09:34  <devsnek>https://i.imgur.com/PddLcsa.png
00:09:46  <devsnek>yea i realize all that other stuff is extra
00:16:41  * AtumT_quit (Remote host closed the connection)
00:21:06  <littledan>devsnek: If you are part of an organization that wants to become a TC39 member, let's be in touch; I can help you make that happen. You can email me at littledan@igalia.com
00:21:22  <littledan>I mean, an Ecma member
00:21:27  <littledan>we're always happy to have new members
00:21:29  <devsnek>hehe i'm honored, but i'm just a junior in high school :)
00:21:37  <littledan>oh, hehe
00:21:47  <devsnek>maybe someday
00:22:09  <littledan>I got into programming languages when I was in high school too, though I think you chose a more meaningful project than I did at the time
00:22:53  <devsnek>i mean, you're here deciding the future of the most used programming language in the world, so it seems to have worked out 😄
00:31:52  <bterlson>devsnek: how many of your peers know about IRC? just curious
00:32:05  <devsnek>at my school?
00:32:28  <bterlson>yeah
00:32:29  <devsnek>i haven't met anyone else there who does this kinda thing
00:32:34  <devsnek>and its a fairly small school
00:32:39  <bterlson>ah
00:32:56  <devsnek>why ask?
00:33:17  <devsnek>just cuz its weird to see someone my age on irc? 😆
00:33:42  <bterlson>in my day (over a decade ago :-P) there were so many reasons to use IRC for a high schooler
00:33:48  <bterlson>I suspect none of them exist now
00:34:15  <devsnek>all the people in my school are on snapchat
00:34:25  <devsnek>i've never really used it tho hehe
00:34:57  <bterlson>well bad news, you need a snapstreak of 100 or more to attend TC39 meetings
00:35:19  <devsnek>i don't even know what that is 😢
00:35:34  * devsnekgoogles "snapstreak"
00:35:53  <devsnek>hah they have a zendesk
00:46:05  <jschoi>For what it’s worth, I had never been able to use IRC until I discovered IRCCloud. IRC always had too high of a cognitive burden for me to use while working, before. But I knew of it in school…in the same sense that I know of Usenet.
00:48:49  <devsnek>i couldn't use irc without a bouncer, i had my own znc instance up until i switched to irccloud
01:01:52  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:08:04  * keith_millerjoined
01:10:51  * keith_millerquit (Remote host closed the connection)
01:11:38  * keith_millerjoined
01:11:46  * mattijs_quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:17:28  * not-an-aardvarkjoined
01:29:32  * kaalchakkajoined
01:40:49  * kaalchakkachanged nick to kaal_away
01:40:58  <TabAtkins>What is the `??:` operator being used in the first examples in https://github.com/js-choi/proposal-smart-pipelines/#core-proposal?
01:41:19  <TabAtkins>Maybe null-coalesce?
01:52:35  <TabAtkins>Crap, I'm *really* happy about @littledan's new pipeline proposal. Feels *very* elegant.
02:03:21  <devsnek>i assumed it was some sort of nullish operator
02:03:24  <devsnek>like the proposal
02:04:54  <jschoi>devsnek, TabAtkins: The `??:` is what the nullish-coalescing infix operator has changed to in recent conversations.
02:05:22  <devsnek>wouldn't be true nullish coalescing without a colon amirite
02:05:24  <TabAtkins>k, that's what I figured, I just hadn't seen that proposal get updated like that
02:05:38  <jschoi>See https://github.com/tc39/proposal-nullish-coalescing/pull/23.
02:06:00  <TabAtkins>jschoi: Thanks a ton for this writeup, btw. (I dunno which of you two actually did it, but thanks to either of you.)
02:06:15  <jschoi>TabAtkins: To which pipeline proposal were you referring to being elegant?
02:06:27  <jschoi>Oh,
02:06:27  <TabAtkins>The one expressed in your explainer
02:06:30  <jschoi>Thanks!
02:06:40  <TabAtkins>It's super good.
02:06:49  <TabAtkins>Like, addresses all of my concerns, in just its base form.
02:09:02  <TabAtkins>jschoi: In the first arrow-function example, the arrow function isn't parenthesized; in later ones it is, and there's an section explicitly about having to parenthesize it. Is this valid just because it's in the final leg of the pipeline?
02:09:03  <jschoi>TabAtkins: If I may ask, what concerns have you had, and did you find the structure of the explainer (with the additional features in the same document) confusing?
02:09:14  <jschoi>Oh, it probably is a mistake.
02:09:21  <jschoi>I’ll check.
02:10:31  <jschoi>Yeah, a mistake; forgot to update that part after choosing a precedence level. Whoops.
02:10:42  <jschoi>Needs to be parenthesized.
02:10:51  <jschoi>Would be a syntax error.
02:11:37  <TabAtkins>kk
02:11:49  <TabAtkins>My concerns were:
02:12:27  * TabAtkins1. Handling awaiting a value in the pipeline with any sort of elegance.
02:12:28  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:13:02  <TabAtkins>2. Elm-style "call a function with the LHS value *and* other arguments".
02:13:52  <TabAtkins>3. Anything non-trivial seemed to require the weight (both text-wise and runtime-wise) of a nested arrow function.
02:14:53  <TabAtkins>This solves all of these super elegantly, and then some, while still maintaining the nice bare functional style if that's all you need. V good overall.
02:16:17  <TabAtkins>Only minor concern so far is that the treatment of `new` and `await` in the bare form are actually different - `new` modifies the identifier (`(new foo)(#)`) while `await` modifies the returned value `await (foo(#))`)
02:16:35  <TabAtkins>That's probably fine tho - I think it *reads* well in both cases.
02:18:00  <TabAtkins>(versus just requiring a `|> await #` line following any promise-returning functions that you want to wait on)
02:18:12  <not-an-aardvark>Is it intentional that there is an early error for something like `text |> loud ? toUpperCase : toLowerCase` ?
02:18:47  <not-an-aardvark>From what I can tell that would be an early error because the `#` is not used, even though the expression is actually intended to be a conditional function to apply in the pipeline.
02:19:03  <TabAtkins>Yes, that's an early error, and it's intentional from my reading, to avoid accidental foot-shooting.
02:19:19  <TabAtkins>Non-trivial expressions have to use the topic form.
02:19:38  <jschoi>TabAtkins: Thanks! Yes, I tried to keep bare style minimal and hopefully the difference between its three forms is not a big burden.
02:19:49  <TabAtkins>`text |> loud ? toUpperCase(#) : toLowerCase(#)` is pretty trivial.
02:20:01  <not-an-aardvark>Fair enough
02:20:11  <jschoi>not-an-aardvark: Yes. Bare style is meant to be simple to distinguish without garden-path parsing, the avoidance of which is one of the goals.
02:21:00  <TabAtkins>Another *huge* benefit of bare form as written, which wouldn't apply if arbitrary expressions like the above were allowed: CAN GRAB METHODS WITHOUT HAVING TO MANUALLY BIND THEM
02:21:09  <TabAtkins>(Because it's a call form, so it handles the binding for you.)
02:21:27  * keith_millerjoined
02:21:42  <not-an-aardvark>Can pipelines be nested? If so, would the `#` in an inner scope shadow the one from the outer scope?
02:21:54  <TabAtkins>Yes and yes - it's in the examples nearer the bottom.
02:22:04  * jwaldenquit (Quit: ChatZilla 0.9.92-rdmsoft [XULRunner 35.0.1/20150122214805])
02:22:09  <not-an-aardvark>Never mind, just found the example. Thanks.
02:25:35  <TabAtkins>Like, frickin, the fact that `sel |> document.querySelector |> foo` works is super great. In the old pipeline (RHS was an arbitrary expression that must evaluate to a function, which is invoked with the LHS) you'd have to write `sel |> (x=>document.querySelector(x)) |> foo` or `sel |> document.querySelector.bind(querySelector) |> foo`.
02:28:09  <TabAtkins>jschoi: Last example in the BP feature section is using ? as the topic ref in the pipeline example; should be #.
02:29:48  <jschoi>Do you mean `$` not `?`? But yes, I see the mistake. Will fix soon.
02:30:01  <jschoi>Thanks!
02:34:27  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:34:38  <TabAtkins>Yeah, sorry.
02:37:45  <TabAtkins>jschoi: Example in the PF section showing how it combines with PP has a few syntax errors; look mostly like leftovers from previous syntax ideas.
02:40:27  <jschoi>TabAtkins: The ones with array.map? Yeah, I see some mistakes. Thanks!
02:41:31  <TabAtkins>jschoi: Shoot, I think the vastly improved usability of methods with this proposal needs to be front-and-center when comparing with the old proposal. Both `val |> foo.bar` working as expected (bar retains its foo binding) and `val |> #.foo`; both require an explicit arrow function (or a bunch more syntax) to work in the old version.
02:45:17  <TabAtkins>jschoi: omg, `+> foo.bar` giving us method extraction for free, goddammit this is good stuff
02:45:35  <devsnek>ikr
03:13:44  <jschoi>TabAtkins: Thanks again for the feedback. The errors you found have been corrected. I’ll try to think of ways to make the `x |> o.m` semantics more prominent, too.
03:44:19  <Domenic>jschoi: I would strongly suggest removing ??: usage. I have no idea what that is and it distracts from the proposal.
03:45:52  <jschoi>Domenic: Will do; I’ll replace it with `||`.
03:48:20  <Domenic>It's pretty compelling, if I can get over the reuse of # :)
03:56:24  <jschoi>Domenic: Thanks! It doesn’t have to be `#`—it could also be `@`. Bikeshedding of the token has been occurring at https://github.com/tc39/proposal-pipeline-operator/issues/91.
04:11:25  * keith_millerjoined
04:12:18  <devsnek>symbol should be ❤
04:46:17  <bterlson>bare style maybe seems like a lot of confusion to save 3 characters?
04:46:41  <bterlson>complexity anyway
04:53:43  <jschoi>bterlson: It depends on how complex its rules are. I tried to make them simple enough to say in one sentence: “one or more identifiers, separated by `.`s, optionally preceded by `new` or `await`”. If you haven’t already taken a look at the formal grammar (https://jschoi.org/18/es-smart-pipelines/spec#sec-pipeline-operator), does it still seem complex after you look at it?
04:54:19  <jschoi>The character savings rapidly multiply over chains of functional composition.
04:54:48  <bterlson>the grammar changes are simple enough
04:56:28  <jschoi>Confusion with topic style is made less likely by the early error that forbids topic-style pipelines that don’t use the topic reference—hopefully enough so that accidental use of topic style instead of bare style is almost impossible.
04:58:12  <jschoi>Or vice versa.
05:05:30  * jmdyck1quit (Remote host closed the connection)
05:08:14  <jschoi>That would go not only for human writing but also for human reading, too. The rules of bare style hopefully ensure that it only can be used when it would not be visually confusable with a topic-style arbitrary expression, by a reader of the code.
05:08:14  * caridyquit (Ping timeout: 268 seconds)
05:11:12  <jschoi>The bare style optimizes for the very common functional style in which unary functions are composed. It also optimizes for the common case of method extraction. The benefits in terseness would be multiplied by the number of times such unary functions or methods are used—hopefully with minimal cost in visual confusion, given the grammar rules and the early errors. That’s the hope.
05:16:38  * caridyjoined
05:35:54  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:39:19  * keith_millerjoined
05:43:50  * kaal_awayquit (Quit: ZZZzzz…)
06:28:54  * pandemjoined
06:52:53  <jschoi>TabAtkins: For what it’s worth, even if bare awaited function calls weren’t part of bare style, you don’t have to do `x |> af |> await #`. You could do `x |> await af(#)`. In fact, that had been my preferred style, before adding bare awaited function calls only recently to the proposal, after finishing rewriting the real-world examples.
07:10:20  * caridyquit (Ping timeout: 268 seconds)
08:52:33  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
09:27:11  * not-an-aardvarkquit (Quit: Connection closed for inactivity)
10:32:05  <littledan>TabAtkins: Glad you're happy about it, but basically all of the work is from the community, not me; it'll be great to have your feedback about the various alternatives, between jschoi 's proposal and the "F#" option that mAAdhaTTah is working through
10:32:43  <littledan>my plan at TC39 is to summarize both of these and get more input that way
10:51:15  * Jayfluxjoined
11:25:28  * mylesborinsquit (Quit: farewell for now)
11:25:58  * mylesborinsjoined
11:28:24  * Jayfluxquit (Remote host closed the connection)
11:39:14  * AtumTjoined
12:12:21  * gskachkovjoined
12:43:37  * gibson0421joined
12:43:40  * gibson042quit (Quit: Leaving.)
13:13:25  * jmdyckjoined
13:27:33  * keith_millerjoined
13:43:24  * gibson0421quit (Quit: Leaving.)
14:19:31  * atticoos_joined
15:05:27  <devsnek>has something like css's @supports been discussed for js
15:07:38  <devsnek>actually scratch that, thats stupid :D
15:11:46  * rwaldronjoined
15:16:33  <littledan>when the spec mentions "the following two cases", should I note that two as a mathematical value or a Number? ;)
15:33:35  <devsnek>as an ieee 754 double precision floating point obviously
15:34:26  <devsnek>i just used a do block instead of a wrapped arrow function and i feel like a god 😄
15:45:10  * mattijsjoined
15:53:11  * caridyjoined
16:13:15  * mattijsquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:21:58  * mattijsjoined
16:24:21  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:46:57  * caridyquit (Remote host closed the connection)
16:47:34  * caridyjoined
16:49:07  * mattijsquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
16:54:09  * mattijsjoined
17:12:24  * Jayfluxjoined
17:17:37  * spectranaut_changed nick to spectranaut
17:31:19  * mattijs_joined
17:32:33  * mattijsquit (Ping timeout: 240 seconds)
17:59:26  * mattijs_quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:01:17  * mattijsjoined
18:06:43  * Jayfluxquit (Remote host closed the connection)
18:20:55  * atticoos_quit (Ping timeout: 265 seconds)
18:31:48  * mattijsquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:32:23  * mattijsjoined
18:33:59  * mattijschanged nick to mattijs[away]
18:35:30  * mattijs[away]quit (Client Quit)
18:39:00  * mattijsjoined
18:48:16  * keith_millerjoined
18:48:39  * keith_millerquit (Remote host closed the connection)
18:49:22  * keith_millerjoined
18:56:28  * mattijschanged nick to mattijs[away]
18:56:42  * mattijs[away]changed nick to mattijs
19:00:22  * mattijsquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:02:49  * mattijsjoined
19:30:28  * mattijsquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:31:58  * kaalchakkajoined
19:32:08  * mattijsjoined
19:43:37  * not-an-aardvarkjoined
19:49:02  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:00:25  * keith_millerjoined
20:05:17  * mattijschanged nick to mattijs[away]
20:07:30  * mattijs[away]quit (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:17:26  * mattijsjoined
20:20:50  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:21:52  * mattijsquit (Ping timeout: 245 seconds)
20:24:30  * kaalchakkaquit (Read error: Connection reset by peer)
21:07:19  * rwaldronquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:10:56  * jwaldenjoined
21:19:44  * keith_millerjoined
21:24:44  <Bakkot>for people paying following the .flatten thing: it is (probably) *not* the difference in default depth which makes it web-incompatible. It's the difference in enumerability. I am probably the source of that misconception, which propogated to michael and thence the world; sorry for speculating without doing the work necessary to confirm my speculation.
21:28:41  <Bakkot>oh, and as a consequence, prefering native implementations vs unconditionally clobbering isn't the issue in this particular case.
21:30:05  <Bakkot>wycats^, my loose reading of twitter suggests you might be among the people I indirectly misled, so want to make sure you see this
21:43:48  <wycats>Yeah I've read your update gist
21:44:51  <wycats>I'll try to propagate
21:58:51  * AtumT_joined
22:02:27  * AtumTquit (Ping timeout: 260 seconds)
22:08:32  * mattijsjoined
22:08:33  * mattijsquit (Client Quit)
22:09:32  * mattijsjoined
22:09:33  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:10:47  * keith_millerjoined
22:12:13  * AtumTjoined
22:12:22  * AtumTquit (Remote host closed the connection)
22:12:57  * AtumT_quit (Ping timeout: 240 seconds)
22:15:48  * keith_millerquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:22:38  * keith_millerjoined
22:22:45  * mattijschanged nick to mattijs[away]
22:27:25  * mattijs[away]quit (Ping timeout: 265 seconds)
22:27:32  * mattijsjoined
22:28:19  * mattijsquit (Client Quit)
22:30:01  * mattijsjoined
22:59:45  * mattijsquit (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:01:04  * mattijsjoined