07:56
<Rob Palmer>
Good morning, all
07:56
<Rob Palmer>
We will start in 3 mins!
07:56
<Rob Palmer>
(just working through AV issues in the room)
08:00
<Rob Palmer>
The schedule has been updated. Chris would prefer to defer the "Agenda Deadline" topic to the next plenary. Therefore the meeting will conclude at 12:30 CET.
08:03
<jkup>
Where can we find the issues on the code of conduct? Trying to link in notes
08:06
<Rob Palmer>
Issue #62
08:16
<jkup>
I don't see the person currently talking in the delegates.txt file
08:16
<ljharb>
it's an open PR, hasn't landed yet
08:16
<ljharb>
use ZTZ for now, i think
08:17
<jkup>
looks like their abbrevation is not yet decided. ok will do thanks!
08:17
<naugtur>
I submitted a PR with ZBT
08:17
<Michael Ficarra>
we really need to get better about merging those before the meeting, this isn't the first (or even the second) time this has happened
08:17
<ljharb>
yep - there's a comment on that PR that explains our typical convention, which is "first initial, first letter of last name, last letter of last name"
08:18
<naugtur>
oh. ok
08:35
<naugtur>
I support Waldemar's clarifying question
08:43
<Chengzhong Wu>
naugtur: please feel free to update typos (directly) in the doc, without a doc suggestion
08:44
<Christian Ulbrich>
I support MMs concerns. Proxy should not be "detectable". I also think, that what actual equality means, is hard to decide on.
08:44
<Michael Ficarra>
or any other kinds of edits!
08:45
<Michael Ficarra>
I would prefer we move this forward with only a "shallow" SameValue comparison, and possibly consider some other comparison operations as follow-ons
08:46
<Michael Ficarra>
otherwise we're never going to get past all these weird equality hang-ups and see if we even want the feature to begin with
08:46
<Michael Ficarra>
I guess I'll get on the queue
08:46
<naugtur>
I've been doing that a lot over the 3 days, I'm only using suggestions if I'm offering a change I'm not sure about to something I already saw someone edit. (happened twice out of ~100)
08:49
<naugtur>
One useful simplification would be to validate a clone that uses the same behavior as JSON serializer does and return a POJO as a result. But that's barely on topic
08:49
<Michael Ficarra>
again, these are the rat holes I don't want to go down at the moment, we will waste all of our time when we don't even know whether we want to do this
08:51
<naugtur>
RIP validation usecase
08:54
<ljharb>
we wouldn't want anything with global state, but a sort of "create an assert function" API might work for customization
08:59
<Ashley Claymore>
lots of people seemed interested in disabling code in production.
Right now the closest to a standard we have is process.env.NODE_ENV === "development".
Maybe time for standard pre-processor tags :D
08:59
<Ashley Claymore>
just disabling assertions is not always enough as the code we actually want to disable is: compute-expensive-value and assert-something-about-it
09:02
<Michael Ficarra>
I'm reminded again that we really need to add a section to our new contributors guide on how to not "over cook" a Stage 0 proposal
09:02
<Michael Ficarra>
like every newcomer makes this mistake
09:05
<Michael Ficarra>
agreed, and we didn't even mention whether the asserted expression would be eliminated or run for its effects yet!
09:11
<nicolo-ribaudo>
https://matrix.to/#/#tc39-decimal:matrix.org
09:14
<joyee>
Needs to be careful to not run into https://nodejs.org/en/learn/getting-started/nodejs-the-difference-between-development-and-production
09:16
<nicolo-ribaudo>
My topic also disappeared, is there somebody clicking "I'm done speaking" by themselves?
09:33
<jkup>
Would someone mind taking over notes at some point soon? My wrist is starting to feel it 😅
09:40
<Ashley Claymore>
Yeah it's a Wild West right now.
sometimes we want to run the tests on production code and include assertions.
other times we want to do performance tests and skip the development assertions.
sometimes code checks for === development, other times it checks for !== development.
😫
09:49
<jkup>
I'm not sure if the notes can support images? If not, maybe naugtur we can just add a note inside brackets instead? I think these notes get pulled into some official archive after we touch them up
10:09
<nicolo-ribaudo>
Wishing TCQ supported more levels of nesting...
10:10
<jkup>
yeah we're very deep in reply land
10:16
<Jacob Smith>
i'm putting together an updated proposal presentation. what is the latest time i can present today?
10:25
<jkup>
I just asked in TCQ, I'm unsure if we're meeting back after lunch or if it would need to be before?
10:25
<nicolo-ribaudo>
Rob Palmer: ?
10:26
<jkup>
Jacob Smith: are you prepared to present now or in 5 minutes?
10:26
<Jacob Smith>
yes, i can do
10:26
<jkup>
I think we're planning to be finished at lunch time
10:29
<naugtur>
I need to get off the notes duty
10:29
<naugtur>
and tend to family
10:30
<jkup>
Thank you for all the help!
10:30
<jkup>
I can help with Nic
10:31
<naugtur>
thanks, I'm out for a bit
10:40
<Jacob Smith>
thank you Michael Ficarra 🙏
10:48
<Rob Palmer>
The plenary meeting has now fully closed. There will not be a PM session.
18:21
<James M Snell>
hey all... a question has come up with regards to ERM in practical use.... the current definition gives no mechanism to determine what kind of completion has occurred in the block where the disposers are called. For instance
18:22
<James M Snell>
For some kinds of resources, it would be good to know if the completion was normal or exceptional to determine how best to close the resource. For example, let's consider a socket... { using sock = connect(...) } when this block exits, should the socket be closed gracefully or should it be abruptly aborted
18:24
<James M Snell>
I might want to customize the disposer behavior based on the answer to that question and currently the only way I can do so is to catch any error inside the block, like {using sock = connect(...); try { ... } catch (err) { sock.hadError(err); } } or some other similar kind of signal... in which case I just wouldn't use ERM and would call sock.abort() directly
18:28
<bakkot>
Discussed explicitly in https://github.com/tc39/proposal-explicit-resource-management/issues/234 / https://github.com/tc39/proposal-explicit-resource-management/issues/49
18:29
<bakkot>
though the way I would do it right now is not with a try/catch but with a .commit method which you call at the end of the block; if it's not called you can assume the exit was exceptional (although this does not work if you have an early return)
18:30
<James M Snell>
oh awesome, somehow I managed to completely overlook those two issues :-/ .... thanks for the links!
18:42
<rbuckton>
I will probably ly transfer that issue (and any other related issues) to the Symbol.enter repo so the discussion can continue in that proposal.
18:44
<James M Snell>
And FWIW, in our use cases in workers we really would have no desire for the disposer to suppress an error... for our purposes it mostly just ideal to have access to the error. For instance, if I have something like using socket = connect(...) and the block has an exception, it would be ideal to be able to socket.abort(error) with the error that was thrown, but as it stands now I have no way of getting to it
18:44
<James M Snell>
without hacks at least
19:05
<bakkot>
I liked the idea of passing the error (if any) as an argument to Symbol.dispose
19:05
<bakkot>
I forget what happened to that
19:06
<bakkot>
it does mean you have to check arguments.length to tell apart the case of no error vs throwing undefined, but otoh if someone throws undefined I think that's their problem
19:08
<James M Snell>
nothing good can come from throwing undefined lol
19:24
<James M Snell>
For our case, tho, it really wouldn't matter if they did throw undefined, we would end up passing it to, for instance, socket.abort(error) without really worrying too much about the specific thing that was thrown. We more just want to be able to (a) detect that it was, in fact, an exception return and (b) propagate whatever was thrown to the abort
19:25
<James M Snell>
I can definitely see the use cases for Symbol.enter/Symbol.exit as being useful but just having the error argument passed would be a major improvement
20:11
<bakkot>
the point about undefined is that if you just did [Symbol.dispose](error) { if (error != null) socket.abort(error) } then you would think that it didn't throw in the case that someone had thrown undefined
20:11
<bakkot>
so the correct thing to write would be [Symbol.dispose](error) { if (arguments.length) socket.abort(error) }
20:12
<James M Snell>
yep, unless we just kept always assuming disposal was the exception case
20:13
<James M Snell>
in which case we'd likely just do something like [Symbol.dispose](error) { if (!socket.closed) socket.abort(error); }
20:31
<bakkot>
ah, sure, yeah
22:39
<Steve Hicks>
Michael Ficarra: You summarized "Pull request #1923, access .value on the final IteratorResult object" - can you please clarify which #1923 that is? I'm struggling to figure out the context here. Thanks!
23:49
<Michael Ficarra>
@Steve Hicks I did not write that summary
23:49
<Michael Ficarra>
I think it's supposed to say #19/#23 though
23:49
<Michael Ficarra>
I will fix up the notes next week when I'm back at work