00:51
<bakkot>
it presumably only happens under certain optimization tiers or conditions
00:52
<bakkot>
also the commit which introduced the bug only landed two weeks ago so would not have gone into stable
03:43
<shu>
what i don't get is, since it's ILD, how do you decide what your mock does?
06:34
<ljharb>
for day 4: we forgot to get reviewers for export defer; can someone ask for that first thing in the morning? thanks!
06:50
<nicolo-ribaudo>
Oh yes thank you 😅
10:32
<nicolo-ribaudo>
Does the "Commit suggestion" button for reviews in the ECMA-262 repo also not work for y'all?
10:33
<naugtur>
they tend to work better in the files view than main discussion view.
10:35
<nicolo-ribaudo>
I'm getting the "This diff has recently been updated. Refresh and try again" error in both :/
10:36
<naugtur>
umm.. so did you reload the page?
10:36
<nicolo-ribaudo>
yep
10:36
<nicolo-ribaudo>
Also, there have not been changes for weeks :P
12:50
<Michael Ficarra>
@nicolo-ribaudo:matrix.org: It's a known GitHub bug that's gone unfixed for years now.
12:55
<snek>
i'd love to see how github's ruby rendering works some day. i've seen it do weird things like render a notice bar on the wrong page when i load two at the same time.
13:55
<ryzokuken>
@room we're starting in 5 mins!
13:58
<Steve Hicks>
I reached out to Dominic Farolino and he's good to swap the first two topics today
14:01
<ryzokuken>
cc Chengzhong Wu
14:04
<Aki>
frfr let's build a culture of committing to contribute to notes any meeting where you have something on the agenda
14:05
<nicolo-ribaudo>
ryzokuken random.org and pick a name :)
14:06
<Aki>
https://takingnotes.rocks
14:27
<Michael Ficarra>
FYI to delegates: we no longer use the @@ notation for well-known symbols in the spec, and neither should you
14:27
<nicolo-ribaudo>
Try to stop me
14:27
<snek>
its so nice to write though
14:28
<shu>
and so too does the devil have a honeyed tongue and mellifluous voice
14:28
<rbuckton>
While I agree in principle, the main upside of @@ in slides is that it's succinct
14:30
<Chris de Almeida>
the forbidden notation
14:31
<Michael Ficarra>
@rbuckton concision is often at the cost of clarity, especially for anyone outside of the very small group of people who were ever familiar with that spec-internal notation
14:33
<ptomato>
in the example I linked, it hardcodes English unit names, for example
14:34
<Bradford Smith>
A slide to remind us how using actually works and what @@enter and @@dispose do (or whatever notation the presenter chooses) would have been helpful here. It's probably not reasonable to assume that everyone is deeply familiar with the workings of very new features like using.
14:36
<shu>
that still sounds to me like "programmatically generating goldens". what's the difference?
14:36
<ptomato>
I think "programmatically generating goldens" is a fair description
14:37
<shu>
great, thanks
14:37
<Michael Ficarra>
I try to include a "remember what we're talking about" slide with any proposal, even if we just talked about it last meeting, since we're a pretty large and diverse group
14:41
<shu>
did i freeze
14:41
<shu>
oh no luca froze
14:41
<nicolo-ribaudo>
Working on getting Luca back
14:41
<Michael Ficarra>
he's back
14:47
<rekmarks>
I refreshed tcq and now the agenda and queue are empty in my browser. Logging out and in doesn't do anything. Anyone have any ideas?
14:48
<Michael Ficarra>
press the magic fix anything button
14:49
<jschoi>
Have you tried rebooting the machine?
14:49
<shu>
what is the overhead per await for async functions?
14:50
<shu>
this seems much more expensive?
14:50
<bakkot>
I feel like this is relevant to littledan 's previous topic about things being either sugar or new capabilities
14:50
<bakkot>
this is adding a weird new capability into something which is otherwise pure sugar
14:50
<bakkot>
that feels wrong to me
14:50
<shu>
this feels deeply wrong, yes
14:58
<jschoi>

Speaking of which, I would love to see a follow-up presentation from littledan to that “Things should layer” presentation.

Relatedly, someone should a presentation later this year about developer-convenience APIs, when we (especially engines) want to add them, and how we should triage them. I’ve seen multiple people talk about the general problem of developer-convenience APIs in core ES over the past months.

