04:27
<Jack Works>
fwiw i still think "does TC39 care about long-term unforking of vastly popular JS forks" is a pretty important problem for the ecosystem

this is the only reasonable goal for me that might push this proposal forward, to unfork the fork

but that also skeptical. Remember CoffeeJS? If TypeScript no longer popular like CoffeeJS used to?

04:55
<bakkot>
coffeescript, is maybe what you're thinking of? but that wasn't really a fork, it was just a different language which compiled to JS
07:13
<Ashley Claymore>
coffeescript did fork the community though. es2015 brought a lot of folk back to js
07:15
<Ashley Claymore>
I’m not sure if cs directly motivated any of the design of es2015. Maybe those who were involved will recall?
07:18
<Ashley Claymore>
Maybe the same happened with Java? Have recent versions been motivated by people’s adoption of Kotlin (Kotlin feels more like Java++ compared to other jvm languages like Scalar/Clojure that feel like entirely separate languages)
07:25
<legendecas>
That's right, so I think we should make friendly advice them to add. If they are added, we can be free from adding a bench of syntax that doesn't do anything
friendly advice is still not a requirement for stage advancement, no?
12:09
<annevk>

You’ve been removed from the "Delegates" team on the "Ecma TC39" organization.

Got that email from GitHub, but didn't really see anything explaining it

12:11
<annevk>
Oh, I think I see what it might be
12:11
<Luca Casonato>
Teams are being reorganized. No permission changes should have taken place
12:12
<Luca Casonato>
You are now in the Member: Mozilla team which is a child of the Delegates team
13:54
<Rob Palmer>
*** Plenary begins in 5 mins! ***
14:12
<bakkot>
I understand that the scope is "whatever is in CLDR"
14:12
<bakkot>
which is maybe not the best definition but does tend to be what most languages do, as I understand it
14:13
<Jack Works>

Meta: What's the end-game for Intl? Is it ICU4JS?

14:13
<Jack Works>
why not 👀
14:13
<Jack Works>
otherwise people will bring their own ICU4JS
14:13
<sffc>
waldemar: the CLDR data file is at https://github.com/unicode-org/cldr/blob/main/common/supplemental/units.xml#L272
14:28
<Michael Ficarra>
I don't disagree with Chip here, but if we wanted to have this discussion, it should've been a "discussion" topic on the agenda
14:31
<bakkot>
the point about person heights using different units depending on the actual height involved is a good one, I think
14:31
<bakkot>
hard to convey that properly in just a "what units are preferred" query
14:32
<shu>
the point about person heights using different units depending on the actual height involved is a good one, I think
wait really? like if someone is over a certain height, they switch to metric
14:32
<bakkot>
no they switch between "feet and inches" to just "inches"
14:32
<bakkot>
for heights under 3 feet
14:32
<bakkot>
in the US
14:32
<bakkot>
... apparently
14:32
<shu>
fascinating, TIL
14:33
<sarahghp>
no they switch between "feet and inches" to just "inches"
Ha, I never thought about this, but it is true for heights
14:33
<Michael Ficarra>
a lot of that data has ranges listed: road lengths are miles when long but feet when short
14:34
<shu>
ah yes that one is true
14:34
<yulia>
this makes me feel really weird
14:34
<Bradford Smith>
I would definitely be in favor of making TG2 more autonomous. I'm sure Chip and I are not the only people who tend to zone out during Intl proposal discussions.
14:34
<Michael Ficarra>
they also change the rounding precision: above 100 feet, round to the nearest 10, below round to the nearest 1
14:34
<yulia>
i have blocked stage 1 on this, i just feel like he wasn't prepared
14:34
<bakkot>
wait yulia did you block stage 1
14:35
<bakkot>
the notes do not say that
14:35
<yulia>
no
14:35
<yulia>
i feel bad that i didn't
14:35
<yulia>
the problem statement is what stage 1 is for
14:35
<Michael Ficarra>
yulia: plenary is not over
14:35
<shu>
i actually do not understand any more why 402 is not just a different body with a different process altogether
14:35
<yulia>
im not going to block, i understand that he won't have time to work on this if it isn't stage 1
14:36
<bakkot>
shu: because we have not made it so
14:36
<bakkot>
but we could!
14:36
<shu>
seems to make more sense to tie their process closer to unicode cadence, have better liaising there
14:36
<yulia>
but it feels unfair to allow this to stage 1 when other proposals without problem statements are blocked on this
14:36
<bakkot>
but also a bunch of the work there is API design
14:36
<shu>
well why did they even end up in Ecma?
14:36
<yulia>
I would support intl having powers to advance up to stage 2
14:36
<Michael Ficarra>
yulia: that sounds great
14:36
<Kris Kowal>
your invariants notion would help to that end
14:37
<Kris Kowal>
i think the only things we might have to comment on could be captured in invariants in general
14:37
<shu>
i guess there's no great non-web-biased body that standardizes JS APIs
14:37
<ryzokuken>
this however
14:37
<ryzokuken>
but also a bunch of the work there is API design
^ this sorry*
14:37
<bakkot>
I think we definitely would comment on the API design, even beyond invariants
14:37
<ryzokuken>
we benefit from the discussion in plenary around API design
14:38
<bakkot>
though, in practice we don't, much
14:38
<yulia>
your invariants notion would help to that end
yeah its been a rough beginning to the year, I still have it on my desk
14:38
<shu>
I think we definitely would comment on the API design, even beyond invariants
like, our experience so far is that limiting stage advancement powers to TG1 has not stopped weird API designs
14:38
<jschoi>
i guess there's no great non-web-biased body that standardizes JS APIs
We are that body. 🥲
14:38
<bakkot>
well, that's on us
14:38
<shu>
i know, but unless people are going to start zoning in, or we own up to reality and cede that watchdog power?
14:39
<yulia>
i guess having the invariants written down would be a requirement, and that would reduce the level of review necessary
14:39
<yulia>
you would still need to review, but certain things would be a given
14:40
<ryzokuken>
the TG2 group is fairly honest at keeping ourselves up to the standards Zibi and Shane talked about
14:40
<Kris Kowal>
like, our experience so far is that limiting stage advancement powers to TG1 has not stopped weird API designs
iterator subclassing trees come to mind
14:40
<shu>
like i have no idea what is going on in this preso
14:41
<bakkot>
the thing going on in this presentaiton, as far as I can tell, is that there is a specific text format for templates which people want to use for messages which get formatted in different languages
14:41
<bakkot>
so the proposal is to bring in that parser and its corresponding template engine
14:41
<Michael Ficarra>
ryzokuken: the editor groups should collaborate more; frankly, I don't think 402 has the same editorial quality that 262 has
14:42
<shu>
this template format is further standardized/being standardized by Unicode?
14:42
<ryzokuken>
well, I'd be happy to fix that!
14:42
<bakkot>
yeah
14:42
<bakkot>
or
14:42
<bakkot>
by someone
14:42
<bakkot>
not sure by unicode
14:42
<Michael Ficarra>
I think Unicode
14:42
<ryzokuken>
ryzokuken: the editor groups should collaborate more; frankly, I don't think 402 has the same editorial quality that 262 has
perhaps we could start dropping by the editors meeting?
14:42
<bakkot>
yes, unicode
14:42
<bakkot>
https://github.com/unicode-org/message-format-wg/
14:43
<sffc>
yulia: I will work with Younies to make sure he addresses the concerns about the problem statement
14:43
<Michael Ficarra>
ryzokuken: the meetings are open access, please do!
14:43
<yulia>
sffc: thanks, that would be great
14:44
<bakkot>
this, in particular, seems like it should be a userland library, unless I'm missing something
14:44
<ryzokuken>
sure, though it's scheduled at a difficult time for me 😓 in the meantime, please feel free to file a bunch of editorial issues or just DM me here anytime. Richard has been making improvements in the last few weeks but I understand that there's still a bunch to be done.
14:44
<bakkot>
at least until it gets more common
14:45
<bakkot>
the format isn't even decided right now
14:45
<sffc>
I don't know how I feel about changing the TG2 process. I think it's working just fine the way it is. Intl is responsible for less than 10% of TG1 plenary time this meeting and in most meetings.
14:45
<shu>
i understood chip's point to mean that he'd like it to be 0
14:46
<shu>
the format isn't even decided right now
+1
14:46
<bakkot>
I guess that doesn't matter so much at this stage, to be fair
14:48
<ryzokuken>
Michael Ficarra: I don't have the necessary permissions to answer in that room
14:48
<sffc>
I have various concrete examples of how TG1 feedback has been valuable and shaped the direction of TG2 proposals, which would not have happened if proposals had advanced within TG2 alone.
14:48
<Michael Ficarra>
I do fear this might be a bit premature
14:50
<Bradford Smith>
Perhaps it would be sufficient to clearly divide scheduled plenary time between Ecma-262 and Ecma-402 proposals, so folks can skip parts they aren't interested in?
14:50
<ryzokuken>
I do fear this might be a bit premature
for stage 1 too?
14:51
<sffc>
Bradford Smith: I think the draft schedule serves that purpose already... both of these proposals are moving forward at their scheduled times
14:51
<Bradford Smith>
sffc: We're pretty fast and loose about moving stuff around, during the meeting, though.
14:52
<bakkot>
is the problem statement for stage 1 "we want to format messages for internationalization" or "we want specifically the Unicode message formatter"
14:52
<bakkot>
because those have different motivations
14:52
<shu>
i understood the latter
14:52
<Michael Ficarra>
definitely seems like the latter, which is why I think it's probably premature
14:53
<bakkot>
honestly probably the latter seems more motivated but I'd want it to be, like, something lots of people are doing
14:53
<shu>
the repo has this sentence: "To help with this, we introduce Intl.MessageFormat as a native parser and formatter for MessageFormat 2.0."
14:53
<pzuraq>
another thing I might like to discuss if we get to decorators again on the agenda: https://github.com/tc39/proposal-decorators/issues/459
14:54
<pzuraq>
should we make a decorators matrix room also?
14:54
<bakkot>
pzuraq: why would that not be allowed
14:54
<Bradford Smith>
sffc: Where is that draft schedule, anyway? The agenda doesn't say when the topics will be presented.
14:54
<bakkot>
Bradford Smith: it's linked from the reflector issue
14:54
<sffc>
[deleted]
14:55
<shu>
oh speaking of, bakkot, you're still planning to present the isStatic thing?
14:55
<bakkot>
yes
14:55
<pzuraq>
bakkot generally the syntax is pretty restricted, you can only do chaining of static property names ending in a call
14:55
<bakkot>
assuming chairs can find me a time for it
14:55
<Bradford Smith>
sffc: Ah, the thing that is labeled "Purely a guide, never a promise
" :)
14:56
<pzuraq>
// Allowed
@foo
@foo()
@foo.bar()
@(foo['bar']('baz'))

