14:54 | <rbuckton> | shu, waldemar: Were you able to review the Async Explicit Resource Management proposal specification text? |
14:58 | <Rob Palmer> | Plenary begins in T-minus 1 minute encounting. |
14:59 | <shu> | rbuckton: i didn't have a chance to review the whole thing, but i did look at the using await sections of the draft spec |
15:02 | <rbuckton> | rbuckton: i didn't have a chance to review the whole thing, but i did look at the using await is the same as the sync-version prior to carving AsyncDisposableStack and @@asyncDispose out in the November plenary. |
15:02 | <shu> | were there changes to using await? it looked like an exact mirror of the sync case, except plumbing through the ~async-dispose~ hint and awaiting disposable resources with that hint on block exit |
15:05 | <rbuckton> | were there changes to using await? it looked like an exact mirror of the sync case, except plumbing through the ~async-dispose~ plumbing was there when you reviewed Explicit Resource Management prior to Stage 3 since I'd left it in to support AsyncDisposableStack . The only changes I've made aside from adding the using await syntax were to incorporate editorial feedback that I already received on the sync version of the proposal since creating https://github.com/tc39/ecma262/pull/3000, so that the spec text shared between the two remains consistent. |
15:05 | <shu> | cool, that makes sense |
15:06 | <rbuckton> | I should clarify, there were minor changes to address Mathieu Hofman and erights concerns about any evaluated using await forcing an explicit await even if the initialized value is null or undefined , but that should be about it. |
15:08 | <Michael Ficarra> | hmm, it would be nice if useGrouping had a string specifier for all options so you could ignore that it also takes undefined/Booleans |
15:09 | <Michael Ficarra> | it doesn't currently have a "never" option, just false |
15:17 | <Rob Palmer> | Is Frank Tang here? His agenda item is next. |
15:23 | <Anthony Bullard> | bterlson: Should TCQ have a "Comment on topic" action that implies no further commentary is necessary? |
15:23 | <Anthony Bullard> | Maybe action is the wrong term. Maybe "queue item"? |
15:25 | <bterlson> | It's more like a flag on the queue topic I would say (since it could be a reply or a new topic) |
15:26 | <bterlson> | but yeah it could be added |
15:36 | <Michael Ficarra> | we could also just leave those comments here in Matrix and the chairs could read them aloud at their discretion |
15:37 | <ljharb> | adding "EOM" at the end seems like it's been a workable convention |
15:38 | <HE Shi-Jun> | what "optional" and "allow" mean in the example? |
15:38 | <Michael Ficarra> | yeah, the status quo is also not bad |
15:39 | <Michael Ficarra> | what "optional" and "allow" mean in the example? |
15:41 | <HE Shi-Jun> | yeah, I just curious how to explain the example |
15:41 | <rbuckton> | Would be interesting if you could just 👍️ the current topic, since we often get a lot of +1 <eom> comments |
15:42 | <ryzokuken> | Would be interesting if you could just 👍️ the current topic, since we often get a lot of |
15:42 | <HE Shi-Jun> | I don't understand if downgrade to stage 2 why not unship... |
15:42 | <Anthony Bullard> | That's what I was going for rbuckton . Just a lightweight mechanism to register feedback on the current topic |
15:42 | <ryzokuken> | where you could use some basic emotes like 👍️ 👎️ etc |
15:43 | <Michael Ficarra> | if we have a 👍️ react, we must also have a 💩 |
15:43 | <danielrosenwasser> | what "optional" and "allow" mean in the example? allow could restrict permissions when importing a certain library. So you could give the library file-system access, but not access to make network requests |
15:44 | <Anthony Bullard> | Yeah, that's why I thought free text for it is still important so we don't fall down the emoji reaction rathole |
15:44 | <rbuckton> | Not sure if I'd go as far as adding 👎️, since a negative reaction or concern is better represented as a topic. |
15:45 | <Anthony Bullard> | That's a good point |
15:45 | <rbuckton> | Plus we already have an emoji reaction thing that I don't think we've ever actually used correctly. |
15:45 | <Anthony Bullard> | Maybe then just "Support current topic" |
15:45 | <rbuckton> | Maybe then just "Support current topic" |
15:46 | <ryzokuken> | One problem I can think of is that it goes against our very recent discussion about explicit support |
15:46 | <ryzokuken> | I guess it's still explicit though |
15:46 | <HE Shi-Jun> | HE Shi-Jun: You could imagine that in a runtime like Deno, Node.js, or others, |
15:47 | <danielrosenwasser> | Yeah, the example might have been meant to be written with a .js extension, or the runtime has special behavior |
15:47 | <danielrosenwasser> | it's for your imagination :D |
15:48 | <HE Shi-Jun> | maybe it disallow @import "https://...." in css? 😅 |
15:54 | <shu> | btw for folks less involved in this discussion, we have a response here: https://github.com/whatwg/html/issues/7233#issuecomment-1407049226 |
16:06 | <bterlson> | I prefer status quo to adding reacts on the agenda item. I don't want negative reacts, and would rather positive reacts have SOME context. |
16:07 | <bterlson> | "the proposal is great EOM" is better than a random thumb up IMO. |
16:07 | <bakkot> | (I agree but could not resist showing agreement by a random thumb up) |
16:10 | <littledan> | shu: If you want to do a temperature check, state the question clearly |
16:10 | <shu> | yes i will craft a question when we do it |
16:10 | <littledan> | the chairs have a recommended process for this now |
16:10 | <shu> | but i want to do it after justin's item |
16:10 | <rbuckton> | We discussed this internally and one of our suggestions matches what @shu just said. Change semantics of assert , add with keyword to replace it (i.e., assert as an alias to with ), phase out assert /forbid via lint |
16:14 | <rbuckton> | Maybe we can just think of assert as a cast with implicit type coercion. (half j/k, half serious) |
16:14 | <shu> | yeah i honestly believe we have shoehorned ourselves into one particular meaning of "assert" |
16:14 | <shu> | and are not being flexible |
16:15 | <shu> | which is... a psychological thing, not a semantics thing |
16:15 | <rbuckton> | Can whoever is typing mute? |
16:15 | <shu> | think that was me, sorry |
16:19 | <yulia> | my understanding re process:
|
16:20 | <ljharb> | that doesn't mean only a champion may propose it. |
16:20 | <ljharb> | anyone can propose any changes at any time, whether they achieve consensus or are procedurally valid is a separate thing. |
16:21 | <Anthony Bullard> | As a new delegate in a new member organization, is there a document I can read to learn more about in-band and out-of-band? |
16:21 | <yulia> | my view is that a downgrade should have the champions involved. forcing something to stage 1 is what i am objecting to here. I find this very concerning |
16:21 | <ljharb> | nothing can be forced because champions participate in consensus |
16:21 | <ljharb> | only proposed. which forces nothing. |
16:22 | <shu> | yeah we just don't have consensus for re-opening IB/OOB |
16:22 | <yulia> | yep, agreed. I am responding to what you were proposing and saying that it would be inappropriate. I am surprised it was brought up i guess? |
16:22 | <yulia> | like, that is a huge leap |
16:22 | <shu> | wait what i said? |
16:22 | <yulia> | sorry, no, what jordan said |
16:22 | <shu> | ah yes agreed, i was also surprised |
16:23 | <Michael Ficarra> | I don't think so, but you can add the terms to the glossary at https://github.com/tc39/how-we-work/blob/main/terminology.md |
16:23 | <Michael Ficarra> | in this context, in-band means within the source text, specifically within the import declaration |
16:24 | <Michael Ficarra> | out-of-band would be things like HTTP headers, CLI flags, browser config, etc |
16:26 | <Justin Ridgewell> | OOB would be something like import maps: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap |
16:26 | <yulia> | sorry i may have overreacted there |
16:28 | <Anthony Bullard> | So basically with OOB configuration of the behavior happens outside of the ECMAScript source but is applied within the execution of said source? |
16:29 | <ljharb> | yes, just like CSP and import maps |
16:29 | <Anthony Bullard> | Sounds good. Adding these terms to the above document will be good practice for going through the process here |
16:30 | <Michael Ficarra> | Anthony Bullard: PRs welcome |
16:40 | <Michael Ficarra> | if we had a temperature check for using in eval, I would give it a 👍️ |
16:40 | <Michael Ficarra> | but I don't feel strongly enough to even add a topic to TCQ |
16:42 | <littledan> | Yeah I feel like we could go either way on eval; it's fine to prohibit or support |
16:42 | <littledan> | I don't think most JS developers have internalized that they can use let at the top level of a direct eval |
16:43 | <littledan> | +1 to doing a temperature check |
16:44 | <yulia> | Anthony Bullard: in case you are looking for other stuff on tcq, maybe adding a temp check question isn't a bad idea... (i can help, i did the original implementation of the temp check) |
16:45 | <Anthony Bullard> | Working on it |
16:45 | <Anthony Bullard> | Just trying to find a good reference for the term in-band |
16:47 | <Anthony Bullard> | I will reach out if I have any questions. Haven't any took a peek at the repo yet |
16:47 | <Jack Works> | is this being temp checked? |
16:47 | <rbuckton> | Yes |
16:47 | <Michael Ficarra> | Jack Works: yes, on TCQ |
16:47 | <Jack Works> | i can't see a vote UI, did I miss that? |
16:48 | <Anthony Bullard> | By the way, does the TCQ "Log" go anywhere? |
16:48 | <yulia> | i can't see a vote UI, did I miss that? |
16:48 | <yulia> | or there may be a bug |
16:49 | <Michael Ficarra> | I just refreshed and the temp check is gone now |
16:49 | <yulia> | oh |
16:49 | <Jack Works> | tried many time but see nothing |
16:49 | <yulia> | 😬 |
16:49 | <yulia> | current state |
16:49 | <Anthony Bullard> | It's gone for me as well after a refresh |
16:49 | <Jack Works> | i support to reject using directly in eval |
16:50 | <yulia> | ill vote on your behalf jack |
16:50 | <HE Shi-Jun> | why only ban await,not ban yield? |
16:50 | <shu> | because there's the async using await ron will present later, i presume |
16:51 | <HE Shi-Jun> | ok. so if syntax is async using , no need to ban await ? |
16:51 | <shu> | 🤷 |
16:52 | <bakkot> | I would be happy to ban yield and for that matter also undefined , as long as we're banning stuff |
16:52 | <yulia> | alright, if anyone wants to discuss anything from this meeting, i'll be around for the next hour. I won't make the afternoon session |
16:52 | <bakkot> | { using undefined = x } // oh no |
16:54 | <HE Shi-Jun> | I really hope we banned let undefined and const undefined in ES6 (only allow var undefined for webcompat). |
16:55 | <Anthony Bullard> | Michael Ficarra: Any conventions on commits / branches for this repo that I'm not seeing? |
16:55 | <ljharb> | const undefined is banned because consts need a value :-p but let undefined works fine |
16:57 | <bakkot> | just not at the top level of scripts because it's a global non-configurable property |
16:58 | <Anthony Bullard> | Seems like there are not. https://github.com/tc39/how-we-work/pull/127 |
17:01 | <Anthony Bullard> | Of course it's written in the one popular framework I haven't used in 5 years |
17:02 | <Anthony Bullard> | yulia: Temp check question would be adding an item to the queue for a temp check, but the temp check ui also displaying the question? |
17:04 | <yulia> | temp check ui showing the question |
17:05 | <yulia> | so, the chair would need to enter it |
17:09 | <yulia> | right now non-chairs can't start a temp check |
17:13 | <Anthony Bullard> | Gotcha |
17:14 | <Anthony Bullard> | Let me fork, clone, and learn Vue real quick and hopefully we can have this ready for the Seattle meeting |
17:36 | <rbuckton> | just not at the top level of scripts because it's a global non-configurable property |
17:38 | <bakkot> | That would never be disposed, because it never goes out of scope. let undefined failing if you just type it in the console because it's attempting to redeclare a non-configurable global property, not about using |
17:39 | <rbuckton> | Ah, my bad. |
17:46 | <rbuckton> | ok. so if syntax is async using in other places instead. See https://tc39.es/ecma262/#prod-ForInOfStatement, which needs to ban async of because async of => {} is a legal arrow. async using would potentially require a complex cover grammar to deal with similar cases. |
17:48 | <bakkot> | are there any contexts in which async [no lineterminator here] using is currently legal? |
17:48 | <bakkot> | other than the horrible async arrow one |
17:49 | <littledan> | within double quotes!!! |
17:49 | <littledan> | or a regexp |
17:49 | <rbuckton> | I would be happy to ban yield because I don't see a using yield declaration being a thing. |
17:49 | <rbuckton> | or a regexp |
17:49 | <bakkot> | ah, yes, method names also |
17:50 | <bakkot> | I think the async arrow case is the only one likely to be problematic, but that one would be a problem, certainly |
17:50 | <rbuckton> | Where as using [no LineTerminator here] await isn't legal anywhere outside of string/regexp literal contexts. |
17:54 | <shu> | please don't make me write a bunch more string comparisons on every binding identifier parse :( |
17:54 | <bakkot> | what about only the binding identifier parses in using declarations |
17:54 | <shu> | cycles are precious and come dear |
17:54 | <bakkot> | i mean how many of those can there be |
17:55 | <shu> | that's a new feature so we can start with a lower bar |
17:55 | <shu> | can't break people's expectations if we start super low! |
17:55 | <ryzokuken> | https://www.w3.org/2023/01/pressrelease-w3c-le-launched.html.en |
18:00 | <ljharb> | https://tc39.es/proposal-async-explicit-resource-management/#sec-suppressederror |
18:14 | <ljharb> | * waldemar: note i'm not talking about suppressed , which is the suppressed error, i'm talking about error , which is the cause of the suppression (re your queue item) |
18:14 | <rbuckton> | I should have clarified re: https://github.com/tc39/proposal-explicit-resource-management/pull/140 whether it requires consensus. Given the algorithm changes in ForBodyEvaluation and CreatePerIterationEnvironment are essentially no-ops, removing them has no observable effect on runtime semantics. |
18:19 | <bakkot> | am warming up to the option of prohibiting '.cause' on SuppressedErrors - I think it's a conceptual mismatch for SuppressedError |
18:19 | <ljharb> | i'm still not clear on why it's not a cause when we all keep describing it as the thing that caused the suppression |
18:19 | <bakkot> | (i.e., read the options bag and throw if it's a present) |
18:20 | <bakkot> | it doesn't cause the suppression - the use of the syntax causes the suppression |
18:20 | <ljharb> | in using , sure. but not necessarily in every use of SuppressedError |
18:20 | <bakkot> | that's the only use of SuppressedError |
18:21 | <ljharb> | in the spec, but this is something users will use separately |
18:21 | <bakkot> | ok but it is a mismatch for the only case it gets used in the spec, so it's bad fit |
18:21 | <bakkot> | even if users might do a different thing where it would get used in a different way |
18:21 | <shu> | ljharb: perhaps you're thinking of "cause" to mean "caused mechanically the SuppressedError to be created and thrown" |
18:21 | <ljharb> | yes, that's what i'm thinking of |
18:22 | <ljharb> | the cause is what caused the SuppressedError |
18:22 | <shu> | whereas waldemar and kevin (and myself) think of "cause" as, like, the conceptual reason of an error |
18:22 | <ljharb> | which in the case kevin mentioned is a SyntaxError, right? |
18:23 | <shu> | yes, what ron is saying right now |
18:23 | <shu> | it is not a linear relationship |
18:23 | <shu> | the core disagreement i think is how do developers understand "cause" |
18:23 | <shu> | is it this linear causality chain, or is it a simpler "whatever effected it to be thrown mechanically" |
18:24 | <ljharb> | i would argue the latter |
18:24 | <shu> | yeah so far we've had folks on both sides |
18:24 | <bakkot> | I think the only acceptable use for "cause" is "we hit an error condition because of a prior error condition", and that is not what it means here - here it is "we had an error, and then a different error which would prevent surfacing the first one" |
18:24 | <rbuckton> | I think the fact there is such disagreement is evidence of reusing cause being confusing. |
18:25 | <ljharb> | to be clear my core motivation here is "it should not be possible to have an error that has two potential conceptual causes - .error and .cause" |
18:25 | <ljharb> | there are some good argument being made that .cause may not be right to replace .error |
18:25 | <ljharb> | but that still doesn't mean it makes sense to have an error instance with all of cause/error/suppressed |
18:26 | <rbuckton> | error is not the "cause", neither is supressed the "cause". My use of the term "causes a suppression" does not imply cause in this case, it implies the cause of a behavior. |
18:27 | <rbuckton> | to be clear my core motivation here is "it should not be possible to have an error that has two potential conceptual causes - .error and .cause" SuppressedError does have two conceptual causes. I'm more in favor of banning cause because it results in three conceptual causes. |
18:27 | <ljharb> | sure, i can accept that reframing |
18:29 | <HE Shi-Jun> | My understanding is cause should be used by developers to specify the low-level "cause" of a high-level error. So SuppressedError is not the case. |
18:32 | <rbuckton> | shu: We don't use arguments.length, we generally use "not present" as in AOs. |
18:32 | <shu> | no we actually check arguments length in some places |
18:32 | <shu> | like Array#splice |
18:32 | <shu> | it is cursed |
18:32 | <shu> | i hate it |
18:33 | <rbuckton> | Ah. I was looking at reduce/reduceRight as an exemplar |
18:34 | <bakkot> | tbc I'm fine with the status quo also but very mildly prefer removing InstallErrorCause |
18:35 | <Ashley Claymore> | Seems a little odd to not support it silently. but maybe ok. Can't imagine people using this constructor directly very often |
18:35 | <shu> | yes the silent nop is weird |
18:35 | <shu> | but also convinced it doesn't matter in practice |
18:36 | <Ashley Claymore> | Please could someone add a summary to the notes |
18:36 | <bakkot> | error conditions in error constructors are kind of painful |
18:36 | <rbuckton> | Its the nature of the language. Even before { cause } was supported anyone could pass that into an Error constructor without issue, they just wouldn't get the benefit. |
18:36 | <HE Shi-Jun> | I think I don't understand the result of removing InstallErrorCause, what's the difference? |
18:36 | <shu> | tru nuf |
18:36 | <rbuckton> | error conditions in error constructors are kind of painful new AggregateError() |
18:37 | <rbuckton> | Only throws because undefined isn't iterable. |
18:37 | <bakkot> | HE Shi-Jun: the consequence of removing InstallErrorCause is, the options parameter is ignored, so if you do new SuppressedError('foo', null, null, { cause }) the cause property is not read or installed on the resulting error |
18:37 | <rbuckton> | (compared to other native errors, most of which check for undefined for things like message ). |
18:38 | <bakkot> | it's only relevant if you're attempting to construct a SuppressedError manually |
18:38 | <Ashley Claymore> | Please could someone add a summary to the notes |
18:38 | <rbuckton> | I primarily added InstallErrorCause to SuppressedError for consistency with other native errors. Not having it is not an issue to the proposal. |
18:39 | <HE Shi-Jun> | HE Shi-Jun: the consequence of removing InstallErrorCause is, the cause , but i guess it's harmless? |
18:42 | <rbuckton> | Process question: Does the above change I mentioned in my update before the break need consensus? |
18:42 | <bakkot> | Oh, I forgot to mention we'll be cutting the next annual edition of the spec shortly |
18:43 | <shu> | oh yeah |
18:43 | <ljharb> | presumably after this week's stage 4s are merged |
18:43 | <bakkot> | rbuckton: I generally think changes with no observable changes do not require consensus |
18:44 | <ljharb> | agree, if it's not observable then the only folks you may want to check with first are the editors :-) |
18:46 | <bakkot> | other advantage of removing cause from SuppressedError - browsers don't have to figure out how to render it |
18:46 | <shu> | diverging paths bro |
18:46 | <shu> | a slider that has notches at each suppression point, that branches into a different slider |
18:51 | <littledan> | ohhh maybe we did async generators wrong, I remember debating this around |
18:52 | <littledan> | well, I think Kevin (zenparsing) had good reasons for all the details he chose |
18:53 | <rbuckton> | ljharb: I created https://github.com/tc39/proposal-explicit-resource-management/issues/147 to track the consensus change to SuppressedError |
18:53 | <ljharb> | rbuckton: ok, i'd already filed https://github.com/tc39/proposal-explicit-resource-management/pull/146 :-) |
18:54 | <rbuckton> | Ah, I put together a PR as well. Thanks |
18:55 | <littledan> | wait isn't it technically possible to do a reentrant .next() call with sync iterator helpers? (not sure what that would do but you can construct it) |
18:55 | <ljharb> | i definitely think it is |
18:55 | <ljharb> | i was going to comment that but realized that wouldn't be the consumer calling next twice, so it probably isn't relevant here |
18:56 | <ljharb> | it successfully nerdsniped me for a few minutes tho |
19:08 | <Michael Ficarra> | we could add an agenda section ahead of the other proposal-related items for demotions only |
19:08 | <Michael Ficarra> | so that they are not only called out but also prioritised |
19:09 | <shu> | why do we need a new section |
19:09 | <shu> | could just order it ahead of others by convention |
19:09 | <shu> | as we order stuff by convention now |
19:09 | <ljharb> | i'd hope it's not so frequent that a section is needed |
19:09 | <Michael Ficarra> | sure, we could change the ordering rules also |
19:09 | <Michael Ficarra> | they're just already complicated enough that they are often broken |
19:10 | <bakkot> | well, I think Kevin (zenparsing) had good reasons for all the details he chose yield being yield await ) was decided in later and Kevin was in favor of a different option than we went with (in https://docs.google.com/presentation/d/1U6PivKbFO0YgoFlrYB82MtXf1ofCp1xSVOODOvranBM/edit#slide=id.g223fba4116_0_155 - he wanted option 2) |
19:15 | <littledan> | yeah, I remember that discussion. I guess if we went the other way, then async generators would be more parallel by default. |
19:15 | <bakkot> | yeah, a little bit |
19:15 | <bakkot> | only if you yield 'd a promise though |
19:16 | <littledan> | oh so it wouldn't quite be enough for the semantics you're proposing? |
19:16 | <bakkot> | right |
19:16 | <bakkot> | or, well, you could get to the semantics I'm proposing, but you basically wouldn't be able to use the await syntax |
19:17 | <bakkot> | like in map , you wouldn't be able to do for await (item of inner) yield fn(item) because that would do at most one call to the underlying iterator at once (because for await is sequential) |
19:18 | <littledan> | right |
19:18 | <bakkot> | you'd have to do like yield inner.next().then(p => p.done ? { done: true } : Promise.resolve(p.value).then(fn).then(value => { done: false, value})) |
19:18 | <bakkot> | which, like, not much point to having syntax at that point |
19:19 | <littledan> | the iterator protocol is to scary to contemplate this |
19:20 | <jasew> | We definitely had conversations about another repo, I believe it exists. |
19:20 | <bakkot> | https://github.com/js-temporal/proposal-temporal-v2 I think |
19:20 | <jasew> | Yep |
19:30 | <shu> | littledan: i didn't understand if philip was proposing allowing truncation or requiring truncation |
19:30 | <shu> | if requiring truncation to microsecond then there's no compat matrix, but that's still kinda weird? |
19:33 | <ryzokuken> | IIUC, pdunkel's proposal was to underspecify the underlying data model and specifying the interface with nanoseconds so that implementations could change the data model in the future, it just being an implementation detail at that point. |
19:33 | <shu> | then that sounds like a compat matrix and i share dan's concerns |
19:33 | <shu> | we remain unconvinced by the use cases |
19:34 | <ryzokuken> | for including precision higher than microseconds? |
19:34 | <shu> | yes |
19:35 | <shu> | ryzokuken: longish discussion here https://github.com/tc39/proposal-temporal/issues/1700#issuecomment-896368225 |
19:36 | <shu> | our previous position was "maybe we can live with it" but upon rediscussion and scoping out work for eventually shipping temporal, using int64s is something we really want |
19:44 | <littledan> | littledan: i didn't understand if philip was proposing allowing truncation or requiring truncation |
19:44 | <littledan> | presumably requiring truncation would be to enable an evolution path which later doesn't require it (or requires non-truncation) |
19:45 | <shu> | i agree it's not a good idea |
19:45 | <shu> | but i'm not gonna die on that hill if that's the compromise? |
19:52 | <Michael Ficarra> | how could ID be an initialism? what is the D? |
19:52 | <ljharb> | identity document |
19:52 | <Michael Ficarra> | wow, TIL |
19:53 | <ljharb> | but it's also that outside of programming, it is always id or ID and never Id (which is the freudian concept when at the start of a sentence) |
19:53 | <littledan> | but i'm not gonna die on that hill if that's the compromise? |
19:53 | <ljharb> | in my experience getElementById is one of the most "gross" naming conventions i've heard folks complain about on the web behind XMLHttpRequest and "referer" |
19:54 | <shu> | i like Id |
19:54 | <jasew> | Id is consistent with DOM naming which is an environment this will be used. |
19:55 | <ljharb> | afaik it's just the single function, unless there's more i missed |
19:55 | <ljharb> | and nowadays folks use querySelector instead of the older getElementBy* functions |
19:55 | <rbuckton> | IIRC, "referer" isn't a naming convention, per se, but a typo we are stuck with. |
19:55 | <Michael Ficarra> | I'd always assumed it was an abbreviation for "Id-entity", not a titlecasing of "ID" |
19:56 | <jasew> | Michael Ficarra: I think it is |
19:58 | <ljharb> | it's also been part of the airbnb style guide for a long time (not a part i authored) and nobody's complained about the requirement, ftr https://github.com/airbnb/javascript#naming--Acronyms-and-Initialisms |
19:59 | <Michael Ficarra> | ljharb: that doesn't cover abbreviations like "Id" though |
19:59 | <ljharb> | fair point, not even in the examples |
20:00 | <ljharb> | i don't think it's really an abbreviation at this point tho, any more than "email" is. |
20:00 | <Michael Ficarra> | I mean, are you arguing that it's its own word now? Because that would have the same capitalisation |
20:00 | <ljharb> | at any rate i feel very strongly against "Id" but "identifier" or "code" seem fine to me |
20:01 | <littledan> | sorry for jumping in outside of the queue |
20:04 | <littledan> | Chris de Almeida: For the timezoneId/calendarId issue, see this thread https://github.com/tc39/proposal-temporal/issues/1808#issuecomment-1373987231 |
20:04 | <littledan> | (not sure what the most representative comment is, but scroll up and down from there) |
20:06 | <bakkot> | it's also been part of the airbnb style guide for a long time (not a part i authored) and nobody's complained about the requirement, ftr https://github.com/airbnb/javascript#naming--Acronyms-and-Initialisms |
20:07 | <eemeli> | Given the immediate context of "timeZoneId", I see the capitalization of "Id" as a result of using camelCase, and therefore completely fine. |
20:07 | <bakkot> | "Initialisms in APIs: All caps, except when the first word in a method or property, for example HTMLCollection, innerHTML, bgColor" |
20:07 | <ljharb> | timeZoneId is also something i dislike. |
20:07 | <bakkot> | but "Id" is not an initialism so |
20:07 | <ljharb> | and yes, but we're not bound by the w3c principles, and in this case i think they result in less clear names |
20:07 | <ryzokuken> | it specifically mentions Id |
20:08 | <ljharb> | yes, i know w3c does |
20:08 | <ljharb> | it doesn't change my opinion |
20:08 | <ryzokuken> | apologies, I just found out about this doc and was just exclaiming |
20:09 | <bakkot> | while I do not exactly consider myself bound by these rules, I am not going to want to deviate them without very, very strong reason |
20:09 | <ljharb> | sure, a number of folks seem unwilling to provide consensus for ID . that's fine, but i'm not willing to provide it for Id . |
20:09 | <ljharb> | but identifier and code seem perfectly workable |
20:09 | <shu> | isn't that what they're named now |
20:09 | <ryzokuken> | either way, it's definitely a document that affects us more strongly than everything else I see so far |
20:09 | <shu> | Id i mean |
20:10 | <ljharb> | the accessor is .id and the property is .calendar , and one proposal changes that to .calendarId . if there's already .timeZoneId then i missed it, and i can't prevent that one, obviously. |
20:11 | <shu> | i don't hear an argument from you jordan |
20:11 | <shu> | i hear "i don't like it" |
20:11 | <ljharb> | i find it confusing, and decades of complaints from random devs on irc/slack/etc complaining about the capitalization of the three things i mentioned reinforces my belief |
20:11 | <ryzokuken> | if timeZoneId already exists, that's an even compelling reason... I'd be against anything other than calendarId in that case for internal consistency. |
20:12 | <ljharb> | unless we also changed timeZoneId to match whatever else is chosen |
20:13 | <ryzokuken> | i find it confusing, and decades of complaints from random devs on irc/slack/etc complaining about the capitalization of the three things i mentioned reinforces my belief |
20:13 | <ljharb> | yes, it's about readability |
20:14 | <bakkot> | I really think id is the right name here |
20:14 | <bakkot> | or calendarId etc |
20:15 | <rbuckton> | I concur with Id . Id is not an initialism, its an abbreviation. |
20:17 | <rbuckton> | ID is like using STATS rather than Stats as the abbreviation for "Statistics" |
20:19 | <shu> | we need a reasonable argument for lone objections, i.e. "i understand but disagree" |
20:19 | <shu> | AFAICT no other delegate considers jordan's objection here reasonable |
20:19 | <ljharb> | my argument is already stated: i think "Id" is confusing and i would prefer to avoid confusion |
20:19 | <shu> | so i really do not understand what more deliberation can get us |
20:19 | <shu> | that is not an argument! |
20:20 | <shu> | that is "i don't like it" |
20:20 | <rbuckton> | Though I think Jordan was advocating for using calendarIdentifier and timeZoneIdentifier vs choosing Id or ID . |
20:20 | <shu> | and sure we make decisions based on "i don't like it" all the time |
20:20 | <shu> | but this is so very clearly onesided |
20:20 | <shu> | and you are wasting time |
20:20 | <Justin Ridgewell> | calendarId is fine, please let's not waste more committee time on a capitalization debate |
20:20 | <rbuckton> | which is, unfortunately, just another color to paint the bikeshed :( |
20:20 | <Justin Ridgewell> | This is a very poor reason to be a lone blocker |
20:20 | <Ashley Claymore> | css should have been colour |
20:21 | <shu> | i have a concrete next step here as well |
20:22 | <shu> | so as to break the logjam: i remain convinced calendarId is the right name, and i will ship with that name, as a willful violation if need be, (unless, of course, a reasonable counterargument is given) |
20:24 | <Chris de Almeida> | I hate Id and everyone that uses it is WRONG, but I've long since put down that sword and use it under duress |
20:25 | <Chris de Almeida> | calendarID > calendarId > calendarCode so if we can't have the first, then go to the 2nd |
20:26 | <rbuckton> | In English, ID (as in, "show me your ID") is an initialism, not an abbreviation, for "Identity Document", https://en.wikipedia.org/wiki/Identity_document, if that matters. |
20:26 | <ljharb> | so as to break the logjam: i remain convinced |
20:26 | <pipobscure> | In English, |
20:27 | <Kris Kowal> | It’s also the dual of ego. |
20:27 | <rbuckton> | Precisely. Though id is a psychological term. |
20:29 | <shu> | ljharb: not at all. i believe some action is needed than continuing bikeshedding on the name |
20:29 | <rbuckton> | Unfortunately, ID vs Id is a very long-running debate. I lean on the side of ID makes sense if you're using SCREAMING_SNAKE_CASE (e.g., for constant values), because you are capitalizing every letter, while Id should be what you use for camelCase/PascalCase identifiers. |
20:30 | <ljharb> | and a perfectly reasonable option is “identifier or code”. Let’s just do one of those - i don’t want to argue about it either, but that doesn’t mean i want to concede. |
20:30 | <shu> | and if you think my trying to make progress on a name bikeshed is equivalent to discarding all non-browser participants' opinions, i don't know what to tell you |
20:31 | <ljharb> | i think that any claim of intending to ship a willful violation that disregards consensus is a dangerous precedent to set, and isn't worth buying a few weeks or months of a faster decision. |
20:32 | <Chris de Almeida> | does it matter that there's already precedent for Id in the spec? |
20:33 | <rbuckton> | I would say yes. What is the precedent? |
20:34 | <ptomato> | I didn't think there was any precedent in ECMA-262 or ECMA-402 |
20:34 | <Chris de Almeida> | https://tc39.es/ecma262/#prod-SingleNameBinding |
20:34 | <rbuckton> | The current ECMA-262 spec uses timeZoneIdentifier in AO arguments. |
20:34 | <Chris de Almeida> | 2. Let lhs be ? ResolveBinding(bindingId, environment). |
20:34 | <Chris de Almeida> | i. Set v to ? NamedEvaluation of Initializer with argument bindingId. |
20:34 | <littledan> | heh I don't think spec-internal things count |
20:34 | <rbuckton> | Yeah, unfortunately I concur. The spec is inconsistent in naming in many places. |
20:35 | <bakkot> | spec-internal names are terrible |
20:36 | <bakkot> | lots of single-letter variables, I think in at least one place with both _C_ and _c_ in the same algorithm |
20:36 | <rbuckton> | If it helps, not only does the DOM use Id capitalization, so does NodeJS. |
20:37 | <rbuckton> | https://nodejs.org/dist/latest-v19.x/docs/api/async_hooks.html#async_hooksexecutionasyncid |
20:38 | <Chris de Almeida> | sure... Id convention is fairly standard in many languages and libs |
20:38 | <shu> | i think that any claim of intending to ship a willful violation that disregards consensus is a dangerous precedent to set, and isn't worth buying a few weeks or months of a faster decision. |
20:38 | <rbuckton> | so the two largest JS ecosystem conventions use Id fairly consistently. |
20:39 | <shu> | i can temper my response as "by shipping time, if there isn't consensus, i'm going to ship calendarId instead of let that block shipping Temporal" |
20:39 | <rbuckton> | NodeJS isn't entirely consistent on how they handle initialisms, but Id seems fairly consistent. |
20:40 | <jasew> | If it helps, not only does the DOM use |
20:48 | <Chris de Almeida> | it does seem like a foregone conclusion doesn't it? I must say I have a hard time understanding the controversy |
20:50 | <littledan> | cleaning up the notes, I'm just sort of shocked how reasonable we all sound, and how we're making clear logical arguments on all sides. I sometimes get caught up in the emotions in the moment and lose track of that! And it's been amazing to work with the transcriptionist--when I was helping with notes, there was so little to fix. |
20:50 | <littledan> | like, how do we all make such interesting coherent comments improvised? We're pretty good! |
20:51 | <ryzokuken> | I was wondering how it must feel like to transcribe a meeting like ours |
20:51 | <ryzokuken> | with no context whatsoever |
20:54 | <littledan> | well, I think they were reading our corrections and getting better over the course of the meeting |
20:54 | <littledan> | anyway it'd be great to get more feedback from everyone, especially people correcting notes, on the transcriptionists this time |
20:55 | <ljharb> | i appreciate the tempering |
20:56 | <bakkot> | my feedback is that I love the transcriptionists |
20:56 | <bakkot> | notes require much less work to fix, and also I don't have to run the bot |
20:56 | <ljharb> | it's so much better. there's always going to be tiny things to polish but none of that detracts from how much better the experience is with the transcriptionist. |
21:11 | <HE Shi-Jun> | And Id is the abbreviation for Identifier or Identity |
21:48 | <bakkot> | re: notes, I do hope we can fix up the linebreaks before publishing |
21:48 | <bakkot> | that's the main thing I would want to change |
21:53 | <littledan> | Yeah, I'll definitely be in touch with the firm to see if we can get that fixed before next meeting (and I'm fixing the line breaks for the topics where I presented) |
21:55 | <bakkot> | That, at least, we can probably handle with a very small script |
21:55 | <Justin Ridgewell> | Yah, I was thinking a regex could convert the line breaks into paragraphs |
21:56 | <littledan> | there's often duplicated words (or small corrections) on subsequent lines |
22:11 | <shu> | actually even more, i'm going to walk back chrome unilaterally doing anything with a willful violation. the right next step on my end, in the case of no TC39 consensus, is an HTML spec PR to document the willful violation |
22:11 | <shu> | if other browsers have concerns, then we'll hash it out there, as interop is still paramount at the end of the day, but the Id spelling is definitely the right one to use on the web platform |
23:58 | <bakkot> | c++ apparently considering pipeline, directly referencing the JS proposal https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2672r0.html |