15:00
<rbuckton>
If the concern is that developers will inadvertently call v[Symbol.enter]() without later invoking v[Symbol.dispose](), perhaps it makes sense to give Symbol.enter a more explicit name (i.e., Symbol.unsafeEnter or similar). If the concern is that developers will intentionally call v[Symbol.enter](), then IMO that's on the developer.
15:02
<Michael Ficarra>
What else needs to be said? I think it was a fairly simple ask: we should be cognizant of whether a new proposal adds new fundamental capabilities and question whether that is appropriate.
15:05
<jschoi>
I saw that presentation as an entry in a thread starting from the JS0/JSSugar presentation. Basically I’m hoping for continued follow-up and iteration in that general “overall language structure” space. I guess not necessarily from Daniel.
15:11
<jkup>
Is someone able to relieve me from note taking for the remainder of this session?
15:14
<ryzokuken>
thanks again for volunteering!
15:14
<nicolo-ribaudo>
Wow we have too many note takers now and I cannot even see my cursor under the names
15:14
<ryzokuken>
lol what a great problem to have
15:16
<dminor>
What was the outcome for Object.propertyCount? The notes from Day 2 have no conclusion / summary, just mention a continuation, which I don't think we scheduled.
15:16
<ryzokuken>
no advancement due to lack of clarity wrt the scope
15:17
<ryzokuken>
but the champions clarified things in the chat
15:17
<dminor>
I missed that, thank you
15:17
<ryzokuken>
if I remember, I think J-ordan can confirm
15:18
<Michael Ficarra>
my understanding was slightly different: we granted Stage 1 with a limited scope, then in further discussion the champions tried to expand the scope and a bunch of people got upset about that
15:19
<littledan>
we definitely didn't decide as a committee to refer it to be done outside of TC39, though some individuals in committee might've said that
15:19
<littledan>
personally, I objected to the lack of integration with the web platform, which has now been resolved
15:20
<ryzokuken>
https://github.com/tc39/proposal-object-property-count
15:20
<nicolo-ribaudo>
littledan are you talking about observables or propertyCount?
15:20
<ryzokuken>
the repo is in the org but still says stage 0
15:20
<littledan>
oops observables
15:20
<littledan>
sorry
15:20
<snek>
i also thought that proposal had gotten stage 1
15:20
<snek>
confusing times
15:20
<snek>
stage 0.5
15:21
<ryzokuken>
/tdz schrodinger's stage
15:21
<Chris de Almeida>
it got stage 1
15:21
<Chris de Almeida>
https://bsky.app/profile/tc39.es/post/3lmuqhrv6h32h
15:21
<Chris de Almeida>
notes need a summary+conclusion
15:22
<ryzokuken>
ugh sorry then please someone fix the notes so it's not confusing
15:22
<naugtur>
The timing of this is good. We could discuss how observables will interop with async context.
15:23
<Michael Ficarra>
we should be clear though that that was with the limited scope
15:23
<nicolo-ribaudo>
Given that it's sync, isn't it easy? For sync calls, you get the context from your caller
15:23
<nicolo-ribaudo>
So from the context around .next()
15:25
<naugtur>
Producers can be async AFAIR
15:26
<nicolo-ribaudo>
Yes, but when they call .next() then it synchronously calls the subscriber
15:26
<snek>
its within the activation of the async function, so the async context naturally propagates
15:28
<Chris de Almeida>
https://github.com/WICG/observable#standards-venue
15:28
<Chris de Almeida>
for context
15:28
<Michael Ficarra>
lack of a good cancellation solution keeps biting us 😠
15:29
<snek>
ecmascript has nothing to cancel
15:29
<snek>
if we add io apis we could add cancellation :>
15:30
<Michael Ficarra>
runtimes have IO APIs
15:30
<nicolo-ribaudo>
We also have nothing to wait for, yet we have promises
15:31
<shu>
cough waitAsync cough
15:31
<nicolo-ribaudo>
I'm sometimes surprised by how much forward looking we have been in 2015!
15:31
<Michael Ficarra>
nobody even knows Atomics exists, @shu
15:32
<shu>
🥺
15:32
<snek>
alright lets add cancellation to waitAsync i'm fully on board
15:35
<snek>
there was a table somewhere showing the difference between iterable/observable/signal/etc right
15:36
<snek>
push/pull/singular/plural or whatever
15:40
<rbuckton>

IIRC, the two big contentions with cancellation were:

  • A few delegates wanted a transparent (or semi-transparent) cancellation mechanism. IMO, this was a footgun, but is solvable in user-code with AsyncContext.
  • AbortController/AbortSignal was fast-tracked and shipped while we were still discussing cancellation.

I still contend that AbortController/AbortSignal is a very broken cancellation mechanism.