// Not allowed
@foo().bar
@(foo).bar
@foo['bar']

// Not sure yet
@(foo['bar'])()
@this.#x()
14:56
<Michael Ficarra>
sffc: please don't paste links from the reflector into Matrix
14:57
<sffc>
Michael Ficarra: sorry, I wasn't sure whether that link was okay or not
14:57
<pzuraq>
this decision on syntax was made prior to my taking on the proposal, so I'm not 100% sure what the context was, other than ASI hazards and such
14:57
<Michael Ficarra>
the draft schedule links to the notes docs...
14:57
<ptomato>
FWIW, "message" has a long precedent - it's been called "message" in gettext and its predecessors for decades https://www.gnu.org/software/gettext/manual/gettext.html
14:58
<shu>
why isn't that library called getmessage then? 🤔
14:58
<ptomato>
collections of "messages" are called "message catalogs" in gettext, not sure if that also exists in Unicode
14:58
<Bradford Smith>
What I'm suggesting is something like "Day 2 is specifically for Intl proposals"
14:59
<shu>
bakkot: i think fundamentally, almost all things in Intl are library-y, because it's a really a library. the main driving factor from my POV for "it's worth it to ship in the language" has been "runtimes ship all this data anyway let's put it to good use", with "it'd be good to have a standard" with a secondary
14:59
<ptomato>
why isn't that library called getmessage then? 🤔
decades ago they were bad at naming things. the predecessor was called catgets
15:00
<bakkot>
shu: that's fair but my point is that this proposal does not appear to contain any data
15:00
<bakkot>
just a parser
15:00
<bakkot>
and template engine
15:00
<bakkot>
and maybe I'm wrong about that
15:00
<nicolo-ribaudo>
sffc: please don't paste links from the reflector into Matrix
It should probably be deleted from the Matrix logs, since they are public and that hackmd is editable by anyone
15:00
<Luca Casonato>
shu: that's fair but my point is that this proposal does not appear to contain any data
No, the formatting and templating engine depends on ICU data AFAIK
15:00
<shu>
how?
15:00
<bakkot>
yeah that's the part I'd like to understand more
15:00
<ptomato>
I have a reference on why it is not as simple as using a template engine, but I'll have to dig it up
15:00
<bakkot>
it looked to me like the formatters are just passed in
15:00
<Luca Casonato>
https://projectfluent.org/ explains this really well
15:00
<ptomato>
I'll open an issue in the proposal repo
15:01
<Luca Casonato>

