06:50 | <ptomato> | I'd be happy to do a scrub session as well |
07:09 | <Richard Gibson> | or was the scenario you were thinking of in u and v modes only? IdentityEscape[UnicodeMode] :: [~UnicodeMode] |SourceCharacter| but not |UnicodeIDContinue| (almost all character escapes are valid in legacy mode) |
08:04 | <nicolo-ribaudo> | I just realised we'll have to figure out the PDF generation story also for the source maps spec ๐ญ |
08:07 | <nicolo-ribaudo> | Oh actually just printing to PDF from Firefox is good enough |
08:11 | <Michael Ficarra> | yeah tell that to Ecma |
08:19 | <littledan> | we'll all have until December to figure this out; it won't be until next meeting (at the absolute earliest) that we have something that we want to propose to TC39 to propose to the Ecma GA |
08:33 | <hax (HE Shi-Jun)> | Is the link of slides of current topic available? |
08:33 | <ryzokuken (TC39 ๐ซ๐ฎ)> | hax (HE Shi-Jun) will ask the speaker to post them |
09:00 | <littledan> | For the ShadowRealms topic, I've inserted the comment that I wanted to make in the notes, which was: I recommend applying the criterion, โShadowRealms should contain the intersection of whatโs in all conceivable environmentsโ, which implies that they are missing everything to do with I/O [excluding import()], timers, DOM, etc. https://github.com/tc39/proposal-shadowrealm/issues/398#issuecomment-1939418911 |
09:01 | <waldemar> | Bit-packing breaks down badly once concurrent threads are introduced. C++ found out about this the hard way. |
09:01 | <littledan> | I agree with the set of things that are spec'd as Exposed=* that Igalia has put together--they seem to be following this principle already. |
09:01 | <waldemar> | A key requirement is that writes to different variables must be independent. |
09:55 | <Aki> | I just realised we'll have to figure out the PDF generation story also for the source maps spec ๐ญ |
09:57 | <Aki> | Does anyone want to volunteer to audit the PDF when it's ready? If a handful of volunteers took a few clauses each (just scrolling through and making sure there's no unfortunate page breaks mostly) then I'd feel a lot more confident with the final product |
09:57 | <Aki> | it's like 900 pages, my eyes keep glazing over |
10:00 | <Michael Ficarra> | @Aki I can take a look at it |
10:01 | <Aki> | Michael Ficarra: cool, i'll let you know when it's ready |
10:01 | <ryzokuken (TC39 ๐ซ๐ฎ)> | I volunteer especially if you also want someone to look through 402 |
10:02 | <Aki> | I'm pretty confident there isn't gonna be stuff randomly missing or cut off. readability is my priority now. |
10:02 | <Aki> | ryzokuken (TC39 ๐ซ๐ฎ): yessss |
10:02 | <littledan> | could someone who's been in the zoom copy the slide link for the notes? |
10:02 | <Michael Ficarra> | yeah it's the finding random bits that aren't there that's the real hard part |
10:03 | <sffc> | Can someone share Ben's slides? I have an older link but it's not these latest slides |
10:03 | <Ashley Claymore> | The link was posted in zoom, but I wasn't in the call when it was posted |
10:03 | <Ashley Claymore> | so joining now can't see it |
10:04 | <Ashley Claymore> | if someone who was already in zoom could share that would be great |
10:05 | <eemeli> | https://docs.google.com/presentation/d/1WCdpcX4IpObi0CD1ftXA9QbZL5RSEGlYGXdqw3EfIdg/ |
10:05 | <Ashley Claymore> | thanks! |
10:17 | <Duncan MacGregor> | I was going to ask about the US survey foot, but apparently that's being retired. |
10:18 | <Duncan MacGregor> | It's definitely not in the units.xml, nor are any of the other historical survey feet that various countries have specified. |
10:34 | <Michael Ficarra> | @littledan I disagree that MDN is a good solution for discoverability of these values |
10:35 | <littledan> | @littledan I disagree that MDN is a good solution for discoverability of these values |
10:38 | <Michael Ficarra> | an l10n expert may have enough familiarity with cultural differences to know to describe a speed unit as a road travel speed or a volume unit as volume of gasoline, but your average developer might just see something more generic (which has no special handling in their locale) and use that |
10:39 | <Michael Ficarra> | that's why I think this is great for l10n experts but I just don't see your average dev who has no interest in l10n being all that effective with it |
10:40 | <Michael Ficarra> | not without having read through 100s of possible special cases from all around the world |
10:40 | <littledan> | it's hard for me to understand what sort of documentation or API shape might support them better. |
10:40 | <Michael Ficarra> | for example, I may not think to describe a volume of milk differently than a volume of water because in the US they are measured the same, but in other locales that makes a difference |
10:41 | <Michael Ficarra> | exactly, I don't know the solution to make this more discoverable either |
10:46 | <Duncan MacGregor> | In my experience people will use the wrong units or usage contexts, I don't think you can stop that. Luckily the units defined in units.xml are fairly limited, and most of them are different enough that people should spot problems fairly quickly. Things like piints and gallons are the exception here because the various types are close enough to be problematic in real world use. |
10:47 | <ryzokuken (TC39 ๐ซ๐ฎ)> | for example, I may not think to describe a volume of milk differently than a volume of water because in the US they are measured the same, but in other locales that makes a difference |
10:48 | <ryzokuken (TC39 ๐ซ๐ฎ)> | like if you're writing an app that sells milk across different locales, you might care about it |
10:48 | <Michael Ficarra> | if you're writing a news article, you may not |
10:50 | <Duncan MacGregor> | if you're writing a news article, you may not |
10:50 | <Michael Ficarra> | "libraries of Congress" is a frequent one in the US... |
10:50 | <ryzokuken (TC39 ๐ซ๐ฎ)> | if you're writing a news article, you may not |
10:58 | <Michael Ficarra> | @ryzokuken (TC39 ๐ซ๐ฎ) I don't think that's the direction new articles are moving. NYT very frequently has interactive visualisations to help tell the story. I would not be surprised if they are localising units in their articles. |
11:17 | <hax (HE Shi-Jun)> | Yeah, I really want ambient AbortSignal! |
11:18 | <rbuckton> | For the record, I'm very much opposed to it. It looks good on the surface, but has a terrible developer experience for anything more than the simplest base case |
11:18 | <Rob Palmer> | *** New agenda item *** Please be aware a new item has been added to the end of the Agenda - last thing tomorrow. Discard Bindings update or Stage 2 - by rbuckton |
11:20 | <hax (HE Shi-Jun)> | For the record, I'm very much opposed to it. It looks good on the surface, but has a terrible developer experience for anything more than the simplest base case |
11:21 | <rbuckton> | Ok. But I really need some easy way to solve such simplest case ... It's really frustrating that debugging several hours and find that someone just forgotten to pass signal in some inner functions... |
11:30 | <rbuckton> | Adding magical capabilities that do an end run around existing code is a great way to cause headaches for package authors who now start getting issues filed against them because they break unexpectedly where they worked fine before. |
11:31 | <rbuckton> | Filing issues or sending upstream PRs to packages to add support for cancellation is annoying, yes, but it allows those package authors to consider the ramifications of such a change. |
11:33 | <hax (HE Shi-Jun)> | I understand the risk, maybe we can find some way to allow package authors opt in such magic, for example, add special symbol to the objects/functions/classes to denote it. |
11:36 | <rbuckton> | I think it's reasonable for someone to use an AsyncContext variable to establish their own magical transparent cancellation token, as it's on a case by case basis. I would still strongly discourage that practice, though. |
11:40 | <Ashley Claymore> | Debugging is even harder when transparent things you can't even trace cause issues in the other direction. Finding a forgotten parameter is easy in comparison.
Maybe devtools could help show when Tasks get cancelled, and show the stack of what triggered the cancellation? |
11:40 | <rbuckton> | I spoke out against transparent cancellation mechanisms when Yehuda suggested them back in ~2017. They overcomplicate everything but 1-1 cancellation interactions. |
11:40 | <hax (HE Shi-Jun)> | I think it's reasonable for someone to use an |
11:41 | <rbuckton> | I don't want cancellation to be the new this . |
11:41 | <rbuckton> | Everyone complains or is confused about this in JS. |
11:42 | <hax (HE Shi-Jun)> | What about other langauges? I remember swift have some implicit cancelation behavior? |
11:42 | <rbuckton> | I'm not terribly familiar with swift, so I couldn't say. |
11:43 | <hax (HE Shi-Jun)> | Everyone complains or is confused about this will not be passed to function implicitly ? |
11:46 | <rbuckton> | It's comparable in that you have to do unique things to preserve or drop the this context in many cases. |
11:46 | <Anthony Bullard> | Any sort of implicit or ambient control flow sounds like a debugging nightmare |
11:46 | <hax (HE Shi-Jun)> | Only global functions will get this implicitly ?... oh, non-strict functions... |
11:47 | <rbuckton> | hax (HE Shi-Jun): you're proving my point. this is actually very complex. |
11:47 | <Anthony Bullard> | But I just woke up, so maybe I should get caught up first |
11:47 | <rbuckton> | Passing an argument is not complex. |
11:48 | <rbuckton> | Transparent cancellation is overoptimizing for the simplest case at the cost of the more complex cases that often have more need for an accurate and reliable cancellation mechanism. |
11:48 | <hax (HE Shi-Jun)> | hax (HE Shi-Jun): you're proving my point. fn() equal to this.fn() in classes, and it seems ok to developers. |
11:48 | <Duncan MacGregor> | Let's just introduce common lisp style "special variables" if we want to thread things through in an ambient fashion. /s |
11:51 | <rbuckton> | I think the complexity is coming from inconsitant , not implicity itself. For example, in many languages, this confusion is a well known issue where simple cases seem fine, but the complex cases you run into are perilously close to the simple case. |
11:52 | <hax (HE Shi-Jun)> | hax (HE Shi-Jun): you're proving my point. fn() always use fn.call(this) semantic everywhere, and I find it could be consistent and no confusion. ๐
|
11:52 | <rbuckton> |
|
11:56 | <rbuckton> | But back to cancellation. An opt-in mechanism is "fine", i.e. fetch(url, { signal: "inherit" }) . But that means documenting that native API's should always require user opt-in. A native API designer might choose to ignore that and require opt-out, thus it's a slippery slope. |
12:07 | <Luca Casonato> | Duncan MacGregor: we do have that already: String.prototype[Symbol.iterator] |
12:10 | <littledan> | But back to cancellation. An opt-in mechanism is "fine", i.e. |
12:13 | <littledan> | Passing an argument is not complex. |
12:14 | <littledan> | (I actually think having an ambient AbortSignal will be helpful for web components generally, alongside Signals) |
12:15 | <Duncan MacGregor> | Duncan MacGregor: we do have that already: "๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ"[Symbol.iterator]() returns more elements than you may have wanted. |
12:16 | <Luca Casonato> | yeah - probably we also want string iteration on graphemes? :D |
12:17 | <Duncan MacGregor> | I think so yes. |
12:17 | <ljharb> | yup - we'd want string .graphemes() or something, and that's an intl API (Intl.Segmenter) which makes it tricky to put on String.prototype |
12:19 | <Duncan MacGregor> | Is that an intl API for historical reasons? Do graphemes alter with locale in some way I haven't considered? |
12:20 | <ljharb> | they do (i'm told) |
12:20 | <Duncan MacGregor> | ๐ฑ |
12:21 | <ljharb> | otherwise we'd have probably had a string .graphemes proposal many years ago :-) |
12:21 | <littledan> | the definition of grapheme is complicated and changing a bit over time |
12:22 | <littledan> | I think it wasn't quite that graphemes were already defined in a locale-dependent way but rather that they might be in the future |
12:22 | <littledan> | something something Indic scripts something |
12:23 | <rbuckton> | .NET does not have transparent cancellation, but developers still use CancellationToken . I don't think it's as big of an adoption blocker as you're making it out to be? I don't use AbortSignal partly because it's too awkward to use due to its EventTarget usage. I do use cancellation though (and @esfx/async-canceltoken can theoretically be used in place of an AbortSignal in DOM APIs) |
12:23 | <ljharb> | hmm, if it doesn't vary by locale now then it seems like there still might be value in shipping an invariant one in the language, and if that changes in the future, we could let Intl replace that in situ like it does for toLocaleString? |
12:23 | <bakkot> | zip ๐ |
12:24 | <ryzokuken (TC39 ๐ซ๐ฎ)> | localized strings cannot be iterated on in a locale-independent way |
12:25 | <littledan> | FYI "it should be fine to pass the cancel token explicitly" was the argument that Domenic and I had in 2016 (where I was arguing that explicit passing is OK) which led him to withdraw cancel tokens from TC39. |
12:26 | <littledan> | moving venues was a strange reaction to that argument, as it clearly didn't lead to implicit threading of cancel tokens... I think some misunderstandings happened around that issue. |
12:26 | <ryzokuken (TC39 ๐ซ๐ฎ)> | well, segmenter allows you to iterate on strings/segment them in many different ways beyond just graphemes |
12:27 | <ljharb> | well, segmenter allows you to iterate on strings/segment them in many different ways beyond just graphemes |
12:27 | <ryzokuken (TC39 ๐ซ๐ฎ)> | I believe there are edge cases |
12:27 | <ryzokuken (TC39 ๐ซ๐ฎ)> | but let me confirm that |
12:27 | <littledan> | right, but if the only use case i have is to iterate on graphemes, can it be done in a locale-independent way? |
12:28 | <littledan> | the "root locale" is a synthetic construct in CLDR that doesn't correspond to anyplace, but other locales are expressed as a diff against it |
12:28 | <ryzokuken (TC39 ๐ซ๐ฎ)> | in general, we very much do not expose the "root locale". But with graphemes probably any locale will do for now. und |
12:28 | <ryzokuken (TC39 ๐ซ๐ฎ)> | I think it could work? Let me see what implementations think. |
12:29 | <ryzokuken (TC39 ๐ซ๐ฎ)> | both un and und work here on FF |
12:30 | <ljharb> | if it can work and not be in intl, i'd be happy to co-champion something like .codePoints() , .codeUnits() , and .graphemes() methods on String.prototype. only reason i haven't years ago is that i thought it can't work |
12:30 | <ryzokuken (TC39 ๐ซ๐ฎ)> | why not champion an Intl proposal if needed? |
12:30 | <ryzokuken (TC39 ๐ซ๐ฎ)> | we'd love to help out if we can ๐ |
12:30 | <Michael Ficarra> | I don't like .graphemes living outside Intl but the other two would be great and I would co-champion |
12:30 | <ljharb> | i have Intl.Segmenter for that already. I need something that's in every environment, and ideally on String.prototype. |
12:30 | <ryzokuken (TC39 ๐ซ๐ฎ)> | ah, sure |
12:31 | <ljharb> | I don't like |
12:31 | <Michael Ficarra> | @ljharb it is though |
12:31 | <littledan> | both |
12:31 | <ljharb> | i thought that's what ujjwal was just saying it's not. |
12:32 | <Michael Ficarra> | ... where? |
12:32 | <ryzokuken (TC39 ๐ซ๐ฎ)> | ah interesting, it's treating "und" as the JS value undefined |
12:32 | <ryzokuken (TC39 ๐ซ๐ฎ)> | by which I mean it's falling back to my system locale (en-DK) |
12:33 | <ljharb> | here: https://matrix.to/#/!WgJwmjBNZEXhJnXHXw:matrix.org/$dEtEYuEpnCUpLhfMmu7TbPKuc_4CEDr3LXHI_MkV4Y4?via=matrix.org&via=mozilla.org&via=igalia.com but that's still unconfirmed, and maybe isn't the case |
12:34 | <ryzokuken (TC39 ๐ซ๐ฎ)> | yeah I'll recheck after today's session and let you know Michael |
12:35 | <Michael Ficarra> | uhhh ๐น๐ผ |
12:37 | <ljharb> | http://unicode.org/L2/L2001/01322r-grapheme_cluster.htm |
12:37 | <ljharb> | that's super old, did the proposal ever land? |
12:38 | <Michael Ficarra> | yeah if that exists, then I'd be fine putting it on String.prototype |
12:39 | <Duncan MacGregor> | There's a follow up here https://www.unicode.org/L2/L2023/23140-graphemes-expectations.pdf |
12:39 | <rbuckton> | Does Intl/CLDR/etc. have something like an "invariant" locale (i.e., for machine readable formatting, not UI formatting)? |
12:39 | <ryzokuken (TC39 ๐ซ๐ฎ)> | Does Intl/CLDR/etc. have something like an "invariant" locale (i.e., for machine readable formatting, not UI formatting)? und |
12:39 | <ryzokuken (TC39 ๐ซ๐ฎ)> | but apparently we handle it quite weirdly? |
12:40 | <bakkot> | uhhh ๐น๐ผ |
12:41 | <ryzokuken (TC39 ๐ซ๐ฎ)> | all nordic flags should be a ligature with a base flag |
12:41 | <bakkot> | e.g. there is no
|
12:41 | <Michael Ficarra> | even regional flags like ๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ? |
12:42 | <bakkot> |
1 |
12:42 | <bakkot> | https://unicode.org/reports/tr29/#Default_Grapheme_Cluster_Table says
|
12:44 | <bakkot> | and also
which applies to regional flags, probably |
12:45 | <bakkot> | though I don't know offhand whether something counts as a "emoji zwj sequence" if the sequence is not a recognized emoji |
12:45 | <Michael Ficarra> | it's only a ZWJ if there's intercalated ZWJs |
12:46 | <bakkot> | I guess ๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ is a emoji modifier sequence not a zwj sequence yes |
12:47 | <littledan> | by which I mean it's falling back to my system locale (en-DK) |
12:47 | <ryzokuken (TC39 ๐ซ๐ฎ)> | no, I tried another and it complained |
12:48 | <littledan> | try (new Intl.NumberFormat("xyz")).resolvedOptions().locale , same thing |
12:48 | <ryzokuken (TC39 ๐ซ๐ฎ)> | ah wait yes |
12:48 | <ryzokuken (TC39 ๐ซ๐ฎ)> | nvm it was failing for non 2-3 character long locales |
12:49 | <littledan> | ๐ |
12:49 | <eemeli> | With "und" you're observing fallback to the system locale. |
12:49 | <Duncan MacGregor> | Amusingly Safari's dev console doesn't handle deletion correctly with flags. "๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ" -> "๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด" -> "๐ด๓ ง๓ ข๓ ณ๓ ฃ" -> "๐ด๓ ง๓ ข๓ ณ" โฆ |
12:51 | <nicolo-ribaudo> | (deleted because my code was wrong) |
12:51 | <jkup> | wait nic i want that link |
12:51 | <jkup> | oh ok |
12:52 | <nicolo-ribaudo> | https://developer.mozilla.org/en-US/docs/Web/API |
12:52 | <bakkot> | as far as I can tell:
|
12:53 | <ljharb> | ok so then we should definitely have a future-402-enhanceable String.prototype method? |
12:53 | <bakkot> | I am not an Intl knower though, so that could be wrong |
12:53 | <Richard Gibson> | Is that an intl API for historical reasons? Do graphemes alter with locale in some way I haven't considered? |
12:53 | <littledan> |
|
12:54 | <Duncan MacGregor> | I think a 402 enhanceable method would be a good thing. |
12:55 | <Chris de Almeida> | folks on the queue, please include a topic description beyond just the letter. ๐ |
12:55 | <ljharb> | (technically all methods are 402-enhanceable, but ofc i meant one explicitly designed for that future purpose) |
12:56 | <ljharb> | folks on the queue, please include a topic description beyond just the letter. ๐ |
12:56 | <rbuckton> | yeah "und" supposed to be the same regardless of system locale, or is the issue that Intl doesn't support that and treats it as an unknown locale? |
12:57 | <Chris de Almeida> | still can't edit :-( |
12:58 | <Chris de Almeida> | thank you! |
12:59 | <bakkot> | we already have a built-in ThrowTypeError function |
12:59 | <bakkot> | (for Function.prototype.caller ) |
12:59 | <ljharb> | asked about that on the queue |
13:00 | <rbuckton> | I'd really like to be able to use a locale-invariant Intl.Collator for sorting inputs reliably in, say, a compiler that runs on different systems all over the world... |
13:01 | <bakkot> | though, engines probably want a different error message for Function.prototype.caller vs these things |
13:02 | <hax (HE Shi-Jun)> | Is there any precedent of sharing methods among several classes? |
13:03 | <rbuckton> | Wouldn't b.until(a) be a better replacement for a.since(b) ? |
13:03 | <rbuckton> | (no intermediate allocation) |
13:04 | <bakkot> | unicode reserves "und" for unknown |
13:05 | <rbuckton> | or is until clamped? |
13:05 | <bakkot> | so yes it is the system locale I think |
13:05 | <rbuckton> | so yes it is the system locale I think |
13:05 | <nicolo-ribaudo> | Wouldn't |
13:05 | <nicolo-ribaudo> | Or maybe ryzokuken (TC39 ๐ซ๐ฎ): knows |
13:06 | <rbuckton> | I think they are not equivalent, but I don't know exactly how. I suggest asking in the queue so that Philip can respond |
13:06 | <bakkot> | ah, though apparently that isn't threaded through to browsers: https://github.com/tc39/ecma402/issues/885 |
13:06 | <littledan> | ah, though apparently that isn't threaded through to browsers: https://github.com/tc39/ecma402/issues/885 |
13:06 | <Richard Gibson> | Is there any precedent of sharing methods among several classes? |
13:06 | <nicolo-ribaudo> | It's more of a curiosity than a concern. |
13:11 | <rbuckton> | From the temporal docs for since() |
13:11 | <rbuckton> | Per this, they should be equivalent? If not, I'm curious what the outliers are. |
13:12 | <Richard Gibson> | a.since(b, opts) and a.until(b, opts).negated() are equivalent, but a.since(b, opts) and b.until(a, opts) are not |
13:13 | <ljharb> | ftr C, and H - K, have nothing on the queue |
13:14 | <rbuckton> | Ah, the difference is in how the opts might be applied? |
13:18 | <Richard Gibson> | right, starting point is always the receiver so e.g. with largestUnit: "month", March 31 to April 30 is P1M while April 30 to March 31 is -P30D |
13:19 | <Duncan MacGregor> | Thank you, that really helps clarify things. |
13:21 | <rbuckton> | right, starting point is always the receiver so e.g. with largestUnit: "month", March 31 to April 30 is P1M while April 30 to March 31 is -P30D |
13:22 | <Duncan MacGregor> | I think as soon as you allow addition or subtraction of variable sized things like months you'll hit those odd corner cases. |
13:23 | <rbuckton> | Mostly because this is essentially "date math" but isn't as reliable as actual math. |
13:24 | <Duncan MacGregor> | Yeah, abandon all hope, there are no monoids here. |
13:25 | <rbuckton> | I mean, normalization would make it consistent, i.e., swap left and right as necessary to ensure they are ordered, perform the necessary math, and then negate the results as needed for the given API and whether a swap occurred. |
13:34 | <nicolo-ribaudo> | Could somebody re-explain to me this comment? ๐ Do databases use timezones that are not the timezones we are using in temporal? |
13:35 | <Richard Gibson> | such normalization would not give desired results. actual example (runnable against the polyfill at https://tc39.es/proposal-temporal/ ):
|
13:37 | <rbuckton> | That discrepancy is desired? |
13:37 | <Richard Gibson> | yes |
13:39 | <rbuckton> | Why is it desirable? |
13:41 | <nicolo-ribaudo> | Re subtract, even Shu said that it's confusing to remove subtract in his pre-written message to Rob |
13:41 | <nicolo-ribaudo> | And this "size reduction" request is coming from him |
13:42 | <jkup> | I sort of read into it as "I understand if you want subtract" but with an undertone of "If you add it back, remove something else" - maybe that's wrong? |
13:42 | <littledan> | I sort of read into it as "I understand if you want subtract" but with an undertone of "If you add it back, remove something else" - maybe that's wrong? |
13:42 | <nicolo-ribaudo> | We should look at O(n) reductions and not O(1) |
13:44 | <nicolo-ribaudo> | Would a .symmetricDifference instead of .subtract work, if the concern is hiding negative durations? (even though this should have been discussed in stage 2) |
13:46 | <nicolo-ribaudo> | Oh, I guess a.subtract(b).abs() |
13:46 | <littledan> | I'm not convinced that making people use negative durations for their subtract replacement more frequently is the best educational device... I don't think that should be a goal |
13:48 | <Richard Gibson> | Why is it desirable? |
13:50 | <nicolo-ribaudo> | Is the way humans think to use "since" for things in the past and "until" for things in the future? |
13:51 | <ljharb> | yes, i'd say so (in english at least) |
13:52 | <rbuckton> | I'd almost rather have since as I'm sure many users would be tripped up by until not being symmetric. |
13:52 | <nicolo-ribaudo> | Somehow it's much harder for me to think about until than since but this is like... not a data point |
13:54 | <nicolo-ribaudo> | Also, we said it's difficult for people to have to think about negative durations and now we are saying "get a negative duration and then re-negate it"? |
13:54 | <Michael Ficarra> | @nicolo-ribaudo many JS programmers are non-native speakers, so it kinda is a data point |
13:54 | <nicolo-ribaudo> | Oh yeah I clearly remember a song we studied in middle school in my english classes that used "since" a lot ๐ |
13:59 | <bakkot> | ljharb: I am confused; stage 2.7->3 is pro-forma on the basis of sufficient tests being present |
13:59 | <bakkot> | it is not about anything other than that |
13:59 | <bakkot> | Temporal has lots of tests |
14:00 | <ljharb> | p sure it's not just about tests |
14:00 | <ljharb> | and either way this agenda item means its tests are no longer correct |
14:02 | <bakkot> | all changes at stage 3 invalidate some tests and we don't normally bump things down, and in fact the champions have already done the work to make the changes to the tests for these proposed changes |
14:02 | <bakkot> | and certainly when 2.7 was introduced I understood it to be about tests |
14:02 | <bakkot> | the purpose is
and the entrance criteria for 3 is
|
14:03 | <bakkot> | perhaps Michael Ficarra can speak more to this? |
14:03 | <ljharb> | and clearly it wasn't sufficient given the vast quantity of normative changes over almost every meeting in the last 4 years. |
14:03 | <leftmostcat (UTC-7)> | justingrant ptomato I'd definitely be interested in discussing declarative custom time zone behavior further. |
14:03 | <littledan> | and certainly when 2.7 was introduced I understood it to be about tests |
14:04 | <ljharb> | ok, then maybe stage 2 is the right call |
14:04 | <ljharb> | i mainly feel that stage 3 isn't appropriate for Temporal (and really hasn't been in a long time) |
14:04 | <ljharb> | a big part of the discussion around 2.7 was admittedly my own stated opinion (but i wasn't alone) that "3 means shippable" |
14:05 | <ljharb> | temporal is not shippable yet. |
14:05 | <littledan> | I think Temporal is in a similar state to Decorators: right now it deserves to be at Stage 3, though at some point in the past it might've met the criteria for a demotion and re-promotion. |
14:05 | <bakkot> | 3 means appropriate to implement |
14:05 | <nicolo-ribaudo> | Can we merge the since() and subtract() methods? And they check their receiver |
14:06 | <ljharb> | implement !== ship unflagged and use in production |
14:06 | <littledan> | Can we merge the since() and subtract() methods? And they check their receiver |
14:06 | <ljharb> | the intention was for 3 to mean the latter; perhaps the 2.7 PR should have tweaked the stage 3 wording better, but i didn't realize it said "implement". |
14:06 | <nicolo-ribaudo> | if Shu wanted us to merge random things, he would've said so |
14:06 | <nicolo-ribaudo> | To have ony one .since and one .subtract |
14:06 | <nicolo-ribaudo> | Like for .valueOf |
14:11 | <bakkot> | implement !== ship unflagged and use in production |
14:11 | <ljharb> | it's not about "in charge", it's about the public signal |
14:11 | <ljharb> | a lot of the 2.7 discussion was about precisely that - that stage 3 sends the signal that it's ok to use it in production and that it's ok for it to be shipped unflagged. they can do whatever they want regardless, but the signal matters |
14:11 | <ljharb> | and temporal has had an inaccurate signal for 4 years |
14:12 | <bakkot> | the only signal relevant to whether you can use something in production is whether it is in the engines that you support |
14:13 | <ljharb> | that's wildly incorrect, given the existence and usage of polyfills |
14:13 | <ljharb> | and, not every engine/implementation is always in this room. the stage is a signal to them, too. |
14:13 | <bakkot> | you can use a polyfill for a feature which has never even been proposed if you want to? I don't know what the relevance of "polyfills exist" is to this |
14:35 | <shu> | I sort of read into it as "I understand if you want subtract" but with an undertone of "If you add it back, remove something else" - maybe that's wrong? |
14:36 | <shu> | the undertone was more like "it is understandable, on a case by case basis, if some should be added back. but if too many are added back then we have a problem again" |
14:45 | <Christian Ulbrich> | https://www.youtube.com/watch?v=hnpILIIo9ek |
14:45 | <Christian Ulbrich> | Or: head over to: https://tcq.staging.tcq-reloaded.tcq.ninja to see tcq-reloaded in action. |
14:47 | <Christian Ulbrich> | For those, that are interested, the PR is https://github.com/zalari/tcq/pull/7 , it is not persistent, i.e. whenever I redeploy, everything is gone, because I need to write additional adapters. Feedback on above PR is highly appreciated. I have no clue, what the perf requirements for TCQ are, it is a very small VM running on AWS Fargate. |
14:51 | <Christian Ulbrich> | I have created a meeting -> https://tcq.staging.tcq-reloaded.tcq.ninja/meeting/gMqy for which, Rob Palmer davidenke and Chris de Almeida are chairs, so feel free to play around. |
14:55 | <Michael Ficarra> | for those of us walking to the FF speaker dinner from kamppi metro, meet at the South building entrance in like 10 minutes? |
14:56 | <Michael Ficarra> | it's a 26min walk |
14:57 | <ljharb> | you can use a polyfill for a feature which has never even been proposed if you want to? I don't know what the relevance of "polyfills exist" is to this |
15:02 | <littledan> | the undertone was more like "i understandable, on a case by case basis, if some should be added back. but if too many are added back then we have a problem again" |
15:03 | <shu> | With the results today, are we in that โproblemโ state (not yet removing minus or since; not merging toJSON or valueOf yet)? |
15:04 | <shu> | i imagine the only way to tell is to implement the removals and see, but on paper it looks like a big improvement |
15:05 | <littledan> | i'm working through the notes still, but by state you mean items A-L excluding D, E, and F? |
15:07 | <ryzokuken (TC39 ๐ซ๐ฎ)> | for those of us walking to the FF speaker dinner from kamppi metro, meet at the South building entrance in like 10 minutes? |
15:07 | <ryzokuken (TC39 ๐ซ๐ฎ)> | At the Fazer cafe now |
15:08 | <ryzokuken (TC39 ๐ซ๐ฎ)> | It's on the walk there |
15:08 | <shu> | have a good dinner everyone |
15:40 | <ptomato> | I'd almost rather have since is equally asymmetric as until is |
15:42 | <ptomato> | also, I'd have to double-check to make sure I'm 100% right about this, but a.since(b) is equal to b.until(a) ; it's only if you pass a.since(b, opts) and b.until(a, opts) where opts is not the default, that they are asymmetric. the default options don't let you run into calendar math, and calendar math is where the asymmetry occurs |
15:58 | <rbuckton> | rbuckton: I'm not sure if this was later answered by anyone because there's a long scrollback that I wasn't keeping up with during the presentation; but |
17:39 | <bakkot> | I don't think users can ever rely on a feature being stable before it is both implemented and shipped in browsers. to give a concrete example, groupBy was stage 3, and we were all happy with the design, but we discovered after shipping that it needed to change. we could not have reasonably learned that before shipping. I don't see how the existence of polyfills has any relevance to that. |
17:40 | <bakkot> | so I don't think it makes sense to have a specific stage to indicate "you can rely on this in prod". the only signal of that is "is it shipped in browsers". |
17:41 | <bakkot> | users should expect that any proposal might change prior to it being shipped |
17:41 | <ljharb> | i think the qualitative difference is the window. groupBy was only shipped for a very brief time |
17:41 | <ljharb> | i agree users should expect that. i'm saying that "stage 3" is what they DO expect indicates it. |
17:41 | <ljharb> | we can't just stick our heads in the sand and pretend users only think about things the way they "should" |
17:45 | <bakkot> | I don't think we can actually do anything about that though? we can't make them have different standards for relying on things |
17:45 | <bakkot> | redefining terms won't change what their thresholds actually are |
19:15 | <ljharb> | what we can do is adapt our meanings/signals to match their expectations. and their expectation is that "stage 3 means i can use it" |
19:16 | <ljharb> | iow just like the spec caves to web reality, the process should do the same to ecosystem reality. |
19:21 | <bakkot> | people don't interpret stage 3 as "i can use it" because they like the number 3, they interpret it that way because of what it actually signifies |
19:22 | <bakkot> | redefining terms will not cause them to start caring about different things |
19:25 | <Chris de Almeida> | I can't help but feeling there's some degree of hindsight bias involved |
19:37 | <ljharb> | i agree, i'm not saying we redefine terms. i'm saying that what stage 3 actually signifies in practice is "i can use it", not "browsers can implement it", which is why i think temporal probably doesn't belong in stage 3. because nobody's close to being able to use it yet. |
20:46 | <littledan> | We have been purposely refining the meaning of Stage 3 over time, eg recently adding the test requirement, in order to reinforce its rigor. It would be reasonable to consider further changes, eg โif a proposal has recently changed it shouldnโt be Stage 3 for a bitโ, but that would be a new, different process idea that we could consider for consensus in general; it is kinda ad hoc to advocate that we should enforce that requirement just for a particular proposal. |
21:29 | <ljharb> | that was the precise suggestion you made for global , if you recall. |