15:40
<snek>
what does transparent cancellation mean
15:41
<rbuckton>
You establish a cancellation source and somehow thread the cancellation token/signal through all async functions without explicitly passing it as an argument.
15:41
<snek>
oh i see
15:41
<snek>
yeah i think that should be left to userland
15:42
<rbuckton>
On the surface, it seems like a simple approach, but it means any user code could unexpectedly break during an await, and you have no control over async operations that must complete.
15:43
<snek>
oh yeah i would also definitely not want cancellation to connect to await/promises
15:43
<snek>
cancellation should affect the thing that resolves a promise, not the promise itself
15:47
<Michael Ficarra>
30m was an over-ambitious timebox for this
15:48
<nicolo-ribaudo>
Chris de Almeida for my continuation topic, 5 minutes would probably be enough rather than 10
15:48
<Chris de Almeida>
ok
15:49
<Michael Ficarra>
please advance the queue
15:49
<ryzokuken>
done
15:50
<bakkot>
speaking of web platform ergonomics I really want disposable AbortController
15:50
<snek>
just convince the whatwg editor and you can have it
15:50
<bakkot>
it seems like it is impossible to propose new features in WHATWG unless you work on Chrome
15:51
<bakkot>
there's not even a "convince them" step
15:51
<bakkot>
you will just get ignored mostly
15:51
<rbuckton>

AbortController/Signal have a number of issues:

  • Dependence on EventTarget
  • Poor separation of concerns
  • Privileged signaling for natives vs user-defined cancellation
  • User-defined cancellation can be triggered multiple times (i.e., if you forget { once: true })
  • User-defined cancellation leaks
  • Composition leaks
15:52
<snek>
yeah making the WebSocket constructor take relative urls was literally just the chrome network stack guy had to be convinced. i had opened implementation prs in all 3 browsers and written tests and spec text and that didn't matter :)
15:53
<snek>
we have a very special setup here at tc39 and i hope folks appreciate it
15:53
<bakkot>
maybe instead of the DOJ making Google sell Chrome they could just make it so Chrome is no longer allowed to propose new features or ship features which are not standardized elsewhere
15:54
<rbuckton>

IMO, poor separation of concerns is the worst offender:

const ctl = new AbortController();
f1(ctl.signal);
f2(ctl.signal);

function f1(signal) {
  signal.addEventListener("abort", () => { ... }, { once: true });
}

function f2(signal) {
   ...
   signal.dispatchEvent(new Event("abort")); // triggers user cancellation w/o access to controller
}
15:54
<rbuckton>
AbortSignal should never have been event based.
15:54
<nicolo-ribaudo>
I wish they could actually listen to you
15:55
<snek>
i still think a chrome foundation would be ideal. but then google wouldn't get money from selling it so 🤷
15:55
<bakkot>
uhhh signals do not have a raiseEvent method, do they?
15:55
<littledan>
I'm not taking notes for the next topic either
15:55
<rbuckton>
they inherit from eventtarget
15:55
<littledan>
agreed, it is too hard to use as it is today
15:56
<rbuckton>
It inherits from EventTarget, so yes, though I meant dispatchEvent. Example updated.
15:58
<bakkot>
ah yeah
15:59
<rbuckton>
Signals should not be allowed to trigger an abort. They should only be able to observe.
16:00
<bakkot>
yeah, the event machinery conflating ability to listen for events and ability to dispatch events is very dumb
16:01
<rbuckton>
So much of AbortController breaks everything in https://github.com/tc39/proposal-cancellation?tab=readme-ov-file#architecture
16:01
<Michael Ficarra>
@ryzokuken colleagues can be reviewers!
16:01
<ryzokuken>
but I don't want to steal someone else's opportunity to do it 😄
16:02
<naugtur>
What are the expectations from a reviewer? I'm new here 😅
16:03
<Michael Ficarra>
Stage 2 reviewers review the spec text to make sure it does what we want the feature to do
16:03
<nicolo-ribaudo>
Go through the proposal spec, check that it's coherent and makes sense, check that the spec actually does what it's ment to do
16:06
<bakkot>
the "what it's meant to do" is the most important part
16:06
<bakkot>
sometimes there's unintended implications or edge cases in the spec text which no one really thought about previously
16:08
<sffc>
Just to confirm, the transcription quality was much much better in today's session than it was in yesterday's session.
16:08
<rbuckton>
My hot take: AbortController and AbortSignal were a mistake, and the continued adoption within the ecosystem is a long term harm to the language. ECMAScript needs native cancellation that does not depend on DOM and does not have these footguns.
Native cancellation could tie into Atomics.waitAsync, new Promise, promise.then, import(), and the Mutex proposed in the shared structs proposal.
16:08
<ljharb>
ryzokuken: so did you want to also be an export defer reviewer?
16:09
<ryzokuken>
no, was just volunteering to help out anyone if they wanted to do it but felt unsure
16:11
<ryzokuken>
it pretty much comes down to the individual transcriptionist. The first hour each day was done by Julie who we have a longer history working with and she was the one who I believe does the best out of all of them.