For example in

tabs-close-tooltip = {$tabCount ->
    [one] Close {$tabCount} tab
   *[other] Close {$tabCount} tabs
}

The [one] and [other] are locale specific aliases for different counts.

15:01
<Romulo Cintra>
Some npm stats about i18n libraries https://www.npmtrends.com/fbt-vs-fluent-vs-format-message-vs-i18n-vs-i18next-vs-intl-messageformat-vs-messageformat-vs-polyglot-vs-react-intl-vs-react-i18next
15:01
<bakkot>
npm stats are not useful
15:02
<bakkot>
I refer you all again to https://www.npmjs.com/package/har-validator
15:02
<bakkot>
20m downloads / week for a validator for https://github.com/ahmadnassri/har-spec
15:03
<Michael Ficarra>
bakkot: yeah most people spend most of their day validating HARs, do you not?
15:03
<Luca Casonato>

For example in

tabs-close-tooltip = {$tabCount ->
    [one] Close {$tabCount} tab
   *[other] Close {$tabCount} tabs
}

The [one] and [other] are locale specific aliases for different counts.

In other languages, these aliases might be more complex. For example in polish, between "one" and "many", there is "few":

tabs-close-tooltip = {$tabCount ->
    [one] Zamknij kartę
    [few] Zamknij {$tabCount} karty
   *[many] Zamknij { $tabCount } kart
}
15:04
<ryzokuken>
I think MessageFormat has the same justification as most Intl APIs but even more extreme: IIUC, it'd take a large amount of locale data in order to achieve this, which would be difficult to ship with a web bundle but could be shipped easily with a browser
15:04
<ryzokuken>
maybe the champions can correct me
15:04
<jschoi>
npm stats are not useful
I swear to never use NPM stats in my proposals again. 😔
15:04
<Luca Casonato>

In other languages, these aliases might be more complex. For example in polish, between "one" and "many", there is "few":

