06:46 | <Rob Palmer> | The sign-in form is now on the Reflector issue. Please do not post the link here because this is a public channel. |
06:51 | <Rob Palmer> | Please could someone try the form to check it's working. |
06:55 | <ryzokuken> | Rob Palmer: just did |
06:55 | <legendecas> | I filled out the form and it works |
06:55 | <ryzokuken> | thanks legendecas! |
08:52 | <Rob Palmer> | There are 5 of us in the Jitsi call. We'll kick off in 8 mins! |
08:58 | <Rob Palmer> | 13 people are here - two mins to go! |
09:03 | <Rob Palmer> | 26 people now - and we are go |
09:05 | <Jack Works> | what is the password of the meeting? |
09:05 | <Rob Palmer> | use the form on the reflector |
09:05 | <Rob Palmer> | do not post the password here |
09:05 | <Jack Works> | oh ok thanks |
09:30 | <Rob Palmer> | 40 people are here now - good turnout for 2am Pacific Time |
09:31 | <shu> | many folks missing affiliations in the names |
09:33 | <Aki> | anyone who just shows up as an email address probably has an 8x8 meet account |
09:33 | <Aki> | which doesn't support display names???? |
09:33 | <bakkot> | Several of the people in the 8x8 don't have full names even |
09:34 | <Aki> | yeah i see that |
09:35 | <ryzokuken> | there's literally someone with test123 on here 😅 |
09:39 | <yulia> | Aki: should we give an announcement about that? possible tighten the form so that if the name is not on the form they get booted? |
09:39 | <Aki> | Yup. that's my plan |
09:40 | <ryzokuken> | did we have local-only meetings in 2019? |
09:44 | <Aki> | we haven't had a local-only meeting in… idek 6 years? |
09:45 | <ryzokuken> | sounds good, I was just confused because they were mentioned in Istvan's report as "no longer on the table" but I thought they had been so for a while |
09:51 | <waldemar> | SDO = Standards Development Organization ☺ |
09:52 | <yulia> | who wants to add SDO (syntax directed operation) to terminology? https://github.com/tc39/how-we-work/blob/master/terminology.md |
09:52 | <yulia> | we can add both definitions, i thought "standards development org" at first |
09:54 | <yulia> | Ashley Claymore volunteered |
10:01 | <Ashley Claymore> | https://github.com/tc39/how-we-work/pull/102/files |
10:01 | <Ashley Claymore> | Should I add 'standards development org' too? |
10:01 | <Ashley Claymore> | To avoid confusion |
10:10 | <yulia> | yeah, i think we use both in the tc39 context |
10:10 | <yulia> | for example "ecma is an SDO" for that context |
10:13 | <Ashley Claymore> | added both :) |
10:14 | <Rob Palmer> | We have 5 people with non-compliant Jitsi display names. Please can these people rename to use their full name and (affiliation/company) Waldemar, 393939, feng, Hongjian Yang, ZY |
10:19 | <Aki> | waldemar: psst (you're still missing the (Google) part |
10:25 | <leobalter> | I just catching up (was out of electricity here) but I'm happy to see the nominations for the Ecma award. Thanks yulia for coordinating this! |
10:30 | <bakkot> | Aki: speaking of scheduling stuff, Michael and I would like to defer the subclassing discussion to a later meeting |
10:30 | <Michael Ficarra> | we've already removed it from the agenda |
10:31 | <Aki> | no shit! WELL. that changes things. |
10:31 | <Michael Ficarra> | sorry, we should've given you a heads up |
10:31 | <Aki> | all good. i'm sure Ron Buckton will appreciate |
10:31 | <Michael Ficarra> | turns out subclassing builtins is a very complicated topic |
10:32 | <Aki> | imagine that |
10:37 | <Michael Ficarra> | can we advance the queue so I can add a reply? |
10:38 | <Aki> | done |
10:49 | <Michael Ficarra> | Jack Works: you're only looking to expose the composition of serialise/deserialise, not either individually, right? |
10:53 | <Jack Works> | Jack Works: you're only looking to expose the composition of serialise/deserialise, not either individually, right? |
10:53 | <Jack Works> | but I never presented it to the committe because I didn't make clear about how I should design those APIs |
10:57 | <Jack Works> | Design goals:
|
10:58 | <Michael Ficarra> | so it's going to be an opaque blob? |
10:58 | <Rob Palmer> | we are breaking for 62 mins. returning at 13:00 UK time |
10:58 | <Jack Works> | so it's going to be an opaque blob? |
11:00 | <Jack Works> | My current idea is
|
11:02 | <Michael Ficarra> | k, as long as you can't inspect it and rely on it |
11:03 | <Michael Ficarra> | though if you plan to have it able to be stored in IndexedDB, I don't see how you're going to do that |
11:03 | <Michael Ficarra> | will it still be opaque in IndexedDB? |
11:07 | <Jack Works> | will it still be opaque in IndexedDB? |
11:10 | <Jack Works> | if e.g.
|
11:58 | <Rob Palmer> | We will be starting the meeting in 2 mins |
12:09 | <bakkot> | date.parse is never going to have agreement among engines I think |
12:09 | <shu> | exactly yes |
12:13 | <bakkot> | there was that one person (from Mozilla maybe?) a few years ago who was trying to come up with an intersection semantics but then they left and never came back |
12:14 | <shu> | yeah |
12:14 | <shu> | that convinced me it was a lost cause |
12:14 | <shu> | also a spectacular waste of engineer time |
12:19 | <Michael Ficarra> | why is this not an arrow? |
12:20 | <Michael Ficarra> | just so we can do cool point-free stuff? |
12:21 | <bakkot> | I don't think this counts as point-free, strictly speaking |
12:21 | <bakkot> | the ? is a point |
12:21 | <annevk> | The one thing I'd like to say on waste of time is that the number of engineers downstream from the specification is vastly larger and to some extent they also have to deal with engines disagreeing here. (I'm glad HTML parsing got solved eventually as that had similar sentiments attached to it.) |
12:22 | <HE Shi-Jun> | is f~() (without any ? or ... ) valid syntax? |
12:23 | <leobalter> | Surma: Count me in for Stage 3 review of Module Blocks. I have direct interest for this feature and I need to get on the specs to make sure it connects well with ShadowRealms. |
12:25 | <leobalter> | I just can't guarantee I'm gonna be awake for the time you present it :) |
12:26 | <Surma> | That’s okay! I also have Guy Bedford volunteering to be a reviewer, and I don’t think they’re awake ;) |
12:26 | <shu> | annevk: fair, but in this case we have good agreement on the superior solution, Temporal |
12:26 | <HE Shi-Jun> | two placeholder .... oh |
12:26 | <shu> | such that there's no point in salvaging the old thing. i thought people are already shipping usertime libraries today instead of relying on the brokenness of Date.parse |
12:28 | <annevk> | shu: I'm not sure it needs salvaging; picking an implementation as winner seems preferable to implementation-defined behavior |
12:28 | <bakkot> | annevk: people switch on which engine they are running on before calling Date.parse sometimes, so I don't think we can even get away with that |
12:31 | <jschoi> | Sorry, where’s the queue link posted again? |
12:31 | <bakkot> | reflector |
12:33 | <jschoi> | I’m checking there, but I don’t see a queue link, sorry. What section is it under? |
12:33 | <bakkot> | https://github.com/tc39/Reflector/issues/396 under "TCQ" |
12:33 | <bakkot> | (that link will only work for delegates) |
12:34 | <jschoi> | Ah, sorry! I had not realized that was the acronym. |
12:38 | <Michael Ficarra> | legendecas: the downside of a.b~() being the only way to bind is that it only allows binding to an object the function is already installed on, not an arbitrary object |
12:40 | <leobalter> | I'm glad the to see the TCQ reflecting a lot of my thoughts already. For a big majority, the arrow function seems much easier to read. For constructors it feels lacking motivation and perhaps some weird way to sugar class inheritance. |
12:41 | <shu> | Michael Ficarra: compose it with comma expressions to first assign b to a , then delete it |
12:44 | <Rob Palmer> | shu: to your question on benefit over arrow functions: Benedict optimized bind to an inch of its life and ultimately made them faster than arrow functions (I believe). I wonder if this extra ability to bind arbitrary positions could eliminate the need for arrow functions so much, and therefore lead to possible performance wins. |
12:45 | <Michael Ficarra> | MM is making the exact point I wanted to make: readers are going to have a harder time with this, for basically no benefit |
12:46 | <shu> | Rob Palmer: i can see it being more optimizable, yes |
12:46 | <yulia> | I think arrow functions haven't been fully optimized yet if they are still slow. It isn't the syntax that causes this impact here. I wouldn't go with a performance argument for this |
12:46 | <shu> | but that is far, far below other considerations here |
12:47 | <yulia> | Rob Palmer: i can see it being more optimizable, yes |
12:47 | <shu> | it's easier to analyze, right? |
12:47 | <yulia> | right, i was thinking about a simpler case |
12:47 | <shu> | whereas for arrows that do simple forwarding + argument reordering/shuffling, you'd have to pattern match |
12:47 | <yulia> | yep yep, i didn't read fully -- sorry |
12:47 | <Rob Palmer> | creating an arrow function captures more scope (the execution context) |
12:48 | <shu> | it doesn't have to |
12:48 | <shu> | you could analyze more in the frontend if you really cared, i suppose, to pattern match on forwarding patterns |
12:49 | <shu> | but speculative optimizability is not compelling enough for this |
12:49 | <shu> | what are you doing such that you're creating so many forwarding functions? |
12:50 | <Rob Palmer> | glue. lots of glue. |
12:51 | <shu> | if the cost of glue is too high |
12:51 | <shu> | there might be avenues of exploration on a better bind here, than syntax |
12:52 | <ljharb> | +1 to a better bind (but "better" would require syntax imo) |
12:52 | <Michael Ficarra> | better would probably require syntax, yes |
12:53 | <shu> | i meant better only in terms of optimizability, i guess |
12:53 | <shu> | unless glue code writers also really care about how their glue code looks |
12:53 | <shu> | but i'm less sympathetic to that though |
12:54 | <bakkot> | i would be pretty surprised to see a JS codebase in which the difference in optimizability between arrows and .bind had a user-visible effect on performance |
12:58 | <jschoi> | To add onto Ron mentioning bind-this, PFA syntax and bind-this are orthogonal, would synergize, and have very small overlap. Examples in a moment. |
12:59 | <jschoi> |
|
13:00 | <jschoi> | Of course, PFA syntax does not address changing the receiver of a function call.
|
13:00 | <jschoi> | PFA syntax and bind-this can also work together, when creating bound functions with multiple partially applied arguments, which people sometimes do use
|
13:10 | <shu> | gathering my thoughts some more: i can live with pipeline because, while i disagree with its motivations there as well (e.g. naming intermediates is too onerous), i have a sense that there is in fact a large number of folks clamoring for it and really want to type it. syntax catering to popularism is fine by me, active harm excepted. but here, i haven't gotten the sense there is a large number of folks clamoring for it |
13:11 | <rbuckton> |
|
13:12 | <yulia> | gathering my thoughts some more: i can live with pipeline because, while i disagree with its motivations there as well (e.g. naming intermediates is too onerous), i have a sense that there is in fact a large number of folks clamoring for it and really want to type it. syntax catering to popularism is fine by me, active harm excepted. but here, i haven't gotten the sense there is a large number of folks clamoring for it |
13:15 | <annevk> | bakkot: that's fair, but that's always a problem; I've seen it happen more than once that such cases end up getting overturned due to newer code (perhaps on other websites) relying on the behavior of a single browser. You cannot win with implementation-defined. |
13:17 | <sarahghp> | I feel like popular syntax has a life span, and pipeline creates a new way to write pretty much anything. So, i feel like it is much more risky than it appears. I really think we should be careful with pipeline. But there is clearly a broader issue here, which multiple proposals touch on, and it doesn't feel like it has been fully expressed yet. |
13:17 | <waldemar> | rbuckton: g is an example of a function on which you get the same thing whether or not you invoke it with new. But most functions aren't like that: function F() {}; const o2 = F(); // undefined const o3 = new F(); // object |
13:18 | <rbuckton> |
new new Function() |
13:18 | <shu> | sarahghp: always good to hear a practitioner's take, thanks |
13:18 | <waldemar> | I know. |
13:19 | <rbuckton> | That was the point I was addressing though. |
13:19 | <waldemar> | We're still talking past each other,. |
13:20 | <waldemar> | If you wrap new so that it's invoked with a call, it makes no sense to new it again. |
13:20 | <waldemar> | We have no concept of a double-new. |
13:22 | <waldemar> | const g from the presentation should be only callable, not constructible. |
13:22 | <rbuckton> | My point was that the behavior is analogous to the function g() { return new C(); } example, above. Banning new g() seems strange to me, but I'm not opposed to that. |
13:23 | <rbuckton> | waldemar: I believe ljharb preferred the opposite, that a new C~() would require new at each call site. |
13:23 | <waldemar> | No because that function g does the same thing whether you new it or not. Use a function that does something different on new in the example. |
13:23 | <ljharb> | bound constructors require new at the callsite |
13:23 | <ljharb> | so that's the same thing i'd expect here |
13:23 | <rbuckton> | The approach I went with was to just do what function g() { return new C(); } does, in that calling new g() isn't valuable but doesn't break anything. |
13:24 | <Jack Works> | example code: |
13:25 | <Jack Works> |
|
13:25 | <Jack Works> | although we know expr() must be evaluated in the new module, it's not clear on the syntax |
13:26 | <Jack Works> | because it didn't have a good visual separator { } |
13:26 | <rbuckton> | A partial application of
|
13:27 | <rbuckton> | The difference is between C~() and new C~() . |
13:30 | <rbuckton> | if we don't have
However, not having
|
13:30 | <Surma> | Process question: What do I do with reviewers? Do I have to collect/write them down somewhere? |
13:30 | <rbuckton> | They're usually added to the notes. |
13:31 | <ryzokuken> | Surma: you may include a list of reviewers to the explainer/README, that's something folks do |
13:31 | <ljharb> |
C in line 2 (unless you're saying people will be confused by PFA syntax and think it's invoking a function). i think C() and g() should throw the same, though. |
13:34 | <Jack Works> | https://github.com/tc39/proposal-js-module-blocks/issues/45 |
13:36 | <rbuckton> | I'm fine with have partial application without
|
13:37 | <rbuckton> | But that suffers from the same problem as Function.prototype.bind : needing to rely on a method that could be patched at runtime. |
13:37 | <Surma> | Can someone tell me Guy Bedfords association? Or where I can look it up? |
13:38 | <nicolo-ribaudo> | I think Guy is an Invited Expert |
13:41 | <Surma> | Stage 3 reviewers PR here! If I missed anyone, please leave a comment :) Thanks to everyone who volunteered! https://github.com/tc39/proposal-js-module-blocks/pull/56 |
13:41 | <Rob Palmer> | Guy is a delegate of OpenJS Foundation |
13:45 | <Michael Ficarra> | I have no normative comments for DurationFormat, but it does still need a bit of editorial work, which we can address during stage 3 |
13:48 | <bterlson> | erights: welcome to the matrix |
13:48 | <erights> | (test please ignore) |
13:48 | <Jack Works> | Stage 3 reviewers PR here! If I missed anyone, please leave a comment :) Thanks to everyone who volunteered! |
13:50 | <Surma> | THanks Jack Works. I’ll add you to the PR |
13:52 | <Surma> | Jack Works: Sorry, what’s your affiliation? |
13:55 | <Jack Works> | Jack Works: Sorry, what’s your affiliation? |
13:55 | <HE Shi-Jun> | MM is making the exact point I wanted to make: readers are going to have a harder time with this, for basically no benefit |
13:55 | <Jack Works> | I'm from Sujitech |
13:57 | <Michael Ficarra> | I'm not disagree MM, but IMO, hack style pipe have very similar problems. So... |
14:03 | <HE Shi-Jun> | gathering my thoughts some more: i can live with pipeline because, while i disagree with its motivations there as well (e.g. naming intermediates is too onerous), i have a sense that there is in fact a large number of folks clamoring for it and really want to type it. syntax catering to popularism is fine by me, active harm excepted. but here, i haven't gotten the sense there is a large number of folks clamoring for it |
14:05 | <bakkot> | I just updated the conclusions for the various topics in the notes; presenters, please make sure I captured it accurately |
14:08 | <HE Shi-Jun> | The kind of code to which pipeline applies (temp variables to make a transformation tube) is very common. I don't think I've ever come across cases where partial application of a middle argument is necessary. |
14:08 | <ljharb> | i don't need partial application, but i desperately need hack style pipeline, more than i need F# style |
14:09 | <ljharb> | (i could use all three for things, but "need" is different than "could use") |
14:12 | <sarahghp> | Yes, I think I am more in ljharb 's boat there as well. |
14:12 | <sarahghp> | It's rare I do PFA that bind would not suffice for. |
14:13 | <HE Shi-Jun> | Yeah I agree, but the pipe had so much community demand, we had to do something |
14:17 | <HE Shi-Jun> | i don't need partial application, but i desperately need hack style pipeline, more than i need F# style |
14:17 | <ljharb> | can't speak for everyone, but my real requirements are "be able to make nested function calls, some of whose arguments are non-simple expressions, left to right" |
14:17 | <ljharb> | what i mean is, i don't need what F# or PFA offers, but of course they can be used for what i need |
14:17 | <ljharb> | the smallest thing that does what i need tho is hack, and i don't have a need for PFA outside of that. |
14:17 | <rbuckton> | JavaScript straddles the fence between an OOP-style language and an FP-style language, without really being stellar at either. The partial application and pipeline proposals (in their various forms) have been trying to chip away at the FP-style side since 2018 to improve the language for those folks, similar to the decorators and public/private field proposals trying to chip away at the OOP-style side. |
14:18 | <shu> | HE Shi-Jun: polling is a hard problem. we'll never really have the resources to do scientific polling. if your question leads to "we should ignore developer signals because we don't have a good enough polling mechanism", that's not a position that reckons with reality |
14:19 | <shu> | so we do with the best we have, direct constituents we can poll (e.g. internal partners at our workplaces), anecdotes, compelling arguments from delegates, etc |
14:19 | <shu> | and the sense from those various sources is that there is enough demand for pipelines for us to do something, despite my personal reservations |
14:20 | <HE Shi-Jun> | the smallest thing that does what i need tho is hack, and i don't have a need for PFA outside of that. |
14:20 | <sarahghp> | I guess — and I am being genuine here — I don't really see how PFA helps with the FP-"flavored" JS with which I am most familiar. The hard-core FP heads already are living their unary lives if the F# threads are to be believed and otherwise idiomatic JS is written so that arguments apply in order or are argument bags. |
14:21 | <ljharb> | HE Shi-Jun: to be clear, i'm not opposed to F# or PFA, in general or on the basis of "it's more than i need". i'm just pointing out that your assertion that someone who needs hack will also need PFA or F# is incorrect. |
14:24 | <shu> | zzz time |
14:27 | <HE Shi-Jun> | HE Shi-Jun: polling is a hard problem. we'll never really have the resources to do scientific polling. if your question leads to "we should ignore developer signals because we don't have a good enough polling mechanism", that's not a position that reckons with reality |
14:28 | <HE Shi-Jun> | But just "give people something". |
16:30 | <legendecas> | legendecas: the downside of |
16:33 | <legendecas> | And they are both sugars for Function.prototype.bind with feature augmentations. |
16:41 | <jschoi> | And they are both sugars for I wrote about this in https://github.com/js-choi/proposal-bind-this/blob/main/README.md#pfa-syntax. I also have a slide devoted to this in my upcoming presentation about bind-this. |
16:42 | <jschoi> | PFA syntax does not address the clunkiness of this:
…or this:
|
16:42 | <jschoi> | Bind-this does not address fn.bind(null, ...args) . |
16:43 | <jschoi> | At most they overlap somewhat when the receiver object itself contains the function to which we wish to bind. In that case, PFA syntax would be terser than bind-this, because bind-this would require repeating the receiver.
|
16:44 | <jschoi> | But there are many cases in which it is not the case that you want to bind/call a function on an object that does not already contain that function. In fact, that may be the majority of uses of .call . And there are a lot of uses of .call : it’s one of the most frequently used JavaScript methods. |
16:50 | <legendecas> | This is a very detailed explanation, thanks! I'm very eager to see the progress of bind operator. However, I'm a bit concerned that several proposals are trying to do it in different directions and they all overlaps in one use case or another. |
16:53 | <jschoi> | That is understandable.
Anyways, I view PFA syntax and bind-this (and pipe operator) as pretty orthogonal. I understand Yulia’s desire to see if there’s a grand unifying syntax that could address all of the use cases, but I think the old bind operator kind of tried to do that and got stuck in the muck. bind-this, at least, tries to solve only one problem: .call/.bind are very common but are very clunky. Because of that, it can combine with PFA syntax or the pipe operator or whatever well. |
17:05 | <legendecas> | this::smartRound~(this, params.floatPrecision, ?) Sorry but I'm confused by this example. Why the first argument of ~() is been treated as this binding? |
17:51 | <shu> | HE Shi-Jun: i hear you, but we've been debating "which pipeline" on more principled grounds for years with no real progress |
18:14 | <Ashley Claymore> | IMO one nice little detail of hack pipes is that they can be slotted into the middle of a method call chain without changing any of the surrounding code
|
18:25 | <jschoi> | Apologies; I made an error. It should indeed be this::smartRound~(params.floatPrecision, ?) to be equivalent to x => this::smartRound(params.floatPrecision, x) . I have corrected my previous message. |
19:42 | <devsnek> |
|
19:53 | <ljharb> | how is it ambiguous? |