08:26 | <littledan> | Are we getting the video conference signup link? |
08:27 | <littledan> | I take it the meeting starts in half an hour. I don’t see it on the Reflector |
08:40 | <Rob Palmer> | It was posted on the Reflector 30mins ago. Please refresh. |
08:44 | <Rob Palmer> | We are now admitting people to the Google Meet. Please use Incognito/Private browsing mode - because that will allow you to specify your name. So you can call yourself "Name (Affiliation)". |
08:59 | <Rob Palmer> | We will begin the meeting in one minute! |
08:59 | <Rob Palmer> | If anyone has any troubles dialling in, please say here. |
09:00 | <yulia> | Is tcq not working for anyone else? |
09:00 | <yulia> | I get meeting not available |
09:00 | <Alex Vincent> | try reloading the page - that worked for me yulia |
09:01 | <yulia> | I still get meeting not found. should it be TKTK or is the meeting id different? |
09:01 | <Rob Palmer> | The signin form is available on the Reflector - please can all in-person attendees fill it out too: https://github.com/tc39/Reflector/issues/446 |
09:02 | <Rob Palmer> | I just fixed the TCQ link on the draft schedule |
09:02 | <Alex Vincent> | hm, maybe I'd opened it as a fresh link from the Reflector issue |
09:03 | <rkirsling> | is it an obligation for the host to have a second CoC in play? obviously not a problem if they do have one, but somehow I don't have a recollection of that before |
09:03 | <yulia> | Found it -- the link is different than the text |
09:03 | <Robert Pamely> | Is it viable to turn off the lights above the projection screen? |
09:03 | <Robert Pamely> | Are those lights independent? |
09:05 | <Rob Palmer> | Romulo Cintra: Can you help with lights? |
09:07 | <Rob Palmer> | Thank you Jason and Ashley and Kevin for volunteering for notes! |
09:07 | <bakkot> | btw the bot is using a new language model, which hopefully is better |
09:07 | <bakkot> | we'll see though |
09:07 | <Romulo Cintra> | Romulo Cintra: Can you help with lights? |
09:08 | <Christian Ulbrich> | Romulo Cintra: Thx! |
09:08 | <Robert Pamely> | Thank you |
09:08 | <jasew> | That's much better |
09:08 | <Rob Palmer> | The room is now is dark mode, which helps us to see the projector screen. |
09:09 | <Romulo Cintra> | 🌓 |
09:09 | <nicolo-ribaudo> | Why is the "attendees" section in the notes only for remote people? Having the abbreviations there helps also for in-person attendees |
09:09 | <Rob Palmer> | it should be for both |
09:10 | <msaboff> | Please add your name, abbreviation and organization to the attendees section of the notes (each day). |
09:12 | <Justin Ridgewell> | Rob Palmer: I can't find the sign in form for remote attendees |
09:12 | <Justin Ridgewell> | Only the in person form |
09:12 | <ryzokuken> | Justin Ridgewell: it's on the reflector |
09:12 | <ryzokuken> | please refresh |
09:12 | <Justin Ridgewell> | I did... |
09:12 | <ryzokuken> | it was added a short while ago, you might have the old page loaded |
09:13 | <Rob Palmer> | It's in the video link section |
09:13 | <Justin Ridgewell> | Ahh, got it |
09:13 | <Justin Ridgewell> | It's tooooooo early. |
09:14 | <pipobscure> | BTW TCQ seems to still be on the Welcome/Intro |
09:14 | <jasew> | ryzokuken |
09:15 | <jasew> | Thanks |
09:16 | <rkirsling> | It's tooooooo early. |
09:16 | <Justin Ridgewell> | 4am in NYC. I just woke up |
09:17 | <rkirsling> | ohhh right whoops |
09:17 | <rkirsling> | true dedication |
09:17 | <msaboff> | 4am in NYC. I just woke up |
09:17 | <shu> | i went to sleep at 8:30 |
09:17 | <Rob Palmer> | Thank you for your dedication! |
09:18 | <msaboff> | i went to sleep at 8:30 |
09:18 | <shu> | i don't want to be dedicated i want to be asleep |
09:20 | <rkirsling> | i don't want to be dedicated i want to be asleep |
09:20 | <rkirsling> | except that it's 6pm in Tokyo for this meeting |
09:20 | <rkirsling> | I'm now doomed for US meetings instead lol |
09:28 | <Rob Palmer> | Slides: https://docs.google.com/presentation/d/1sWm_ynPyH_4XHUVwRuGIB6McALQHZXdENncu7BD1q9Y/ |
09:42 | <Rob Palmer> | If anyone struggles with screen-sharing, please just post a link to your slides here and someone helpful can screenshare on your behalf. |
09:47 | <rkirsling> | this was a non-rhetorical question re: hosting, btw (am I just forgetful/unobservant?) |
09:48 | <waldemar> | Is there a list of in-person attendees that the remote folks can see? |
09:48 | <waldemar> | I can't tell who is in the room at the moment |
09:49 | <Rob Palmer> | Waldermar, I'll update the notes doc to ensure in-person attendees are listed |
09:50 | <rbuckton> | I think we actually skipped the "traditional" in-person introductions at the start of the meeting, though that's understandable given how packed the agenda is. |
09:51 | <Rob Palmer> | we did a quick names-only runaround in the room before the meeting started - I will ensure this goes in the notes |
09:53 | <Luca Casonato> | waldemar: we have added "in-person" and "remote" labels to the attendee list in the notes |
09:56 | <ryzokuken> | this was a non-rhetorical question re: hosting, btw (am I just forgetful/unobservant?) |
09:56 | <rkirsling> | no need for apology, just was curious about it |
09:56 | <ryzokuken> | this was basically a request by the Igalia CoC committee and the chair group decided to respect it, I'm not sure if a second CoC has been applied in the past. |
10:13 | <littledan> | What does STR mean? |
10:13 | <ryzokuken> | it was answered in #tc39-beginners:matrix.org |
10:13 | <nicolo-ribaudo> | Steps to reproduce |
10:13 | <littledan> | Oh thanks |
10:14 | <bakkot> | someone want to PR the glossary with that? seems useful |
10:18 | <Luca Casonato> | someone want to PR the glossary with that? seems useful |
10:20 | <rkirsling> | is it used enough to justify? seems like we all shared the same confusion, so it might not be encourageable? |
10:21 | <littledan> | We often say “test case” for this sort of thing |
10:27 | <Luca Casonato> | https://github.com/tc39/how-we-work/pull/124 <- PR, if we want to merge it. |
10:30 | <littledan> | “groupedBy” |
10:34 | <littledan> | Three options or two? |
10:35 | <rbuckton> | A static method results in a pretty bad developer experience though. I've had some of the same issues with some of the Temporal APIs |
10:35 | <rkirsling> | which do you mean? |
10:35 | <Rob Palmer> | https://github.com/tc39/how-we-work/blob/main/presenting.md#temperature-checks |
10:37 | <rbuckton> | I discussed this awhile back about the poor DX around things like Temporal.Duration.compare being static only, though I haven't followed up. Until something like pipeline advances, it breaks left-to-right reading order. |
10:37 | <rkirsling> | tbh I feel like this is about more than just the method at hand is the thing |
10:38 | <rkirsling> | given the difficulty of adding methods to Array in general |
10:38 | <rbuckton> | I agree there, its disheartening that Array is constantly so difficult to extend. |
10:39 | <Michael Ficarra> | should we consider just pursuing this as an iterator helper method? |
10:40 | <rbuckton> | Its unfortunate because I believe this is something that belongs on Array.prototype. And this won't be the last time we run into this. |
10:43 | <Robert Pamely> | What is it that the static methods is consistent with? Object groupBy? |
10:43 | <rbuckton> | Another way to approach this might have been a .collect(collector) a. la. Java collectors (https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html), but that's a completely different proposal |
10:44 | <rbuckton> | (i.e., array.collect(Collector.groupBy(keySelector)) ) |
10:44 | <nicolo-ribaudo> | What is it that the static methods is consistent with? Object groupBy? |
10:45 | <Robert Pamely> | Oh I see ok |
10:45 | <Robert Pamely> | I see that as quite a different helper from groupBy |
10:46 | <yulia> | did i miss the bit where we had bathroom explainations? cc ryzokuken |
10:46 | <Kris Kowal> | I like the suggestion for Object.groupBy and Map.groupBy , where you select the return type with the constructor. |
10:46 | <ryzokuken> | did i miss the bit where we had bathroom explainations? cc ryzokuken |
10:46 | <Robert Pamely> | "Entries" are an array representation of an object. groupBy is an operation on an array. |
10:46 | <ryzokuken> | I could do that right after this item |
10:46 | <yulia> | "Entries" are an array representation of an object. groupBy is an operation on an array. |
10:47 | <Robert Pamely> | Entries have to have a specific shape though |
10:47 | <Robert Pamely> | groupBy is more like reduce than fromEntries |
10:47 | <rbuckton> | I like the suggestion for |
10:47 | <Kris Kowal> | "Entries" are an array representation of an object. groupBy is an operation on an array. |
10:48 | <Kris Kowal> | I'm not entirely against it, but I'd again rather see something like a formal collector API that those statics could be built off of. |
10:48 | <Robert Pamely> | Of a map (and by implication objects-as-dictionaries, which are map-alike) |
10:48 | <jasew> | I like the suggestion for |
10:48 | <bakkot> | Of a map (and by implication objects-as-dictionaries, which are map-alike) |
10:49 | <bakkot> | My understanding is this proposal only adds a static to Array right? Is there an addition to Object and Map also and i missed that? |
10:49 | <jasew> | I see |
10:50 | <Robert Pamely> | Given users are used to finding helpers like reduce on the array prototype, I don't think it will be obvious to look for these on Object and Map |
10:50 | <Kris Kowal> | Yes, I believe yulia suggested using Object and Map constructors as receivers instead of Array. |
10:50 | <yulia> | yeah i think that was just a mistake in the slides |
10:51 | <Justin Ridgewell> | Yes, it was a typo to have Array.groupBy and Tuple.groupBy |
10:51 | <Kris Kowal> | In any case, X.of is the good precedent for X.groupBy . Both return instances of X and have an open range for values of X . |
10:51 | <Justin Ridgewell> | It should just be Object.groupBy , Map.groupBy (and WeakMap ), and possibly Record.groupBy |
10:52 | <Kris Kowal> | That is, provides clear guidance for a library SortedMap.groupBy |
10:52 | <jasew> | This makes more sense to me now, thanks for clarifying |
10:52 | <yulia> | Given users are used to finding helpers like |
10:53 | <bakkot> | groupBy is kind of a weird name if this is a static |
10:53 | <bakkot> | though I don't have a better one |
10:54 | <jasew> | fromGrouped? like fromEntries? I don't have a better name either |
10:54 | <Robert Pamely> | fromGrouped? like fromEntries? I don't have a better name either |
10:55 | <rbuckton> | The Java grouping collector is groupingBy , which was one of the options listed as an alternative for the .prototype version, if we're going to change the name anyways |
10:55 | <bakkot> | if we're ok with groupingBy it can probably still be on Array.prototype |
10:55 | <bakkot> | I doubt that will have conflicts like group and groupBy did |
10:55 | <rbuckton> | if we're ok with .groupedBy in that case. |
10:56 | <bakkot> | though groupingByToMap is... not... a great name |
10:56 | <bakkot> | yeah I think I like groupedBy personally |
10:56 | <yulia> | if we continue to go with the prototype, then I don't think we can again just implement it and hope for bugs if there are problems |
10:56 | <yulia> | is there a more robust way we can test this name? |
10:56 | <bakkot> | yulia: even with a really weird name like groupingBy ? |
10:57 | <rbuckton> | groupingBy indicates something that produces a thing will do the grouping (i.e., Java's Collectors.groupingBy ), where as groupedBy indicates something that produces the grouped result. |
10:57 | <bakkot> | conflicts with group and groupBy are not too surprising because those are natural names that people might use |
10:57 | <yulia> | groupingBy and groupToObject is probably safe... but is this really better than it being a static if we are looking for really weird anmes? |
10:57 | <rkirsling> | Object.groupsFromArray? |
10:57 | <bakkot> |
eh, personally I think so |
10:57 | <yulia> | Object.toCategories? |
10:57 | <yulia> | idk |
10:57 | <bakkot> | statics are quite strange for this |
10:57 | <jasew> | Something with from in the name often implies one type (input) to another (usually the same as the reciever) |
10:57 | <Robert Pamely> | groupingBy and groupToObject is probably safe... but is this really better than it being a static if we are looking for really weird anmes? |
10:58 | <yulia> | One concern with static is chaining too. Without pipeline you lose the ability to easily chain at the end of array operations. |
10:58 | <bakkot> | sure you would |
10:58 | <rkirsling> | Object.toCategories? |
10:58 | <rbuckton> | As I mentioned earlier, I wonder if a comprehensive check for a more general-purpose Array.prototype.collect method would make sense, plus a formalized Collector API. |
10:58 | <bakkot> | x.filter().groupBy() is a pretty common thing to want |
10:59 | <yulia> | but you would have an object after groupBy |
10:59 | <Robert Pamely> | Object.groupBy(arr.filter().map()) vs arr.filter().map().groupedBy() |
10:59 | <rbuckton> | |
10:59 | <yulia> | ah i see what you folks mean |
10:59 | <yulia> | thats fair |
10:59 | <rkirsling> | groop |
10:59 | <bakkot> | As I mentioned earlier, I wonder if a comprehensive check for a more general-purpose groupBy . .collect(Collectors.groupBy) is much worse than groupedBy . |
11:00 | <Robert Pamely> | |
11:00 | <yulia> | i mean, we can't even decide on a name for the language so ;) |
11:00 | <yulia> | officially its ECMAScript, which is the only still-capitalized thing for Ecma international |
11:01 | <rbuckton> | but you would have an object after groupBy groupBy would produce an array of groupings (i.e., key/values pairs) |
11:01 | <Kris Kowal> | Using groupBy will be good for discovery. |
11:01 | <yulia> | so i prefer to think that its still European Computer Manufacturer's Association Script, or, per the sporting world, soccer script |
11:01 | <yulia> | ill show myself out |
11:01 | <rkirsling> | has anyone ever tried to align the capitalization of ECMAScript? haha |
11:02 | <rkirsling> | clearly a task worthy of time and effort 🙄 |
11:02 | <shu> | you know that's not the OG ecma |
11:02 | <Robert Pamely> | Using |
11:02 | <shu> | the OG ecma is carton manufacturers |
11:02 | <shu> | https://www.ecma.org/ |
11:02 | <Kris Kowal> | In what sense? Searching docs? |
11:02 | <rbuckton> | I am not necessarily opposed to such a thing, but I have a hard time imagining it being as convenient as .collect would preserve LTR reading/method chaining |
11:03 | <rbuckton> | i.e., .collect(Map.groupingBy) for example |
11:03 | <Robert Pamely> | Googling “mdn groupBy” on a lark and finding useful results. |
11:03 | <bakkot> | well, .collect(Map,groupingBy, fn) , really |
11:03 | <Robert Pamely> | where any solution would be found hopefully.. |
11:03 | <Kris Kowal> | the OG ecma is carton manufacturers |
11:04 | <rbuckton> | well, .collect(Map.groupingBy(fn)) |
11:04 | <bakkot> | Googling “mdn groupBy” on a lark and finding useful results. |
11:04 | <rbuckton> | Carton: the language formerly known as variously ECMAScript and JavaScript. |
11:04 | <Robert Pamely> | These full on Java suggestions are hurting my eyes |
11:04 | <bakkot> | re: discoverability, I'm more worried about people being able to do x.gr... in the console and get autocomplete which suggests the thing they wanted |
11:04 | <Rob Palmer> | We will resume the meeting in 56 mins at 13:00 local time. |
11:04 | <bakkot> | which only works for proto methods, not static |
11:04 | <nicolo-ribaudo> | well, .collect(Map, fn) would also work, with a collectors protocol |
11:08 | <rkirsling> | Carton: the language formerly known as variously ECMAScript and JavaScript. |
11:09 | <Justin Ridgewell> | Are we changing our mind on static methods? |
11:09 | <bakkot> | different people always had different opinions I think |
11:09 | <Justin Ridgewell> | I'm just kinda exhausted with seeing naming conflicts with the ecosystem. |
11:09 | <bakkot> | I don't have that firm of an opinion at the moment |
11:09 | <Justin Ridgewell> | group was impossible to query for |
11:09 | <bakkot> | need to think about it more |
11:10 | <rbuckton> | We could seriously consider something like F#'s computation expressions (something jschoi was looking into) to create query DSLs:
|
11:10 | <rkirsling> | I'm just kinda exhausted with seeing naming conflicts with the ecosystem. |
11:11 | <bakkot> |
|
11:11 | <bakkot> | JS does not have room for that |
11:12 | <bakkot> | if any of us had large twitter followings we could poll the community on Object.groupBy vs [].groupedBy |
11:13 | <bakkot> | just don't put a joking "break the web" option in or people will take it seriously and get mad that we don't |
11:13 | <rbuckton> | if any of us had large twitter followings we could poll the community on |
11:14 | <Kris Kowal> | I'm less convinced of the efficacy of twitter polls given the mass exodus of many in the tech community off of that platform and onto platforms like Mastodon. |
11:15 | <Kris Kowal> | (for Christine Lemmer-Webber, one of the authors of ActivityPub) |
11:15 | <rbuckton> | JS does not have room for that async do {} is not so far off from what @async do {} might be in terms of how async {} works in F#. |
11:15 | <rbuckton> | But even if it is viable, its a long way off. |
11:17 | <bakkot> | I'm less convinced of the efficacy of twitter polls given the mass exodus of many in the tech community off of that platform and onto platforms like Mastodon. |
11:17 | <bakkot> | seems like there are still enough people around to get a decent sample size |
11:18 | <Justin Ridgewell> | We need scoped prototype methods |
11:18 | <bakkot> | if we could get decent sample size in the first place, anyway |
11:18 | <Justin Ridgewell> |
|
11:19 | <littledan> | We need scoped prototype methods |
11:19 | <rbuckton> | We need scoped prototype methods |
11:19 | <Justin Ridgewell> | Similar, but access would still use . instead of :: |
11:19 | <littledan> | if we could get decent sample size in the first place, anyway |
11:19 | <Justin Ridgewell> | Else it's just a pipe. |
11:19 | <rbuckton> | Else it's just a pipe. |
11:20 | <rbuckton> | If only we could do something like C#'s extension methods, but that requires runtime typing |
11:21 | <Justin Ridgewell> | Jake was talking about this too, but how would it work? |
11:22 | <Justin Ridgewell> | Just need to track prototype scopes now, for every property access... |
11:22 | Justin Ridgewell | runs away |
11:26 | <rbuckton> | That is the way We really do need to get pipeline to move forward, and then maybe we could just do this:
|
11:26 | <littledan> | @bterlson @robpalme @ujjwal Is it too late for me to defer my next topic down the agenda? There is so much good stuff that we might not get a chance to discuss; consensus procedures can wait until next meeting |
11:27 | <littledan> | Apologies for not marking it as such earlier |
12:00 | <rkirsling> | that didn't sound like an ñ to me 😛 |
12:00 | <rkirsling> | just teasin' ya |
12:06 | <Justin Ridgewell> | Have we restarted? I'm waiting to be admitted |
12:06 | <rbuckton> | Yes, they started up again. |
12:06 | <ryzokuken> | apologies, you're in |
12:09 | <bakkot> | I am trying a new language model for the bot, and it's definitely better, but it's slow enough that it gets behind sometimes, and that tradeoff isn't worth it :( |
12:10 | <bakkot> | it's google's speech-to-text service, so I'm surprised they have it lag instead of having it run on better hardware and charge more |
12:11 | <Ashley Claymore> | I am trying a new language model for the bot, and it's definitely better, but it's slow enough that it gets behind sometimes, and that tradeoff isn't worth it :( |
12:11 | <Ashley Claymore> | hopefully the lag will improve, as the model does seem much better as you say |
12:13 | <bakkot> | I wish they'd just publish the model so I could rent myself a faster GPU |
12:13 | <bakkot> | but alas |
12:13 | <bakkot> | I guess at some point I should try other services |
12:14 | <Michael Ficarra> | I didn't see deferred evaluation mentioned in Kris Kowal's slides |
12:16 | <Rob Palmer> | Richard slides: https://docs.google.com/presentation/d/1vyp3FZ5OIiN1xzKV_y7FZauBMdGow0CW2es4qbOQtgw/edit |
12:16 | <Kris Kowal> | Indeed, I didn’t touch on deferred evaluation. Briefly, that’s motivated by the ability to easily avoid executing the body of unused modules, which is possible and relied upon in practice with CommonJS. |
12:16 | <Anthony Bullard> | Sorry, I'm running a bit late, could someone admit me when they get a chance? |
12:17 | <Michael Ficarra> | Kris Kowal: I'm thinking there's overlap between reflection and deferred evaluation anyway |
12:17 | <Michael Ficarra> | I guess I'll talk about that more when we discuss reflection at this meeting |
12:18 | <yulia> | Anthony Bullard: are you joining the call? |
12:18 | <Rob Palmer> | If anyone needs to be admitted to the meeting, please notify ryzokuken here |
12:18 | <Kris Kowal> | I guess I'll talk about that more when we discuss reflection at this meeting |
12:19 | <yulia> | yes, Guy and I have been working together on this, but deferred import eval won't be solved just by reflection |
12:19 | <Kris Kowal> | I think the uses of import reflection for deferring execution are more closely related to the code splitting use case than Yulia’s proposal, having learned more about the latter since I last presented. |
12:20 | <yulia> | deferred evaluation explicitly seeks to avoid the async tick by preloading and initializing the module. You can think of it as a dynamic import without the fetch. any async work is done up front as part of the module loading / linking stage |
12:24 | <Justin Ridgewell> | Bradford Smith: Re your iterable suggestion for groupBy, I think we could actually do that. Iterator needs special contiguous-run behavior, but that could be special to Iterator.groupBy (pending the Iterator helpers proposal) |
12:25 | <Rob Palmer> | In the room I have a black leather wallet that was handed in. Let me know if it is yours. |
12:26 | <Alex Vincent> | Is this potentially a "reserved properties" situation, like the reserved keywords of 262? |
12:26 | <Michael Ficarra> | Justin Ridgewell: it doesn't need to be that way, there's just pretty strong precedent from other languages for groupBy on a representation of a (possibly) infinite sequence to have that behaviour |
12:26 | <Anthony Bullard> | Anthony Bullard: are you joining the call? |
12:27 | <Robert Pamely> | Bradford Smith: Re your iterable suggestion for groupBy, I think we could actually do that. |
12:27 | <Christian Ulbrich> | Robert Pamely: Its mine. |
12:28 | <Robert Pamely> | Robert Pamely: Its mine. |
12:28 | <ryzokuken> | it's right in front of me and rob on the table |
12:28 | <Justin Ridgewell> | [1, 2, 1, 1] in by default groups to a single { 1 => [1, 1, 1], 2 => [2] } , but in infinite iterables it's not possible to collect all values into a key. So instead, you return an iterable [ [1, [1]], [2, [2]], [1, [1, 1]] ] grouping contiguous runs of the same key |
12:28 | <Christian Ulbrich> | Rob Palmer: Exactly :) |
12:29 | <yulia> | Rob Palmer -- i think waldemar is next? |
12:29 | <yulia> | he had a topic "factored spec" |
12:29 | <Rob Palmer> | we messed up the queue by double advancing |
12:30 | <Robert Pamely> |
|
12:31 | <rbuckton> |
|
12:32 | <nicolo-ribaudo> | Wishlist:
|
12:33 | <Robert Pamely> | grouping only contiguous runs seems like a different operation though, needing a different name to indicate the difference in behavior. |
12:34 | <jasew> |
bakkot has an exception list somewhere, so pinging him usually |
12:34 | <Michael Ficarra> | jasew: nicolo-ribaudo https://github.com/bakkot/transcribe-to-gdocs/blob/master/replacements.js |
12:35 | <rbuckton> | I agree. It feels more like batching the same values or something. groupBy function that maps the input into discrete groups by key, and a spanMap function that maps contiguous sequences by key. |
12:35 | <Robert Pamely> | As it turns out, this has the unfortunate correction in google to "Spain map" |
12:36 | <rbuckton> | I also called that operation spanMap in @esfx/iter-fn : https://esfx.js.org/esfx/api/iter-fn.html#_esfx_iter_fn_spanMap_function_1_ |
12:36 | <Christian Ulbrich> | This sounds convincing to me. ECMA262 should be able to be implemented w/o any stuff related to 402. |
12:37 | <ryzokuken> | isLeapDay |
12:37 | <ryzokuken> | 😬 |
12:38 | <Michael Ficarra> | rbuckton: I know span as the like "single step" version of group : https://hackage.haskell.org/package/base-4.17.0.0/docs/Prelude.html#v:span |
12:39 | <rbuckton> | Yeah, I have the same concept in @esfx/iter-fn as well: https://esfx.js.org/esfx/api/iter-fn.html#_esfx_iter_fn_span_function_4_ |
12:40 | <littledan> | Wait, everything goes through plenary, regardless of outcome here |
12:40 | <Michael Ficarra> | rbuckton: I think using "span" in the names of both of those operations is weird |
12:41 | <rbuckton> | They both operate on contiguous sequences, e.g., a "span" |
12:41 | <Robert Pamely> | To clarify, why is it necessary to have a different group algorithm on iterators anyway? There are already operations like every that would never end on infinite iterators right? |
12:42 | <Michael Ficarra> | wouldn't we have already run into this issue with String.prototype.toLocaleLowerCase and likewise if they hadn't already been in 262 for historical reasons? |
12:42 | <shu> | littledan: you're right, sorry for being imprecise |
12:42 | <littledan> | In the web world, extensions are often used specifically to be able to act in cases where one spec wants to add a feature to another without working with all of those people (eg because maybe there isn’t an active WG). But other times just for factoring as here. |
12:42 | <Michael Ficarra> | Robert Pamely: it's not necessary, there's just precedent |
12:42 | <rbuckton> | And many other languages/library implement .groupBy over potentially infinite iterables assuming they are finite. |
12:43 | <shu> | littledan: i really do not see any advantage to requiring extra deliberation for this stuff in 262 |
12:43 | <bakkot> | jasew: nicolo-ribaudo https://github.com/bakkot/transcribe-to-gdocs/blob/master/replacements.js |
12:46 | <shu> | i don't understand what the conclusion was |
12:47 | <Michael Ficarra> | was anyone other than Mark in the "no" camp? |
12:47 | <shu> | is the "narrow yes" non-normative notes? |
12:47 | <bakkot> | grouping only contiguous runs seems like a different operation though, needing a different name to indicate the difference in behavior. I agree that calling this operation "groupBy" is bad. unfortunately, though, that's the behavior that I wouldn't want a thing called "groupBy" on Iterator.prototype which does something other than what the groupBy from python's itertools does |
12:47 | <ryzokuken> | is the "narrow yes" non-normative notes? |
12:47 | <ryzokuken> | like we do for the toLocaleString methods |
12:47 | <shu> | sgtm, thanks |
12:48 | <shu> | well not exactly like those i hope? |
12:48 | <bakkot> | can someone capture that in the notes |
12:48 | <Michael Ficarra> | yeah not quite like those |
12:48 | <ryzokuken> | in the same vein, I suppose |
12:48 | <shu> | toLocaleString is like, "this does something, who knows? but really, look at 402" |
12:48 | <shu> | i hope this is more like "this is added by 402, look at that" |
12:48 | <Michael Ficarra> | those are mandatory whether or not 402 is implemented, they just have a different behaviour |
12:48 | <shu> | right |
12:49 | <ryzokuken> | yeah that's because the stubs exist for toLocaleString |
12:49 | <Michael Ficarra> | shu: yeah that is my understanding |
12:49 | <ryzokuken> | so in this case we'll say "these classes might have additional properties that are defined here" |
12:50 | <shu> | okay i would characterize that as in fact not at all like toLocaleString |
12:50 | <ryzokuken> | hm, perhaps I misunderstood something thing. Richard Gibson could you clarify? |
12:51 | <bakkot> |
|
12:51 | <bakkot> | ah yes, javascript |
12:51 | <shu> | hell yeah brother |
12:51 | <ryzokuken> | "false" === true |
12:52 | <bakkot> | I guess I wrote that sentence |
12:52 | <bakkot> | well, !!"false" === true |
12:52 | <HE Shi-Jun> | I don't have time to comment last topic. I don't have strong opinion on whether 402 could extend 262, i just want to mention in this specific case, it not only an impl choose to impl 402 or not but also which calendars they want to support. for example, if support japanese calendar, it will have era field, if support chinese year calendar, it could have animal field (in the future?), if support both, it will have both fields... So the shape of the prototype may have many varieties. |
12:54 | <Michael Ficarra> | HE Shi-Jun: why would 402 make individual fields present only when certain locale data is present? |
12:54 | <Michael Ficarra> | I imagine the data would change but the shapes would be fixed |
12:55 | <HE Shi-Jun> | Actually I have seen some modifications on such data so only have specific locale to make the binary small. |
12:55 | <Michael Ficarra> | yes, it is normal to not have some locale data |
12:55 | <Michael Ficarra> | it would not be okay for 402 to say that the shape of the object changes based on that though |
12:56 | <Michael Ficarra> | like, I don't think that would pass the TG1 review |
12:56 | <HE Shi-Jun> | So you mean even an impl do not support japanese year calendar, it should still have era field? |
12:56 | <Michael Ficarra> | yes |
12:57 | <HE Shi-Jun> | I'm ok with that, hope 402 have clear spec text for it. |
12:58 | <ryzokuken> | HE Shi-Jun: we're working out the exact details for this |
12:58 | <ryzokuken> | check Frank's recent proposal for this |
12:58 | <rbuckton> | like, I don't think that would pass the TG1 review .getCalendarField("era") , etc. instead, so that the shape remains stable. |
12:59 | <HE Shi-Jun> | Yeah, I'd lean towards something like a |
12:59 | <bakkot> | in fairness getting the era is not a particularly common operation |
12:59 | <bakkot> | i expect, anyway |
13:00 | <rbuckton> | stable, but not very ergonomics 😅 |
13:00 | <Michael Ficarra> | interesting, is era ever placed anywhere other than the end of the date? |
13:01 | <rbuckton> | It also could be .calendarData.era , where .calendarData is spec'd as a getter that just returns an empty object by default. |
13:01 | <shu> | interesting, is era ever placed anywhere other than the end of the date? |
13:01 | <HE Shi-Jun> | True, but it also avoids needing to add more properties in the future that are potentially unused based on the locale/calendar in use. |
13:04 | <Richard Gibson> | hm, perhaps I misunderstood something thing. Richard Gibson could you clarify? Temporal.….prototype specifically, I think it will take the form of text like "An ECMAScript implementation that includes the ECMA-402 Internationalization API may provide additional properties of the <type> prototype object as defined in the ECMA-402 specification.". |
13:04 | <Andreu Botella> | I wonder whether hiding the era name if it matches the current era by default would work well with the Japanese calendar |
13:06 | <Michael Ficarra> | Andreu Botella: I didn't think Japanese era provided any kind of disambiguation like gregorian era |
13:08 | <rkirsling> | era can't be omitted just because it's current, if I understood the idea correctly |
13:08 | <rkirsling> | like the current year is either 2022 or R4, but not "4" |
13:36 | <sffc> | rkirsling: can you post your experience here on https://github.com/tc39/proposal-intl-eradisplay/issues? |
13:39 | <msaboff> | @shu Did V8 implement RAB.transfer() returning a fixed array? |
13:40 | <shu> | msaboff: we did, but not shipped |
13:41 | <shu> | the only implementation that shipped AFAIK is Moddable, and they are supportive of changing the behavior to preserve resizability |
13:42 | <shu> | msaboff: further, very recently we split out transfer to be gated by its own feature flag in anticipation of this change |
13:44 | <msaboff> | shu: Our implementation is only available in STP. We'll retract .transfer() before shipping to customers awaiting a resolution. |
13:44 | <shu> | msaboff: tyvm |
13:48 | <rkirsling> | rkirsling: can you post your experience here on https://github.com/tc39/proposal-intl-eradisplay/issues? |
14:00 | <rkirsling> | lack of fast paths for ISO8601 calendar has been a huge pain point as a Temporal implementer so I'm excited to see this progress |
14:09 | <pipobscure> | lack of fast paths for ISO8601 calendar has been a huge pain point as a Temporal implementer so I'm excited to see this progress |
14:10 | <rkirsling> | sorry if any of my comments have come off as more annoyed than justifiable |
14:11 | <pipobscure> | No!!!! They are exactly what we want and need! |
14:11 | <rkirsling> | I'm certainly not upset with the champion group though I did get pretty frustrated while implementing stuff recently |
14:12 | <pipobscure> | It’s exactly what we need to ever get to “ready to ship”. Also without implementors, nothing ever gets done. So pick up a beer (for any value of beer) from me at your earliest convenience. |
14:12 | <rkirsling> | I will also be hugely excited to actually ship this thing |
14:13 | <pipobscure> | If we could get it done for the Seattle meeting next year, we should have cake and a party 😀 |
14:13 | <pipobscure> | (It would be easy to get veterans there. Elsewhere it would require more effort) |
14:14 | <Michael Ficarra> | landing in smaller parts would be SO nice! |
14:15 | <Michael Ficarra> | it's probably a lot of work for the champions though 🙁 |
14:15 | <ryzokuken> | throwback to that time when frank pointed out that the temporal proposal is larger than the entire 402 spec 😅 |
14:21 | <rkirsling> | rkirsling: Your feedback about the japanese calendar behavior would be best in its own issue; thanks! |
14:37 | <Michael Ficarra> | I like this new trend of RangeErrors instead of silent conversion to 0/NaN and things like that |
14:38 | <rkirsling> | the "silence is golden" era of JS appears to be well past |
14:39 | <Michael Ficarra> | good riddance |
14:39 | <Richard Gibson> | henceforth, silence is considered radioactive |
14:42 | <Andreu Botella> | |
14:45 | <rkirsling> | yes but they're all undefined |
14:45 | <ryzokuken> | depends, which calendar? 😛 |
14:45 | <Andreu Botella> | instants |
14:49 | <Christian Ulbrich> | As a developer I strongly support yearOfWeek , to me it is pretty obvious that having this sugar method not in the API would then warrant additional libs, that Temporal actually wants to replace. |
14:50 | <rkirsling> | that's a fair statement |
14:50 | <rkirsling> | also like |
14:51 | <rkirsling> | being clear that we're not close to done with impls shouldn't be taken as more negative that it is |
14:51 | <rkirsling> | this is a huge spec |
14:51 | <rkirsling> | but it is a beautiful feature |
14:51 | <rkirsling> | and it takes a ton of time |
14:51 | <rkirsling> | but it will be worth it |
14:52 | <Christian Ulbrich> | I think so too. I am looking forward to it! |
14:52 | <bakkot> | I understand Frank's frustration, but I disagree; it is more important to get things right than to minimize changes in stage 3 |
14:52 | <bakkot> | ideally we wouldn't go to stage 3 unless there were no further changes to be made but this proposal was genuinely too large for that to happen |
14:53 | <rkirsling> | absolutely |
14:53 | <rkirsling> | this proposal is equivalent to shipping all of Intl in one fell swoop |
14:53 | <ryzokuken> | if not more 🙈 |
14:54 | <shu> | bakkot: i don't think frank is saying to optimize for minimizing changes in stage 3, it's to do it before stage 3 |
14:55 | <shu> | this is why i want a postmortem, i think our process cannot handle this level of project well |
14:55 | <rkirsling> | I agree with that—that our process is not designed for this |
14:55 | <rkirsling> | but I don't agree that we've misused the process that we have |
14:56 | <shu> | enough non-technical incentives caused it to advance to stage 3 to keep momentum to get implementers in the loop, so on and so forth |
14:56 | <rkirsling> | implementer feedback is just such a massive force |
14:56 | <rkirsling> | that's true even in the smallest proposal, it's just that the total time and effort isn't that great |
14:56 | <bakkot> | my understanding is that most of the changes which have been made were a result of implementation feedback, with a few others being a result of user feedback once people started actually treating the library as being close enough to done to be worth worrying about |
14:57 | <bakkot> | and I'm not really sure how to start getting either kind of feedback without calling it stage 3, or something functionally equivalent (module ready-to-ship bit) |
14:58 | <shu> | there are alternative ways to do standards development that aren't our staging model of "design up front, then throw over to implementers to get feedback" |
14:58 | <shu> | there are tradeoffs, of course |
14:58 | <rkirsling> | yes |
14:58 | <bakkot> | I mean the assumption is that implementers are giving feedback during design as well |
14:58 | <rkirsling> | we should discuss that and arguably we should've discussed it more in preparation for Temporal |
14:58 | <ryzokuken> | I don't understand, changes based on implementer and user feedback is literally the definition of Stage 3 |
14:58 | <shu> | if it were a "normal" software project you'd have a much tighter feedback loop from the implementers and maybe even users at the start |
14:59 | <shu> | right, but the point here is culturally, stage 3 is a "throw it over the wall" point |
14:59 | <shu> | we give feedback during stage 3 |
14:59 | <shu> | but the culture is not (and shouldn't be, by default) to try to implement for real before then |
14:59 | <shu> | we give feedback based on our experience and best guesses before stage 3, which is often wrong |
15:00 | <rkirsling> | I feel like all feedback is shades of educated guesswork until you try implementing the thing 😅 |
15:00 | <rbuckton> | This goes more to the postponed discussion on "ready to ship", but several years ago we had a discussion about the meanings of Stage 3 and Stage 4. Prior to that discussion, my impression was that Stage 3 was a time for implementers to implement the proposal and provide feedback, and that Stage 4 meant "ok this is ready to ship". However, in that discussion it was put forth that "Stage 3 means shipping", which somewhat lessened the impact of Stage 4, leaving very little room for handling implementation feedback within the staging process. |
15:01 | <shu> | right, which, i don't think any of us disagree on, was needed earlier for proposals of the scale of temporal |
15:01 | <shu> | pointing to "this is what stage 3 is defined as" is missing the point. we define our own working mode... |
15:02 | <shu> | i see this as echoes of the failure mode of ES6, which was a much bigger failure of "design and throw over the wall to implementers" |
15:02 | <rkirsling> | at least we're sure to not end up with another TCO though |
15:02 | <rkirsling> | er PTC, whatever |
15:03 | <shu> | to me the root thing to address is to move away from the "design up front" culture for proposals like temporal |
15:03 | <rkirsling> | agile shu |
15:04 | <shu> | the tradeoff is that, then, big ambitious things might never happen because it's even harder to convince implementers to put in the time before designing has been done |
15:04 | <rbuckton> | I'm not entirely sure an agile Temporal design would have been coherent, though I could see a more layered approach working. |
15:05 | <bakkot> | the vast majority of the proposal design work hasn't changed |
15:05 | <bakkot> | it's mostly details about how you read options bags and stuff |
15:06 | <shu> | pretty sure frank would disagree with that characterization |
15:07 | <rkirsling> | look |
15:07 | <rkirsling> | I myself got sufficiently angry (not at anyone! just emotional state) while doing Temporal impl work |
15:08 | <rkirsling> | but |
15:08 | <rkirsling> | I can't claim that somebody did something wrong or in bad faith or anything |
15:08 | <rkirsling> | it's just a BIG thing. |
15:10 | <rbuckton> | The issues we're seeing with temporal now are only the result of really digging in to the implementation, and many proposals don't get that kind of feedback until they are well into Stage 3. |
15:17 | <shu> | but like it's our choice to not give that kind of feedback until well into stage 3, because we don't really dig into implementation until well into stage 3 |
15:18 | <shu> | but we could maybe just... do something else for proposals that we know will frustrate if we wait till well into stage 3 to do that, and for which we're all already convinced should happen? |
15:26 | <rkirsling> | my point is merely that like |
15:26 | <rkirsling> | I don't think it's an issue with existing stage definitions |
15:27 | <rkirsling> | the process doesn't really make any accommodations for a proposal of this size, but |
15:27 | <shu> | i think i agree? to the extent i don't think we need to change the existing staging process for the vast majority of proposals |
15:27 | <rkirsling> | I don't exactly know what that implies wrt what "should have happened" |
15:28 | <shu> | oh, nothing |
15:29 | <shu> | there is no lamenting in what i'm saying |
15:29 | <shu> | just thinking about what to do next time |
17:51 | <ljharb> | what is in igalia's CoC that isn't covered by ours? that seems important to highlight broadly |
17:56 | <ljharb> | we still wouldn't have builtin modules; that's stalled for many other reasons |
18:09 | <ljharb> | can someone elaborate on what "narrow yes" means re 402/262? |
18:10 | <nicolo-ribaudo> | We clarified that at the end of the meeting, if you haven't read that part of the notes yet |
18:31 | <littledan> | but we could maybe just... do something else for proposals that we know will frustrate if we wait till well into stage 3 to do that, and for which we're all already convinced should happen? |
18:32 | <littledan> | it's not like Temporal went to Stage 3 quickly |
18:58 | <ljharb> | nicolo-ribaudo: ok so if i'm reading it right, it's that anything specified in 262 can't be modified unless there's an explicit note about it? |
19:01 | <nicolo-ribaudo> | Nothing can be modified by 402 unless there is the note, or at least that's my understanding |
19:03 | <ljharb> | ah ok, gotcha |
19:04 | <ljharb> | to be fair, there was a lot of pressure for it to go to stage 3 without a long stretch of time passing without normative changes |
20:09 | <littledan> | ljharb: You've suggested this sort of waiting period for stability idea before, but I'm not sure if it would've helped in Temporal's case. The changes were driven by things discovered later, mostly based on implementation experience. Maybe we could make an agenda item in a future meeting if you have an idea for when champions should wait for what sort of stretch of time before proposing advancement? |
20:11 | <littledan> | I'm not at all opposed to the idea in principle, especially for Stage 3, but I think it should be laid out in advance as guidance for champions, rather than only a critique afterwards |
20:14 | <littledan> | do we think a waiting period would motivate people to do more detailed reviews before Stage 3? |
20:41 | <ljharb> | in general i'm not really sure. there's very few proposals where this is ever a problem in practice - temporal is a bit of an anomaly |
20:44 | <Kris Kowal> | in general i'm not really sure. there's very few proposals where this is ever a problem in practice - temporal is a bit of an anomaly |