tabs-close-tooltip = {$tabCount ->
    [one] Zamknij kartę
    [few] Zamknij {$tabCount} karty
   *[many] Zamknij { $tabCount } kart
}
These plural rules are included in CLDR: https://cldr.unicode.org/index/cldr-spec/plural-rules
15:05
<bakkot>
number of dependents on npm is more meaningful, if you want to look at stats, but that of course only brings in published packages
15:07
<bakkot>
another thing I might like to discuss if we get to decorators again on the agenda: https://github.com/tc39/proposal-decorators/issues/459
I think people are unlikely to have strong opinions on this and it doesn't much matter. If you think it should be other than it is, it's fine to bring it back and make a case for it, but if you just want to discuss it, I don't think that's gonna be particularly productive
15:08
<bakkot>
because I don't expect anyone to really care much
15:08
<pzuraq>
I guess would making a change like this require consensus at this point?
15:09
<bakkot>
yes
15:09
<bakkot>
all normative changes require consensus at this point
15:09
<jschoi>
This is a good catch. I strongly want @(expr)() class {} to be disallowed, like how the explainer says it would be, to make distinguishing decorators from the topic reference in x |> @(arg) still easy.
15:09
<bakkot>
unless the previous spec text was incoherent, which is kind of an edge case
15:09
<pzuraq>
well, we can talk about it this meeting or next then, there will likely be other small changes and tweaks to consider (e.g. the inclusion of private fields in decorator expression chains)
15:10
<pzuraq>
not a huge deal and I expect it to be uncontroversial
15:11
<pzuraq>
didn't realize that @ would be used in pipelines, I need to look at the latest on that proposal
15:11
<Michael Ficarra>
... stabilize doesn't write to a property
15:11
<shu>
i thought it did for some objecs
15:11
<shu>
like arrays?
15:11
<jschoi>
We decided that at plenary just yesterday, so the explainer and spec haven’t been updated. Take a look at https://docs.google.com/presentation/d/1dDucwsW8qM22yWLr_NHFmAiAltQSht3AXYW00kET4GA/edit?usp=sharing.
15:13
<Michael Ficarra>
I think this proposal should've probably been incubated in TG3 before coming to plenary
15:14
<bakkot>
pzuraq: if you want to bring one or both of those up this meeting, should ask the chairs about it
15:14
<bakkot>
so far I have only asked for time for specifically the "isPrivate" thing
15:15
<pzuraq>
will do 👍️
15:20
<yulia>
I can't speak sorry
15:21
<shu>
rob was wondering what you were +1ing since a lot was discussed
15:22
<yulia>
i believe it was your point on introducing a new integrity elvel
15:23
<bakkot>
i like read-only collections as a seperate thing from this proposal because they would just not have the relevant methods, rather than having them but they throw
15:25
<bakkot>
man, I wish any of my software "guarantees" were enforced by the hardware
15:26
<bakkot>
instead of being actively subverted by them
15:26
<shu>
my main confusion now is that IIUC this isn't an integrity level
15:26
<shu>
there are no guarantees
15:26
bakkot
shakes fist at spectre
15:26
<shu>
it seems to be just a new protocol with ad-hoc behavior for built-ins
15:26
<bterlson>
shu: if this wraps up early can we move your resizable buffers item to before lunch?
15:26
<shu>
happy to present sure
15:27
<bterlson>
shu: thank you sir, please get ready to present
15:28
<Michael Ficarra>
shu: I think I've been convinced that the stabilisation behaviour on different kinds of objects is too disparate
15:28
<bakkot>
I think instead of having a proper protocol for this I would want to have just a well-known symbol-named method
15:28
<bakkot>
so you can test for its presence
15:29
<bakkot>
also maybe not even symbol-named
15:29
<shu>
Michael Ficarra: yeah
15:29
<shu>
i don't get peter's point either
15:29
<bterlson>
pzuraq: would you be ready to do decorators continuation before lunch if needed
15:29
<shu>
there's no broad-stroke "is stabilized" guarantee he can rely on in this proposal to put things into ROM AFAIU
15:29
<shu>
you still have to understand what each object's stabilization does
15:30
<Michael Ficarra>
shu: I understand peter's perspective of trying to have a spec formalisation of something they already do, but I don't think it's simple and uniform enough to be considered one concept
15:30
<shu>
agreed, yes
15:30
<shu>
my actual fear is this: this will be become a popular exploit vector because it'll be brittle, tightly coupled to object representation, and lightly used and so doesn't get much hardening through heavy use
15:31
<pzuraq>
bterlson: yes
15:32
<Michael Ficarra>
this is going to be yet another proposal where we have a hard time agreeing on a problem statement
15:33
<shu>
how to make the language more confusing: here's a thing that's not freeze, but is the real freeze :(
15:33
<Michael Ficarra>
I guess I would say there's a need for unmodifiable variants of built-ins and we need to figure out how to provide that?
15:34
<shu>
isn't that the problem statement of the RO collections proposal?
15:34
<shu>
i'd say for this proposal, it broadens the problem statement to "all JS objects"
15:34
<shu>
which i doubt and disagree with
15:34
<Michael Ficarra>
then maybe we should ask them to work together?
15:35
<shu>
i think they already are, this is a fruit of that collaboration actually?
15:35
<bakkot>
they are working together, as I understand it
15:35
<bterlson>
pzuraq: please prepare to go with decorator continuation prior to lunch. shu you're off the hook til after lunch!
15:35
<shu>
bterlson: roger
15:35
<shu>
comic sans disengaged
15:36
<bterlson>
copy that v8 actual. Confirm garish colors are disarmed, over.
15:36
<bakkot>
freezing typed arrays, in particular, seems like the maximally bad case for Shu's usefulness-vs-engine-exploits tradeoff
15:40
<shu>
pzuraq: mind zooming in a bit?
15:46
<SoftwareChris>
re: w3c recommendation to avoid is prefix for booleans, does someone have a reference for that?
15:47
<bakkot>
https://w3ctag.github.io/design-principles/#naming-booleans
15:49
<SoftwareChris>

Boolean properties, options, or API arguments which are asking a question about their argument should not be prefixed with is, while methods that serve the same purpose, given that it has no side effects, should be prefixed with is to be consistent with the rest of the platform.

15:51
<HE Shi-Jun>
I'm little bit confused, does @(expr) already conflict with topic ref?
15:51
<nicolo-ribaudo>

Only in the

a |> @(expr)
class B {}

case because of ASI

15:51
<nicolo-ribaudo>
i.e. that wouldn't be a topic ref but a decorator
15:52
<HE Shi-Jun>
oh! so it introduced an ASI! 😭
15:53
<HE Shi-Jun>
And only ASI in pipeline? oh my god...
15:53
<nicolo-ribaudo>
Just use semicolons 😛
15:53
<HE Shi-Jun>
doesn't help
15:54
<HE Shi-Jun>
because when sb write @(expr) class B {} , very likely they mean decorator ...
15:54
<nicolo-ribaudo>
Yes, and it means the decorator
15:55
<nicolo-ribaudo>
a |> @(expr)
class B {}

is the same as

a |> @(expr) class B {}
15:55
<HE Shi-Jun>
sorry i mean there is a newline between.
15:55
<nicolo-ribaudo>

It's like

a
[b]

is the same as

a[b]
15:55
<jschoi>
We are banning this by the way with a special early error. It must be parenthesized.
Pipe bodies must not be unparenthesized decorated expressions.
15:55
<HE Shi-Jun>
oh. i c
15:55
<HE Shi-Jun>
sounds better
15:56
<nicolo-ribaudo>
We are banning this by the way with a special early error. It must be parenthesized.

Like this?

a |> (@(expr)
class B {})

?

15:56
<HE Shi-Jun>
though it make semi-less style even much harder...
15:56
<jschoi>

Like this?

a |> (@(expr)
class B {})

?

Yes.
15:56
<jschoi>
(Also, developers should not be putting decorated expressions in pipe bodies anyway!)
15:57
<nicolo-ribaudo>
Yes.
Oh I see, that solves the ASI hazard because it's not a possible class declaration anymore
15:57
<jschoi>
Also, a |> @(expr) class C {} would have been banned anyway.
Because the pipe body doesn’t use the topic reference! Pipe bodies must use the topic at least once.
15:58
<jschoi>
But a |> @(@) class C {} could have been a hazard. So that’s why we have the extra error.
15:58
<nicolo-ribaudo>

Is this also banned?

a |> new @(@)
class A {}
15:58
<bakkot>
oh jeeeeeze
15:58
<bakkot>
we have too much syntax
15:58
<jschoi>

Is this also banned?

a |> new @(@)
class A {}
Yes, because the pipe body is an unparenthesized decorated expression.
15:59
<nicolo-ribaudo>
Yes, because the pipe body is an unparenthesized decorated expression.
The pipe body is a NewExpression
15:59
<jschoi>
Oh wait, crap, missed that. It is not banned, and I think it is clear enough as two statements.
15:59
<HE Shi-Jun>
anyway, I really hope we could use @{foo} instead of @(foo) for decorator
15:59
<HE Shi-Jun>
it seems this will never confilict with topic ref
15:59
<nicolo-ribaudo>

That doesn't solve the asi hazard

a |> @
{foo}
class B {}
15:59
<Luca Casonato>
anyway, I really hope we could use @{foo} instead of @(foo) for decorator
#[decorate()] a'la rust
16:00
<Michael Ficarra>
can we at least "NLT here"?
16:00
<nicolo-ribaudo>
In decorators? I have always written them with a line terminator before the class...
16:00
<HE Shi-Jun>
#[decorate()] a'la rust
yes ! I actually proposed that several years ago
16:00
<Michael Ficarra>
nicolo-ribaudo: no, after the @
16:01
<HE Shi-Jun>
but now it's tuple :-)
16:02
<nicolo-ribaudo>
nicolo-ribaudo: no, after the @
There is also an issue do disallow any space after @ (I disagree with that, but you might like it)
16:02
<HE Shi-Jun>

That doesn't solve the asi hazard

a |> @
{foo}
class B {}
no whitespaces after @ for decorator solve that
16:02
<jschoi>
They just talked about it. I believe the resolution is to allow @ blah class {}.
16:02
<nicolo-ribaudo>
Oh lol I was distracted
16:03
<Michael Ficarra>
I'm saying we could have "[no LineTerminator here]" to allow spaces but not newlines
16:03
<Michael Ficarra>
it's an option between allowing any whitespace and not allowing any whitespace at all
16:03
<HE Shi-Jun>
yes NLT!
16:03
<jschoi>
If we want an NLT, we had better make one more agenda item about this before plenary ends, haha…because otherwise it’s going to end without it.
16:04
<HE Shi-Jun>
we should...
16:04
<HE Shi-Jun>
it's really strange to allow LT after @ for decorator
16:04
<Michael Ficarra>
I guess I should've gotten on TCQ
16:04
<jschoi>
pzuraq: Some people still want an NLT after @. Might want to make another agenda item?
16:05
<nicolo-ribaudo>
it's really strange to allow LT after @ for decorator
Well, it's allowed almost everywhere
16:05
<pzuraq>
ok, happy to keep discussing it 👍
16:05
<HE Shi-Jun>
Well, it's allowed almost everywhere
not everywhere there already many things require NLT...
16:08
<Michael Ficarra>
I don't think anyone will object to it
16:33
<jschoi>
bakkot, Michael Ficarra: https://github.com/js-choi/proposal-function-memo
I really wish WeakMaps supported primitives…It’d make specifying the cache’s behavior so much easier.
16:35
<jschoi>
I suppose we could just make it a Map (with argument-tuple keys?) and punt managing memory to the user…I wonder if an LRUMap might be worth adding to the language along with function-memo.
16:38
<pzuraq>
I would not mind an LRU cache at all
16:43
<Kris Kowal>
LRU, LFU, and ARC are useful in different scenarios, all of which can underly a Map implementation. I’d suggest that a memo/cache primitive should use a Map protocol, but not be coupled to a specific cache strategy. Even the choice between Map (memoize) and LruMap (cache) is meaningful.
16:44
<Kris Kowal>
Many years ago, I put together the {Lru,Lfu}{Map,Set} cross product e.g., http://www.collectionsjs.com/lru-map
16:45
<Kris Kowal>
All of which have a parameterizable key, which is something Map doesn’t do yet.
16:46
<jschoi>
Maybe we should tackle LRU/LFU Map/Set as a separate proposal, then. I’ll create something about this.
Perhaps memo should require a map-like cache object as an argument—if we can’t do a WeakMap strategy by default, then it’s up to the developer to manage their memory. Though there are cases there people just use memoized functions to return a singleton from no arguments, and requiring a cache argument would make that clunky……
16:57
<Rob Palmer>
*** Plenary restarts in 3 mins! ***
17:01
<Michael Ficarra>
bakkot, Michael Ficarra: https://github.com/js-choi/proposal-function-memo
I really wish WeakMaps supported primitives…It’d make specifying the cache’s behavior so much easier.
hard agree https://github.com/tc39/proposal-symbols-as-weakmap-keys/issues/21#issuecomment-1016934180
17:02
<bakkot>
I will do some note taking
17:02
<bakkot>
yeah it's me
17:02
<bakkot>
I am at the computer the bot is running on, sorry for the confusion
17:03
<Michael Ficarra>
Many years ago, I put together the {Lru,Lfu}{Map,Set} cross product e.g., http://www.collectionsjs.com/lru-map
on a related note, I want to bring a MultiMap proposal, any interest in co-championing?
17:05
<danielrosenwasser>
Is 8x8 down? Having issues rejoining
17:06
<danielrosenwasser>
seems like a machine-specific issue, not sure why
17:14
<rbuckton>
on a related note, I want to bring a MultiMap proposal, any interest in co-championing?
I'd love a MultiMap, but I'm more interested in being able to specify equality/hashing semantics for custom map/set key comparisons (not operator overloading) similar to @esfx/equatable/@esfx/hashmap
17:15
<Michael Ficarra>
rbuckton: okay sure but I don't see how that's related
17:16
<Kris Kowal>
All that and mutation observers and we’d have a cocktail, but I’m no longer working in the context of a motivating use case.
17:16
<rbuckton>
More about time investment. I'd co-champion, but if I have free cycles for that I'd rather put them into something higher priority for me
17:17
<Kris Kowal>
I would want to prove it out in userspace.
17:17
<bakkot>
i mostly just want computeIfAbsent, which gets you 90% of the way to multimap
17:17
<Kris Kowal>
The one thing that would be super useful for proving it out in userspace would be records and tuples as keys.
17:17
<Michael Ficarra>
MultiMap is like Function.prototype.once for me, I write it in like 50+% of my projects
17:18
<jschoi>
The one thing that would be super useful for proving it out in userspace would be records and tuples as keys.
This would be excellent for proposal-function-memo.
17:18
<jschoi>
Relatedly, if anyone is interested in co-championing https://github.com/js-choi/proposal-policy-map-set, then let me know.
17:18
<nicolo-ribaudo>
I'm having trouble with focusing on the notes, a third person would be appreciated because I feel almost unuseful
17:18
<rbuckton>
I also have @esfx/multimap, but it's based on my hashmap impl
17:19
<pzuraq>
Relatedly, if anyone is interested in co-championing https://github.com/js-choi/proposal-policy-map-set, then let me know.
I may be but will likely not have much time available until after decorators is finished
17:21
<rbuckton>
I also have been tinkering with @esfx/collection-core which is a symbol-based protocol for abstracting collection operations that covers (with shims) Array, typed arrays, Map, Set, WeakMap, and WeakSet and is designed for the user-defined Map-like scenario.
17:25
<Kris Kowal>
The (with shims) was the design mistake I made for collections.
17:25
<Kris Kowal>
But largely the same idea: protocols all the way down.
17:27
<rbuckton>
The shims are optional
17:27
<Kris Kowal>
In any case, if folks are interested in investing in that approach in userspace, I’m sitting on both collections and @collections on npm and I’m easy to find. 👋
17:27
<rbuckton>
(ie, in @esfx/collection-core-shim)
17:30
<pzuraq>
I didn't realize ljharb wasn't in attendance today and apparently he is unhappy with the outcome surrounding private/static, should we revisit?
17:31
<ljharb>
I’ll be there tomorrow, I’m just on a plane right now.
17:31
<HE Shi-Jun>
It seems the queue is still in the last topic?
17:34
<Robin Ricard>
sorted
17:38
<Michael Ficarra>
you can use concat to do a non-mutating "push", right?
17:38
<nicolo-ribaudo>
Yes exactly
17:38
<nicolo-ribaudo>
That's why the number of methods was reduced from 10 to 4
17:38
<nicolo-ribaudo>
(many were mostly duplicates)
17:39
<Michael Ficarra>
this is a really good proposal 👍️ and well presented
17:42
<jschoi>
pzuraq: FYI, might also want to talk about https://github.com/tc39/proposal-decorators/issues/460 during this plenary too.
I am willing to reallocate holistic-dataflow time (currently 60 min) to more decorator stuff, because decorators are more urgent, having formally reached Stage 3.
17:43
<bakkot>
strong agree with MM
17:43
<jschoi>
pzuraq: Also https://github.com/tc39/proposal-decorators/issues/461.
17:43
<pzuraq>
yes, saw both of those pop up
17:44
<pzuraq>
happy to discuss
17:44
<shu>
haha does it really do that with undefined? TIL
17:44
<Michael Ficarra>
bakkot: toSorted is as much a new method as it is an analogue of an old method, I think we're free to choose the less-bad precedent
17:44
<bakkot>
"new" versus "old" isn't a meaningful precedent
17:44
<bakkot>
users don't know that sort of thing
17:45
<Michael Ficarra>
why do users need to understand this method as "the same as .slice.sort()" and not just "it gives you a sorted copy"?
17:45
<pzuraq>
https://github.com/tc39/proposal-decorators/issues/204 might also be worth discussing, I thought this was in the previous versions of the spec I ported but I just double checked and it didn't seem to make it
17:45
<bakkot>
because what "sorted" means includes this behavior for holes
17:45
<Michael Ficarra>
it's not like there's some algebraic property we're trying to provide here
17:46
<bakkot>
right, so, the natural thing is to use the existing behavior rather than introducing a new, slightly different one
17:47
<Michael Ficarra>
users aren't going to run into this oddity, and when they do, I think they'd prefer the proposed behaviour because they won't know what the sort behaviour is (like shu)
17:47
<shu>
whoa whoa, slap to the face
17:47
<bakkot>
eh
17:47
<bakkot>
that's fair
17:48
<bakkot>
but in that case I'd also fix the undefined wart
17:48
<Michael Ficarra>
shu: I also didn't know how sort treated holes off the top of my head before this
17:49
<shu>
well, the actual hazard is somebody is doing .sort() in-place, then refactors to .toSorted() later
17:49
<shu>
and their input has holes or is weird in some way, and now they have a subtle difference
17:49
<ljharb>
the hazard being that their broken holey array gets fixed?
17:50
<ljharb>
holes are terrible and nobody should be relying on them
17:50
<shu>
i care about the likelihood of that, not as much the likelihood of users knowing the behavior of current sort
17:50
<rickbutton>
yeah the bug was having a holey array in the first place IMO
17:50
<shu>
"fixed"
17:50
<rickbutton>
but matter of perspective
17:50
<ljharb>
yes the way array spread and Array.from and the ES6+ array methods fixes it
17:50
<rickbutton>
we only like holy arrays, not holey arrays
17:50
<ljharb>
we’ve already decided to fix it whenever we can, in other places. That’s the precedent i hope we follow here.
17:51
<bakkot>
ljharb: sidebar, what's your objection to the private renaming
17:51
<bakkot>
I feel very strongly that isPrivate is wrong
17:51
<bakkot>
and would prefer we not fight about it on plenary time if we can avoid it
17:52
<ljharb>
wait, I’m confused
17:52
<ljharb>
which names did plenary decide on?
17:52
<bakkot>
as of today, "private" and "static"
17:52
<pzuraq>
private and static
17:52
<ljharb>
ohhhh ok then I’m happy with that
17:52
<ljharb>
i just misunderstood, sorry for the confusion
17:52
<bakkot>
ah, cool
17:52
<pzuraq>
all good 👍️
17:52
<ljharb>
I’ll clarify my comment on that issue if i can find it
17:53
<bakkot>
yeah it got stage three with "isPrivate" and "isStatic" but no one had actually thought about it
17:53
<bakkot>
so we talked about it again today and changed to "private" and "static"
17:53
<ljharb>
i was under the impression it was already private/static :-)
17:53
<jschoi>
ohhhh ok then I’m happy with that
Whew…
17:53
<bakkot>
aha
17:55
<bakkot>
this is a fair point from hax
17:55
<bakkot>
we already have some non-mutating methods without to
17:56
<bakkot>
and this behavior is not quite the same as spliced, since its return value is different
17:57
<ljharb>
(if we’re going to rename anything in the array method proposal I’d like to be present for that decision)
18:01
<nicolo-ribaudo>
Is there any problem with "remove species" other than backwards compatibility?
18:02
<nicolo-ribaudo>
(not in this proposal, from the proposal just to remove species)
18:02
<rickbutton>
i think just compat
18:02
<bakkot>
one problem is that it will make core-js add its very slow regex polyfill
18:02
<bakkot>
which isn't exactly a compat issue
18:06
<ljharb>
isn’t at all one
18:06
<ljharb>
and might incentivize people to update core-js
18:06
<bakkot>
haha, updating
18:06
<bakkot>
who updates things
18:06
<bakkot>
no one
18:08
<TabAtkins>
this dedenting problem (in HTML) is honestly one of the reasons I wrote Bikeshed.
18:08
<HE Shi-Jun>
splice() / toSpliced() is so bad. I would like to propose something like arr.replace(start, end, arr2) /toReplaced() which follow slice(start, end) .
18:09
<TabAtkins>
(before this, we did some horrifying comment hacks to allow <pre> to have indented text that looked reasonable in both source and output)
18:11
<Michael Ficarra>
hmm, trailing newline would be useful when writing files, for instance...
18:12
<Michael Ficarra>
the "character lines" don't need to be contiguous, right?
18:13
<Michael Ficarra>
are lines with only leading whitespace and an interpolation considered "character lines"?
18:14
<HE Shi-Jun>
are lines with only leading whitespace and an interpolation considered "character lines"?
I assume not?
18:14
<TabAtkins>
I assume they would be
18:14
<Michael Ficarra>
I think I would prefer them to be
18:14
<TabAtkins>
Like, I'd be incredibly surprised if they didn't count as character lines
18:15
<TabAtkins>
($ is a non-ws character anyway, so should qualify ^_^)
18:15
<HE Shi-Jun>
oh u mean leading whitespace and ${...} ?
18:16
<TabAtkins>
yeah
18:16
<Michael Ficarra>
yes, that's an interpolation
18:16
<HE Shi-Jun>
I guess it should be char line...
18:16
<Michael Ficarra>
welp, question answered
18:17
<HE Shi-Jun>
oh, current slide give the anwser
18:18
<Michael Ficarra>
nice, template tag composition!
18:19
<bakkot>
note that this isn't possible for many tags
18:19
<TabAtkins>
oh this stacking is cute, hm
18:19
<bakkot>
but it happens to work for dedent, specifically
18:19
<bakkot>
that is, dedent composes with any tag
18:19
<bakkot>
but you can't generally compose arbitrary tags
18:20
<TabAtkins>
""` gives me hives
18:20
<bakkot>
any syntax here gives me hives
18:20
<bakkot>
template tag ftw
18:21
<TabAtkins>
yeah def, they don't get that stacking behavior either
18:21
<Michael Ficarra>
extremely opposed to syntax for this
18:21
<TabAtkins>
well nm i guess they do
18:21
<TabAtkins>
anyway no need for syntax, eah
18:21
<yulia>
feeling overwhelmed by the @s
18:22
<bakkot>
is erights in the chat
18:22
<bakkot>
I can probably explain how template tag composition works
18:22
<nicolo-ribaudo>
feeling overwhelmed by the @s
We can use #
18:22
<Kris Kowal>
generally, markm’s not in chat.
18:22
<bakkot>
alas.
18:22
<shu>
I can probably explain how template tag composition works
i'd appreciate this too
18:22
<Michael Ficarra>
the interpolated expression can have newlines in it, which might make things... weird, but shouldn't be a problem
18:22
<bakkot>
so, the key thing is, the interpolations don't participate in dedenting at all
18:22
<bakkot>
they are considered, basically, a placeholder character
18:23
<bakkot>
a non-newline placeholder character
18:23
<Michael Ficarra>
a ZWNJ
18:23
<shu>
bless you
18:25
<bakkot>
so basically you can imagine it as, replace all interpolations with a placeholder, do the logic as if it's just a string, then split it up again into a tagged-template-array argument
18:26
<shu>
i see
18:26
<shu>
in any case that seemed like not the actual question mark was asking
18:26
<bakkot>
yeah, whoops
18:26
<shu>
but your answer was to my question
18:28
<TabAtkins>
hmmmmm wonder if String.dedent({tabSize:4})`...mixed tabs and spaces content here` could work
18:28
<TabAtkins>
another branch in the call
18:28
<bakkot>
I'm going to propose another branch in the call also
18:28
<bakkot>
(for strings)
18:28
<bakkot>
so, fun all around
18:28
<Michael Ficarra>
I'm really hoping we can keep dedent simple and not parameterise it
18:29
<bakkot>
is python's parameterized
18:29
<bakkot>
I've never wanted that
18:29
<TabAtkins>
I find that mixed tabs and spaces are common in real text
18:29
<Michael Ficarra>
TabAtkins: what kinds of cursed codebases are you working in?
18:29
<bakkot>
TabAtkins: but in the common prefix?
18:29
<TabAtkins>
HTML, man
18:29
<TabAtkins>
and yes, in the common prefix
18:29
<bakkot>
I feel like even when mixed, the common prefix is not mixed
18:29
<bakkot>
well
18:29
<bakkot>
that sucks.
18:29
<shu>
wtf
18:29
<TabAtkins>
people indent like it's the wild west
18:29
<bakkot>
i want to not optimize for that case
18:30
<bakkot>
screw those people
18:30
<Michael Ficarra>
I don't know if I'd call that indentation at that point
18:30
<Michael Ficarra>
it's just... leading characters that happen to all be whitespace?
18:30
<TabAtkins>
listen, i'm with you, people treating tabs as fixed-width are the devil
18:31
<TabAtkins>
but i wrote code to handle this for a reason
18:31
<bakkot>
strong +1 to justin's point here
18:31
<bakkot>
I also indent the bodies of template tags
18:31
<bakkot>
everyone does afaik
18:32
<shu>
i... actually don't care about the format of the output, but i guess i'm in a small minority here
18:32
<Michael Ficarra>
I'm lazy. Unlike with other, simpler helpers, I do not write myself a dedent helper, I just align my template bodies at 0.
18:32
<jschoi>
YAML treats each tab equivalent to one space, I recall…? I forget what Python does.
18:32
<Michael Ficarra>
if I had a built-in dedent, I would gladly use it
18:33
<HE Shi-Jun>
YAML treats each tab equivalent to one space, I recall…?
I forget what Python does.
yaml do not allow tab I think.
18:33
<TabAtkins>
Python errors on mixed indentation for the same level.
18:34
<TabAtkins>
You can mix tabs and spaces, but have to use them consistently at a given level; it doesn't treat N spaces as equivalent to a tab
18:34
<jschoi>
yaml do not allow tab I think.
Ah, yes, you are right. https://yaml.org/spec/1.2.2/#rule-s-indent
18:35
<jschoi>
That spec was the first parser I ever implemented (in Clojure)…Brings back memories.
18:35
<HE Shi-Jun>
You can mix tabs and spaces, but have to use them consistently at a given level; it doesn't treat N spaces as equivalent to a tab
Not sure, I remeber python could treat N spaces as tab by some special comments?
18:35
<TabAtkins>
oh possibly, but by default it doesn't
18:36
<HE Shi-Jun>
It's really weird that comments could change the semantic of a code 😂
18:39
<shu>
hahaha oh man
18:40
<shu>
if it treats strings as arraylike
18:40
<Michael Ficarra>
HE Shi-Jun: check out Haskell's pragmas
18:40
<TabAtkins>
I think I agree with bakkot here - the case i'm concerned about switching between a text var that needs dedenting, and inlining it into your code; the text var is likely gonna be formatted "normally" without empty first/last lines
18:41
<bakkot>
I like michael's proposal actually
18:41
<bakkot>
just so that we don't have this weird edge
18:47
<TabAtkins>
yeah i suppose String.proto.dedent omitting the first/last line behavior makes sense
18:48
<Michael Ficarra>
I just think it's a bit of a separate design space, so we should have separate functions so we don't feel obligated to make any less-than-ideal choices
18:48
<TabAtkins>
(The "have to detect this in the spec and error immediately" just continues to support my point that treating strings as iterables/array-likes is always a mistake that every lang just keeps repeating.)
18:49
<TabAtkins>
https://www.xanthir.com/b4wJ1
18:50
<Michael Ficarra>
TabAtkins: unfortunately we don't have strings, we have sequences of UTF-16 code units
18:50
<bakkot>
they shouldn't be iterable anyway though
18:50
<Richard Gibson>
for iteration, they are sequences of code points
18:50
<Michael Ficarra>
the one that makes sense is an iteration over code units, though that's not what we chose
18:51
<bakkot>
that doesn't make sense either
18:51
<TabAtkins>
right, that's a mistake, it's always a mistake, exposing the internal impl of your strings as a default iteration is always wrong
18:51
<bakkot>
tab's essay makes an excellent case
18:51
<Michael Ficarra>
tab's essay makes an excellent case in a language where strings represent text
18:51
<Michael Ficarra>
we are not such a language
18:52
<Michael Ficarra>
we may as well have bytestrings
18:52
<jschoi>
Yes, strings should be abstract text; segmentation is situation-specific; even code points are the wrong default, because there should be no default.
18:52
<Michael Ficarra>
bytestring default iteration should be bytes
18:52
<bakkot>
"our strings don't represent text" is only true if you are using "represent" in an unusual way
18:52
<TabAtkins>
i don't understand how what i wrote is specific to "represents text"; alternatley, i don't know what sort of odd point you're trying to make about JS strings not being text (because, uh, what is "text" then?)
18:52
<bakkot>
because they absolutely do represent text in the usual, english-language meaning of the word
18:52
<TabAtkins>
If by "text" you mean "unicode codepoints", that's wrong.
18:52
<bakkot>
they just don't do it all that well
18:53
<TabAtkins>
codepoints aren't text, grapheme clusters aren't text, UCS2-ish code units aren't text, they're all impl strategies for storing text, a more abstract human concept. And all of them are interconvertable and wanted in different circumstances.
18:54
<TabAtkins>
but also my essay makes some points that aren't related to "text", such as the "infinite iteration regress" problem you have to handle explicitly when dealing with iterable strings, but virtually never with any other iterable
18:54
<bakkot>
syg: can you add the charted proposals to the notes
18:54
<shu>
link me notes in DM?
18:55
<bakkot>
done
18:55
<jschoi>
(I also would say that language APIs should never use the word “char” or “character”, which is a very ambiguous concept; instead it should always say “bytes”, “code units”, “code points”, “grapheme cluster”, or “text”/“strings”. And their operations should generally prefer acting on arbitrary “text”/“strings”.)
18:55
<Michael Ficarra>
codepoints are a representation of text, code units are a concrete way of storing and transmitting code points, and grapheme clusters are an artifact of rendering code points to be consumed as text
18:56
<TabAtkins>
you're still arguing at a level that doesn't actually impact any argument i'm making
18:56
<TabAtkins>
my essay isn't at any point about the theoretical purity of "text" or a type of string impl. it's all practicals.
18:57
<Michael Ficarra>
apparently we disagree on what a string is
18:57
<TabAtkins>
It doesn't matter. My essay stands for JS String values - every single argument there applies to them.
18:58
<Michael Ficarra>
no, that is what I am arguing against, it doesn't apply to JS string values
18:58
<TabAtkins>
  1. string aren't collections, in people's mental models, 2) strings have infinite iteration regress, which is weird, 3) there are many ways to iterate a string and none of them make sense as a default
18:58
<Michael Ficarra>
JS string values are in fact a collection, an ordered collection of two-byte ints
18:59
<bakkot>
but that fact is completely irrelevant to people's mental models
18:59
<Kris Kowal>
^immutable
18:59
<Michael Ficarra>
it's completely relevant to how they work, mechanically, though
18:59
<TabAtkins>
Python strings are ordered collections of codepoints. That doesn't change the fact that set("foo")'s behavior is bizarre and unexpected
18:59
<Michael Ficarra>
JS string concatenation is not text concatenation
18:59
<jschoi>
A JS string value can be conceptually thought as simultaneously being several different collections, of several different kinds of elements, each on a different level of abstraction.
18:59
<bakkot>
so what
19:00
<bakkot>
why does "how they work, mechanically" dictate whether they participate in the iterator protocol
19:00
<bakkot>
or are indexable or whatever
19:00
<Michael Ficarra>
because when something actually does make sense to iterate in a specific way, you should be able to iterate it in that way by default?
19:00
<TabAtkins>
(rather, dictate how they work by default - there are lots of ways that strings can be iterable, and that's reasonable)
19:01
<bakkot>
my claim is that it does not actually make sense to iterate in that specific way
19:01
<Michael Ficarra>
there are not a lot of ways that JS strings can meaningfully be iterable though
19:01
<bakkot>
or at least does not make sense only in that way
19:01
<bakkot>
for the overwhelming majority of strings, yes there are
19:01
<Michael Ficarra>
I don't deal in overwhelming majorities, I talk about the whole class of strings
19:01
<bakkot>
strings which cannot be iterated as code units or grapheme clusters (with some particular locale) are vanishingly rare
19:02
<bakkot>
but users of the language do not
19:02
<bakkot>
the fact that some of the ways you might iterate have edge cases, and one in particular happens not to, does not mean the last way is the One True Way to iterate
19:02
<bakkot>
such that it should be blessed with the iteration protocol
19:02
<Michael Ficarra>
I gotta go eat lunch 🥪
19:03
<TabAtkins>
basic point is: if you have a function that takes a parameter that's either iterable or not, and it iterates over the former case, you virtually never want strings to act like the former case.
19:04
<TabAtkins>
specifically: an n-ary func that can take its arguments separately or in an iterable
19:04
<bakkot>
(also, separately, if strings are considered to be a sequence of code units, then iterating should give you number values, not sequences-of-code-units-of-length-1)
19:05
<jschoi>
I think there was a place in the Unicode FAQs or Specification in which APIs were encouraged to focus on concatenation, interpolation, and other abstract-text operations…and avoid using indexing, segmentation, or counting by code units or code points where possible? I don’t remember exactly where.
19:07
<jschoi>

At the very least:

A text element just means any sequence of characters that are treated as a unit by some process. A combining character sequence is a base character followed by any number of combining characters. It is one type of a text element, but words and sentences are also examples of text elements.

Text elements are very situation dependent; the user should ideally always explicitly specify what text elements they want—no default iterator.

19:07
<jschoi>
See also: counting how many “characters” are in a string.
20:14
<shu>
new incubator call charter is up: https://github.com/tc39/incubator-agendas/issues/24, please sign up for the decorator metadata discussion if you're interested
20:15
<jschoi>
shu: To be honest, I don’t remember what “precedence of async versions” precisely means again. If you don’t remember either, I can try digging back through the plenary notes.
20:43
<shu>
jschoi: it was something like "are we going to have async versions of all the methods?" the immediate response was no, we do it case-by-case
20:44
<shu>
so maybe the topic is something like, let's talk about what the criteria are for introducing async versions of existing methods