01:10
<rkirsling>
given that Temporal seems almost similar to 402 in size, I think it would be an excellent way to ease into having a multifile 262
01:25
<rkirsling>
(I could rewrite that as an issue on the repo, I suppose)
07:42
<ystartsev>
gibson042: mozilla doesn't have any remaining concerns, as i mentioned earlier
07:43
<ystartsev>
also, we have objected to stage advancement for proposals that did not have stage appropriate materials present such as spec text
07:43
<ystartsev>
the deadline represents the point at which I finish my collection and summarization of materials for the spidermonkey team, and we begin the process of review
07:44
<ystartsev>
If we do not have a chance to review, then we can't approriately evaluate a proposal for stage advancement. for lower stage proposals such as stage 1, a detailed review is not required, we are usually just happy to listen
07:44
<ystartsev>
however for other stages, review is necessary
07:45
<ystartsev>
in this case, we were following Intl.segmenter closely, we are aware of what is being advanced, however not all members have been and many likely have a similar process as us
07:45
<ystartsev>
and for this reason, i raised the importance of the deadline.
07:47
<ystartsev>
I didn't make the decision of prioritization, that is with the chairs, but i support whatever they will choose, as the schedule is particularily challenging this time
07:55
<ystartsev>
I imagine this is very frustrating for you, and it is unfortunate since Intl.Segmenter has gone through a long and difficult process to get to where it is. However, this is the second time this year that we are looking a proposal you are trying to advance that can, and arguably should be blocked on process grounds. Submitting a proposal for advancement to stage 3 with only one working day until the committee
07:55
<ystartsev>
member is far too little notice. Would it be helpful for you to review the process document and agenda structure? I would like to see this situation avoided in the future, since it is disappointing to have to say something like this about a proposal that is otherwise in good state.
08:02
<ystartsev>
(that is, bar the missing review)
09:50
<ystartsev>
I may have been a bit too direct here, sorry about that. I am open for continuing the conversation though.
12:06
<littledan>
I want to second what Mozilla is saying about Intl.Segmenter. I want this proposal to advance, but these things should be put up with more notice so that everyone can review them.
12:17
<littledan>
I think it's more important to declare the advancement with a repository link ahead of the deadline than to have all the slide presentation ready by then (since, ultimately, the advancement is of the contents of the repository)
14:53
<gibson042>
I'm not disputing the above. The agenda matters, and I own my mistake in adding to it late, and that on its own is grounds for blocking advancement. But Intl.Segmenter was not the only or even the last entry to be added late, and that's even more true for the supporting materials requirement (which includes the slides, but more importantly also includes significant work in proposal repositories between the deadline and the m
14:54
<rkirsling>
bradleymeck: hmm... it's always smalltalk... :(
14:54
<gibson042>
As for how to ensure sufficient review time in the future (which I agree is the right perspective), I appreciate upcoming-meeting reminders but would *never* expect someone else to provide them. The root issue for me personally is that the rest of my professional life is very far removed from this space, with a compounding factor in this case of thinking "TC39 in June" when the relevant deadline was well ahead of that.
14:55
<gibson042>
There is something that would help, though: creating the next meeting's document by the start of the current meeting. This is the time when I'm most likely to be thinking about TC39-relevant content, and it would be really great to add agenda items in the moment rather than taking a note for future action.
14:57
<littledan>
that often happens, but I guess we don't have the July meeting agenda yet this time around
15:01
<ystartsev>
i am not really sure what to respond here. I have protested in the past if something was added to the agenda without the required materials, late. and it is clearly outlined in our agenda document that this is a likely outcome
15:01
<gibson042>
and to be clear, any frustration I feel is self-directed. I had hoped to move JSON.parse source text access forward, but didn't have time to work on it. I was able to Intl.Segmenter only because it was ready to go from before.
15:02
<gibson042>
I do not have ill feelings towards anyone about this, and ystartsev in particular has been a consistent voice of reason and fairness
15:03
<ystartsev>
gibson042: i am looking forward to giving this the green light very soon. i think the spec looks good
15:05
<bterlson>
leobalter: ready in 3 minutes?
15:05
<keith_miller>
jorendorff: Why have only one function for all iterator helpers? Seem bad for profiling
15:05
<leobalter>
@bterlson yes, Caridy will present
15:05
<leobalter>
he's ready too
15:08
<keith_miller>
jorendorff: Since you'll end up with a megamorphic function for each of the things your iterating
15:08
<keith_miller>
You really want to know that only one iterable type is going into each loop so you can inline the next functions it.
15:08
<keith_miller>
into it*
15:09
<jorendorff>
keith_miller: I don't think it'll end up being bad for profiling. It might be more work to optimize, since it's a new thing
15:09
<keith_miller>
This is a problem for all the TypedArray share functions too
15:09
<jorendorff>
the inlining is harder to do
15:09
<keith_miller>
You'd need to do some very sophisticated optimizations that AFAIK, no engine does
15:10
<ystartsev>
i have another request for time from the chairs akirose bterlson MylesBorins robpalme -> if there is time, Felienne and i have a 1 min announcement regarding the new research call
15:10
<keith_miller>
Since you're profiling well see the next call as a virtual call
15:10
<keith_miller>
will*
15:10
<keith_miller>
If you see 10 different iterators it's going to be 10 different call targets
15:10
<bterlson>
ystartsev: literally 1 minute?
15:10
<jorendorff>
keith_miller: It is up to the implementation to decide whether it's a virtual call or what. It could easily be part of the "hidden class" that is not visible to users
15:11
<jorendorff>
keith_miller: I say "easily", knowing nothing about how that's implemented in other engines
15:11
<ystartsev>
for anyone here, Felienne and I are opening out 1:1 research call to everyone, who might want to discuss data gathering and research methods, first one is June 25 at 17:45 CEST
15:11
<ystartsev>
bterlson: it is exactly that ^
15:11
<akirose>
quick PSA for everyone
15:11
<keith_miller>
jorendorff: You have 10 different hidden objects in coming into map each has a different next function
15:11
<jorendorff>
keith_miller: but if an implementation wants to make all of these objects distinct types, it certainly can.
15:12
<keith_miller>
How do you inline those nexts into map without map being inlined into every caller?
15:12
<jorendorff>
oh, you mean optimizing .map() itself, rather than .next()?
15:12
<akirose>
any time you have one of those moments where you're like "i need to request a little schedule change in the middle of the meeting and idk which chair to ping"
15:12
<keith_miller>
jorendorff: yeah
15:12
<jorendorff>
you have *many* different objects coming into .map(), it's a method on Iterator.prototype
15:12
<keith_miller>
I want to be able to trivially inline the next call into the map
15:12
<akirose>
any time you need to send a quick message to the chair group
15:12
<devsnek>
i just joined, did he say why import() is on realms?
15:12
<jorendorff>
could be called on anything
15:12
<akirose>
use `/notice #tc39-chairs your message here`
15:12
<keith_miller>
but that's exactly why I want it to be one per iterator helper prototype
15:13
<leobalter>
devsnek: we will have more examples over the import() in Realms and use cases
15:14
<jorendorff>
keith_miller: I want to make sure I understand. "inlining next into map" doesn't make sense to me because Iterator.prototype.map doesn't call any next method
15:14
<jorendorff>
But also I think you have a particular implementation in mind that does inlining but then can't specialize on what is inlined, forgive me, I don't know much about that stuff to begin with
15:14
<devsnek>
keith_miller: the next methods call into differing user code
15:16
<jorendorff>
keith_miller: but just to be clear, this is a performance problem caused by the extra level of indirection, right? and not a profiling problem exactly
15:16
<keith_miller>
It can't inline when calls are non-monomorphic because it's almost never profitable to do inlining there
15:16
<ljharb>
gibson042: i'll create the july agenda today
15:16
<devsnek>
they should have the same characteristics as optimizing Generator.prototype.next except you know a lot more about the body of the generator
15:16
<keith_miller>
It's a performance problem because inlining when monomorphic can be VERY profitable
15:16
<keith_miller>
So over sharing functions can hurt performance
15:17
<keith_miller>
jorendorff: To clarify this is to share map with Iterator.prototype and AsyncIterator.prototype on some shared prototyp?
15:17
<keith_miller>
maybe I misunderstood the slides
15:18
<jorendorff>
keith_miller: yeah, let's start over :)
15:18
<keith_miller>
haha ok
15:18
<jorendorff>
keith_miller: so, Iterator.prototype and AsyncIterator.prototype are totally separate prototype chains, we can set aside AsyncIterator
15:18
<keith_miller>
it's too early for me >.>
15:18
<jorendorff>
keith_miller: no, you're great, I'm glad you brought it up
15:18
<jorendorff>
they're different interfaces
15:19
<jorendorff>
so Iterator.prototype.map is inherently a generic method shared across all (sync) iterators.
15:20
<jorendorff>
AIUI Array.prototype.map already poses some issues for inlining strategy because the mapFn you pass to it will be different every time; the function call in there is megamorphic, unless you inline .map into its caller
15:20
<jorendorff>
and then it magically isn't
15:21
<jorendorff>
Iterator.prototype.map is like that, only much worse, because
15:21
<keith_miller>
jorendorff: The main difference is that for any given iterator the next will be the same consistently
15:21
<jorendorff>
1. it has the same problem with mapFn;
15:21
<jorendorff>
2. it *also* is going to be megamorphic in `this` which will be all different kinds of iterator
15:21
<jorendorff>
each with a different next method, layout etc.
15:21
<keith_miller>
I mean I can imagine things that change their next but... that seems rare
15:22
<jorendorff>
no, there are already a dozen next methods in the spec
15:22
<jorendorff>
many iterator types
15:22
<jorendorff>
but we're not done yet
15:23
<jorendorff>
3. Array.prototype.map() at least gets to do all its work at once. Iterator.prototype.map() has to return an iterator. The JIT doesn't necessarily get to see how/where that iterator is used
15:23
<keith_miller>
I get that, I'm saying that each prototype that has a next could also have a map.
15:23
<keith_miller>
That's a bit grosser because user iterators don't have access to a map
15:24
<keith_miller>
Otherwise users will be better off, for each iterator adding their own map function, since they'll likely get better performance
15:24
<keith_miller>
i.e. put a new map onto each ArrayIterator.prototype MapIterator.prototype, etc
15:26
<jorendorff>
there are about 12 iterator helper methods
15:27
<keith_miller>
FWIW, I've given this advice to people using typed arrays that had perf problems
15:27
<jorendorff>
makes sense
15:27
<keith_miller>
IIRC, they got a 2-4x improvement
15:27
<jorendorff>
just working in pure JS?
15:27
<keith_miller>
Yeah
15:27
<keith_miller>
I mean they can also skip a bunch of checks
15:27
<ljharb>
keith_miller: i mean, should the spec add a .map for each TypedArray type?
15:27
<ljharb>
if that's inherently more performant?
15:28
<keith_miller>
ljharb: It used to!
15:28
<keith_miller>
then ES6 changed it lol
15:28
<Bakkot>
that one seems like not an obviously bad idea, tbh
15:28
<ljharb>
i mean like, philosophically imo the current way it's done is better, with a single method
15:28
<Bakkot>
but the iterator helpers seem more obviously like shared things, to me
15:29
<ljharb>
but if there's a significant perf improvement from not sharing the methods, and it's not likely to ever be overcome, then we should be encouraging non=-sharing of megamorphic things as a pattern (which, coincidentally, is what the "remove species" proposal will force for subclasses)
15:29
<devsnek>
an iterator is free to specialize the implementation of something on the prototype
15:30
<devsnek>
for example if your iterator is over a collection type, the map can walk directly over that instead of indirecting through the collection iterator
15:30
<keith_miller>
Sorry, 🐈 had a panic attack that I was up but didn't feed them
15:31
<jorendorff>
no worries
15:31
<keith_miller>
Yeah, we could move back to pre-ES6 behavior
15:31
<keith_miller>
I'm not opposed to that
15:31
<devsnek>
did leo say why import is directly on realms instead of compartments
15:32
<devsnek>
i got distracted by iterator stuff
15:32
<keith_miller>
devsnek: The hard part is when is it profitable to decide to do that, which requires profiling, which has costs
15:32
<devsnek>
keith_miller: oh i meant a human can do that
15:33
<bradleymeck>
devsnek: it's going to be on a realm which has a root/host provided behavior, compartment would have a more granular/user provided behavior. so both would be having a import mechanism
15:33
<ystartsev>
does metamorphic mean this? https://en.wikipedia.org/wiki/Inline_caching#Megamorphic_inline_caching
15:33
<ystartsev>
s\meta\mega
15:33
<devsnek>
bradleymeck: doesn't a compartment with no hook defer to the host?
15:33
<devsnek>
ystartsev: yeah
15:34
<keith_miller>
devsnek: In the engine? That would still be hard because you'd need to teach executables that they can have different ones base on the this value
15:34
<bradleymeck>
for import, it should defer to its realm
15:34
<keith_miller>
it's not impossible but it's far far from simple
15:34
<devsnek>
keith_miller: no i meant like, if you're writing a hashmap class in js, you can bring your own iterator forEach impl
15:34
<gibson042>
does anyone have a link to the slides that Caridy is presenting?
15:34
<keith_miller>
Oh, yeah, that's the recommendation I've given to devs when they find these methods hot
15:35
<keith_miller>
are hot*
15:35
<leobalter>
gibson042: https://docs.google.com/presentation/d/1TfVtfolisUrxAPflzm8wIhBBv_7ij3KLeqkfpdvpFiQ/edit?ts=5ed5d3e7
15:35
<keith_miller>
devsnek: but I'd be good for that to be "free"
15:35
<gibson042>
thank you
15:35
<devsnek>
bradleymeck: the realm is the host, cuz the realm can't hook anything
15:36
<bradleymeck>
realm inside a compartment is hooked
15:36
<keith_miller>
jorendorff: shu: Does SM/V8 do inlining?
15:36
<leobalter>
devsnek bradleymeck I can't focus in answering here but if you could bring it to the queue...
15:36
<keith_miller>
I don't actually know. I assume yes
15:36
<devsnek>
v8 has inlining
15:37
<devsnek>
i won't go so far as to say what makes something eligible for it
15:37
<shu>
keith_miller: in the optimized tier, yes
15:37
<keith_miller>
devsnek: I mean JSC's heuristic is basically just bytecode size...
15:37
<shu>
keith_miller: both user code and manually written inlines for recognized builtins
15:37
<keith_miller>
which is a surprisingly good heuristic
15:38
<devsnek>
all i know about v8's inlining is that the compiler doesn't account for the scope changing and you have to manually look it up every time
15:38
<keith_miller>
shu: Oh, you can't parse your torque (name?) bytecode for builtins?
15:38
<devsnek>
torque doesn't have bytecode
15:38
<shu>
keith_miller: torque compiles down to masm calls, basically
15:38
<devsnek>
it compiles to c++ csa
15:39
<keith_miller>
Ah, I thought it was compiled to bytecode
15:39
<keith_miller>
my b
15:39
<ystartsev>
keith_miller: sm has inlining
15:40
<keith_miller>
Cool so then I'd guess every has some flavor of the issue I'm talking about
15:40
<jorendorff>
keith_miller: Yes, SM does inlining in the most-optimized tier
15:40
<keith_miller>
everyone*
15:40
<shu>
keith_miller: that seems like a reasonable extension to me, of parsing torque, identifying the fast paths, and auto-generating optimized tier specializations as well
15:40
<keith_miller>
jorendorff: Do you have more than one optimizing tier? I thought it was just one?
15:40
<shu>
keith_miller: though i'm not on the compiler team and that might not be feasible for other reasons
15:40
<keith_miller>
fair enough
15:40
<jorendorff>
keith_miller: just the one
15:41
<devsnek>
shu: i think its generally more profitable to handle the output of torque in the graph form
15:42
<keith_miller>
jorendorff Yeah, wasn't sure from the phrasing. Inlining into a template JIT seems less profitable :P
15:44
<shu>
devsnek: not sure what you mean; if what you're driving at is torque needing a new output format that feeds into the graph builder instead emitting CSA calls, then i agree
15:45
<devsnek>
shu: does csa not go through the sea of nodes graph
15:46
<devsnek>
graph reducer
15:50
<shu>
devsnek: yes but that's pretty low level. my intuition is you need to do some higher-level processing to identify what fast paths make sense to emit for the optimized tier
15:54
<ystartsev>
sorry, more dumb questions. What does CSA mean? my search turned up Coupled Simulated Annealing
15:54
<shu>
it's a v8-ism
15:54
<shu>
CodeStubAssembler
15:54
<ljharb>
shu: is that you typing?
15:54
<shu>
a higher-level assembler abstracion
15:54
<shu>
oops sorryu
15:54
<ystartsev>
i see, thanks for the clarification
15:54
<rkirsling>
heh I tried to figure that out from googling too but it's part of the Torque article evidently
15:55
<rkirsling>
er well linked from there
15:55
<rkirsling>
(https://v8.dev/blog/csa)
15:55
<ystartsev>
neat, thanks for the link
15:56
<devsnek>
the idea of torque is basically to make writing csa less of a pain
15:57
<rkirsling>
JSC just uses JS itself but with reviewer-enforced stylistic restrictions, hehe
15:57
<devsnek>
v8 used to do that
16:00
<jorendorff>
Right, SM does that. Ours is not great; it's kind of JS, but with every one-off hack we need
16:01
<jorendorff>
Apart from our lack of investment, JS turns out to be a kind of meh language for the purpose of implementing spec algorithms
16:02
<shu>
my view is SM and V8 have both been bitten by the cons of self-hosting
16:03
<bradleymeck>
node is also doing some stylistic stuff with robustness :-/ , it is difficult at best and definitely down to human review
16:04
<devsnek>
that glorious span of time where people hated promises because v8's self-hosted impl was so slow
16:04
<bradleymeck>
so even runtimes ontop of engines are doing this kind of stuff
16:07
<michaelficarra>
AFAIK chemists use Celsius
16:07
<michaelficarra>
which scientific fields primarily use Kelvin?
16:07
<ystartsev>
maybe physics?
16:07
<rkirsling>
astrophysics surely
16:07
<michaelficarra>
I would guess physics?
16:08
<ljharb>
physics for sure
16:09
<akirose>
y'all see all the "missing information" tags on these new delegate issues? I'd love to get them wrapped & closed! pls check if you're on there or someone you know is https://github.com/tc39/Admin-and-Business/issues
16:10
<michaelficarra>
as an American, I can't help but be embarrassed during this presentation
16:11
<bterlson>
Except for fahrenheit which is a superior scale for non-scientific applications 😀
16:12
<rkirsling>
:fry:
16:15
<shu>
what is the phrase they're saying?
16:15
<shu>
baby highs?
16:15
<drousso>
@bterlson +1 omg _thank you_ yes
16:16
<bradleymeck>
shu: baby heights
16:17
<shu>
does that... use different units than teenager heights or adult heights? i am not a parent
16:18
<ljharb>
baby height is "about 4 inches higher than you thought was safe"
16:18
<Bakkot>
baby heights are inches
16:18
<Bakkot>
not feet and inches
16:18
<Bakkot>
so, yes
16:18
<robpalme>
maybe it's locale specific. in the uk babies are measured in cm
16:18
<ystartsev>
i suspect this is for temporaldeadzone
16:18
<ljharb>
oh oops, sorry
16:32
<littledan>
I'm curious why we're prioritizing Intl.Segmenter when it was a late agenda addition
16:33
<littledan>
this is pushing other things off the agenda that were added before the agenda deadline
16:34
<rkirsling>
wow that Array.from second param
16:35
<michaelficarra>
littledan: we discussed this yesterday, late additions do not mean deprioritised
16:35
<michaelficarra>
we should still prioritise higher-stage proposals over lower-stage ones
16:36
<littledan>
sorry, I guess I missed that discussion (and continue to disagree)
16:36
<michaelficarra>
by "we discussed this yesterday", I mean it was discussed in this channel yesterday
16:36
<michaelficarra>
I did not mean to imply you were present
16:36
<littledan>
right, I didn't mean to imply that anyone but me was at fault for missing it
16:37
<shu>
ystartsev: do you think subclassing removal would benefit from an incubation call? i'm thinking no, since the feedback we want are not from delegates
16:37
<ystartsev>
i think no
16:37
<michaelficarra>
littledan: we can have that process discussion at some point, but there's no precedent for changing priority based on when an agenda item was added
16:38
<ljharb>
the deadline has always been indended only for advancement, since that's the only thing that requires sufficient time to review
16:39
<littledan>
I'll drop this; it's not productive for me to be complaining, and I hope the presenter understands that this isn't personal (of course I'm a fan of this proposal, and I'm really happy that the presenter has taken it up and is championing it in an improved direction from when I started it)
16:40
<littledan>
I've reviewed these changes and they all seem like good ideas to me
16:40
<littledan>
well, except I disagree about the exotic internal slots hazard
16:41
<michaelficarra>
I wish the committee would form a consistent security model that we can use to inform our designs
16:41
<michaelficarra>
I feel we are constantly going back and forth on whether the model SES is based on is valid
16:41
<shu>
michaelficarra: yes, i wish we'd settle as well
16:42
<drousso>
+1
16:42
<shu>
michaelficarra: though of course i am, as a browser, firmly on the invalid side
16:42
<littledan>
so, the exotic internal slot thing seems new. I've been working on following SES constraints for years, but this is a new idea about restrictions on proposals
16:42
<littledan>
I don't see why you couldn't have a prototype around something that has an internal slot containing an object
16:43
<devsnek>
did we move to Promise.any stuff
16:43
<ljharb>
no but the concern overlaps
16:44
<devsnek>
promises have internal slots that hold non-primitive data
16:44
<devsnek>
thenables and whatnot
16:44
<ljharb>
the problem isn't slots holding objects
16:44
<ljharb>
it's *revealing* mutable objects, held in slots
16:45
<ystartsev>
michaelficarra: yeah same.
16:46
<ljharb>
i think the real issue here is that the design of Proxy didn't account for internal slots "properly" for the security model they have in mind
16:47
<michaelficarra>
sounds about right ljharb
16:48
<ljharb>
sorry
16:49
<ljharb>
every single JS type besides Error and Array has prototype methods that check internal slots and thus throw on proxies
16:49
<ljharb>
that slots make proxies throw is irrelevant here
16:50
<ljharb>
(specifically, things with exotic objects are defined in the spec to mean "has exotic internal methods" which has nothing to do with slots)
16:51
<sffc>
mpcsh, maybe try reloading the doc? There is a lot of activity, and maybe you have lag
16:51
<ljharb>
(objects are also data; "primitives" is the term that we should be using here)
16:52
<mpcsh>
sffc: good call
16:54
<jorendorff>
https://tc39.es/ecma262/#sec-get-%typedarray%.prototype.buffer
16:55
<rkirsling>
is there any precedent for "getting back to the Intl class instance"?
16:55
<rkirsling>
seems super random
16:55
<jorendorff>
^ that seems to be a getter that returns an object out of an internal slot
16:56
<ljharb>
jorendorff: ohhhh snap
16:56
<shu>
lol what is going on right now
16:56
<shu>
how are function closures not reified
16:56
<shu>
???
16:56
<ljharb>
i can clarify but i don't think this discussion is useful right now
16:56
<devsnek>
they're using the word closure differently
16:57
<devsnek>
waldemar is referring to the function as a closure
16:57
<michaelficarra>
I don't think there's an ecmascript value that we call a "closure" in the spec
16:57
<shu>
i don't think there are different meanings of "closure", there is a single meaning of closure
16:57
<devsnek>
and someone else is using the term closure to refer to the scope
16:57
<devsnek>
not the function
16:57
<jorendorff>
ljharb is right, this conversation is *terrible*
16:58
<michaelficarra>
^
16:59
<michaelficarra>
really, I blame this committee for not having a consistent security model that we could be reasoning about right now
17:00
<sffc>
+1 shu, let's not hypothesize about SES without Mark Miller here
17:01
<bterlson>
You want to do the opposite of table it. It's on the table right now; we're discussing it.
17:01
<NilSet>
seems to me like if the membrane pattern is fragile to changes in the spec like this, it SHOULD in fact be actually part of the spec
17:01
<rkirsling>
bterlson: boooo
17:02
<shu>
have i been using "tabling" wrong my entire life??
17:02
<bterlson>
sorry no
17:02
<ljharb>
NilSet: that, or, we should have consensus not to support that pattern. the problem is that consensus for either one is likely not possible.
17:02
<rkirsling>
shu: no you're 100% correct for US english
17:02
<bterlson>
US vs British english distinction
17:02
<shu>
for real?
17:02
<shu>
it means the opposite in british english?
17:02
<rkirsling>
yeah it's literally the opposite
17:02
<rkirsling>
it's horrible
17:02
<bterlson>
IMO the meaning of "to table" is one of the few things British English gets right. We already have ways to say "defer"
17:03
<ljharb>
bollocks
17:03
<drousso>
wow
17:03
<drousso>
🤯🤯🤯
17:03
<ljharb>
but i'll take my blown mind about UK english's meaning of "table" to tdz
17:03
<ryzokuken>
https://english.stackexchange.com/questions/16285/what-is-the-meaning-of-the-expression-we-can-table-this
17:03
<sffc>
For a US-based meeting let's use the US definition of "table" :)
17:03
<rkirsling>
bterlson: we also have ways to say "schedule" though
17:04
<bterlson>
table is to bring up for discussion immediately
17:04
<bterlson>
it's also a good metaphor. You table a proposal. You can table supporting documents.
17:06
<NilSet>
so table is a contronym?
17:06
<NilSet>
like chuffed?
17:09
<ljharb>
NilSet: join #temporaldeadzone, i have questions
17:29
<devsnek>
is frank tang on irc
17:59
<robpalme>
we are restarting in 1 minute!
18:13
<littledan>
devsnek: I don't think so but I can introduce you by email if you want
18:13
<devsnek>
oh i just wanted to let him know his camera was on during lunch
18:15
<ljharb>
littledan: fwiw we do have that strawperson solution, it's the spaceship operator
18:16
<littledan>
ah OK. That would work with Arrays?
18:16
<littledan>
maybe we should go down the queue?
18:17
<ljharb>
littledan: yes, it would come with a Symbol.compare protocol, as in the example in the slides, that would be defined on Array.prototype
18:17
<howdoi>
[false, null, 1, "1"].sort() today would return [ 1, '1', false, null ]
18:19
<ljharb>
shu: (not to preempt your queue item) but arrays can contain any value, so to compare array contents we need to know how to compare any variable
18:19
<ljharb>
*any value
18:22
<michaelficarra>
I agree with Shu that I do not want to spend committee time on the black hole that is generic equality
18:22
<shu>
it's a bigger hole than just equality
18:23
<michaelficarra>
that's true, also ordering
18:23
<rkirsling>
I think shu's summarized opinion was quite well put
18:23
<shu>
i don't think we should think about partial orders and so forth
18:23
<michaelficarra>
I don't think we should spend time on either individually or both
18:23
<shu>
to wit, i don't think it's sensical kinda along the arguments that waldemar put forward
18:24
<michaelficarra>
does Set equality take into account the insertion order? gross
18:24
<devsnek>
its observable via -0
18:24
<michaelficarra>
it's observable via iteration
18:24
<ljharb>
michaelficarra: it wouldn't have to
18:24
<ljharb>
michaelficarra: all the deepEqual libraries on npm do not regard order in Set and Map comparison
18:25
<ljharb>
(also node's assert)
18:25
<michaelficarra>
that doesn't mean it's the *one true equality definition*
18:25
<Bakkot>
if I want it to do I need to overwrite Set.prototype[Symbol.whatever]?
18:25
<ljharb>
iow the semantics for how to judge values as equal are already largely consistent in the ecosystem
18:25
<ljharb>
Bakkot: replace it, or shadow it via own or subclass, yes
18:26
<rbuckton>
I'm interested in exploring equality, relational equality, and structural equality
18:27
<shu>
rbuckton: what is relational equality?
18:27
<rbuckton>
relational operators, essentially `Symbol.compare`
18:28
<rbuckton>
(from the slides)
18:28
<shu>
what is the equality part of "relational equality"?
18:29
<rbuckton>
I'm just talking about relational operators like `<`, `<=`, `>`, `>=`
18:29
<shu>
ah okay
18:30
<rbuckton>
For example, If we had a `[Symbol.compareTo]` method, we could have `Array.prototype.sort` use that as a fallback before going to comparing the `ToString` of each element.
18:32
<michaelficarra>
agree with Shu again, even though he jumped queue
18:32
<shu>
i'm sorry i didn't know there was a queue!
18:32
<shu>
thought it was empty, should have the tab open
18:32
<michaelficarra>
there's always a queue
18:33
<michaelficarra>
:-P
18:33
<shu>
i heard rob said it was empty
18:33
<akirose>
it was
18:33
<akirose>
and then it wasn't
18:34
<michaelficarra>
good point, littledan, public perception of what we've approved is important
18:35
<shu>
agree
18:35
<ljharb>
+1
18:35
<michaelficarra>
I'm very happy in general with everyone's contributions during this topic. Good job everyone!
18:36
<rkirsling>
:nod:
18:37
<littledan>
ftr I think a spaceship operator someday would be awesome, but I agree with Waldemar that it would need to be four-valued
18:37
<devsnek>
what's the fourth value
18:37
<devsnek>
no comparison?
18:37
<littledan>
maybe spaceship could be built on operator overloading, if we do that. It'd be cool if spaceship and other comparison operators kinda agreed
18:38
<littledan>
devsnek: Yes, uncomparable. Like NaN, but there are other partial orders
18:38
<rkirsling>
mmm negative indices
18:38
<ljharb>
negative, postiive, zero, NaN?
18:38
<devsnek>
+Infinity, -Infinity, 0, null
18:39
<michaelficarra>
ljharb: may want to look here for some inspiration: https://pursuit.purescript.org/packages/purescript-higher-order/0.2.0/docs/Data.PartialOrd#t:PartialOrd
18:39
<ljharb>
"just true"?
18:40
<devsnek>
or https://doc.rust-lang.org/std/cmp/trait.PartialOrd.html
18:40
<ljharb>
those laws do make sense to me tho; if i wasn't afraid of touching > and < and == i'd expect them all to agree
18:40
<michaelficarra>
are Arguments exotic objects "indexable"?
18:40
<ljharb>
yes?
18:41
<michaelficarra>
so how will they get this method?
18:41
<devsnek>
i don't see much of a reason to add it
18:41
<rbuckton>
What I've been thinking about is a set of protocols and APIs around equality:
18:41
<rbuckton>
- `[@@equals](other)`, `[@@hash]()` - Allows an object itself to define whether it is equal to another object in a generic fashion. Useful for `Map`, `Set`, and cross-compatibility between userland libraries.
18:41
<rbuckton>
- `[@@compareTo](other)` - Defines a relational comparison on an object itself, returning `-1 | 0 | 1` (similar to this proposal)
18:41
<rbuckton>
- `[@@structuralEquals](other, equaler)` - Allows an object to define how it should be equated structurally with another object, using the provided `Equaler` (see below)
18:41
<rbuckton>
- `[@@structuralHash](equaler)` - A version of `@@hash` for structural equality.
18:41
<rbuckton>
- `[@@structuralCompareTo](other, comparer)` - A version of `@@compareTo` for structural comparisons.
18:41
<rbuckton>
- `Equaler` - An object with `equals(a, b)` and `hash(a)` methods that can be used to define equality independent of objects. Also useful for `Map` and `Set` when working with keys that do not maintain their own `@@equals`/`@@hash` members.
18:41
<rbuckton>
- `Comparer` - An object with a `compare(a, b)` method that can be used to define comparability independent of objects.
18:41
<rbuckton>
- `StructuralEqualer` - An object with `structuralEquals(a, b, equaler)` and `structuralHash(a, equaler)` methods.
18:42
<rbuckton>
- `StructuralComparer` - An object with `structuralCompare(a, b, comparer)` methods.
18:42
<rbuckton>
The design is derived from `IEquatable`, `IComparable`, `IStructuralEquatable`, `IStructuralComparable`, `EqualityComparer`, and `Comparer` in C#/.NET.
18:42
<ljharb>
eesh
18:42
<devsnek>
but its not like they can't have an own property
18:43
<michaelficarra>
rbuckton: you don't need to end every proposal with "this design is derived from […] C#/.NET"; we already know
18:43
<ljharb>
lulz
18:43
<rbuckton>
michaelficarra: :P
18:44
<devsnek>
i need to start adding js features to c#
18:44
<devsnek>
to balance it out
18:44
<ljharb>
add typeof null
18:44
<ljharb>
oops this isn't tdz
18:44
<rkirsling>
michaelficarra: 🔥
18:45
<michaelficarra>
rbuckton: 💙
18:45
<rbuckton>
ActiveX/COM objects in old IE/Chakra exposed both an indexer and a `item()` method with the same meaning. Probably not a compat issue for Array.prototype...
18:45
<Bakkot>
I feel like switching null to undefined is going to break stuff
18:45
<rbuckton>
michaelficarra: not always true though, partial application isn't based on .NET at all :)
18:46
<jorendorff>
(re: null → undefined) yes ...only if anyone is using .item() to start with
18:47
<Bakkot>
fair
18:47
<Bakkot>
i assumed it was common
18:47
<jorendorff>
maybe? literally no idea
18:47
<Bakkot>
I guess I'd usually use the indexing syntax though
18:47
<rkirsling>
I would be surprised if it's a thing
18:47
<rkirsling>
but the web is a surprising place, so who knows
18:48
<Bakkot>
michaelficarra I don't see a reason to want that
18:48
<devsnek>
michaelficarra: own proprety :P
18:49
<Bakkot>
I don't see a reason for people to have arguments objects in new code at all
18:49
<jorendorff>
it's funny to have `arr.item(Infinity)` able to hit an expando property
18:49
<rickbutton>
sometimes you have to make bad choices to level out the good ones Bakkot
18:49
<haxjs>
I guess if we can had arguments be array, it already be array in ES6?
18:50
<jorendorff>
it's also funny to have `arr.item(-100)`, where arr.length is 3, able to hit expando properties
18:50
<jridgewell>
We define `Symbol.iterator` on `arguments`
18:50
<Bakkot>
haxjs I don't know if we explored having arguments be an array in strict mode. it definitely could not be in sloppy mode because there is the magical behavior of mapped arguments objects
18:50
<jridgewell>
As an own-data method
18:50
<leobalter>
michaelficarra: I don't see a use case for arguments other than we don't have it there. I don't think it's interesting enough to add just because this
18:50
<Bakkot>
jridgewell that's a good example
18:50
<michaelficarra>
arguments.item(-1) is useful
18:51
<Bakkot>
michaelficarra only if you have an arguments object, which, why do you have an arguments object
18:51
<michaelficarra>
because it's in-scope as `arguments` in every function invocation?
18:51
<jridgewell>
And it's the `Array.prototype.values` method, so shared between all `arguments`
18:51
<ljharb>
jorendorff: wait, what
18:51
<ljharb>
jorendorff: why would `item` accept anything that's not an integer
18:51
<michaelficarra>
jridgewell: that's great precedent! even if gross
18:51
<ljharb>
jorendorff: or at least a finite number
18:52
<Bakkot>
michaelficarra so? `eval` is in scope too, but, like, don't touch it
18:52
<michaelficarra>
sounds like we could probably do the same with Array::item
18:52
<jorendorff>
ljharb: I'm kind of saying I agree. just going by the slides
18:52
<devsnek>
michaelficarra: `...args` is an array that you can item(-1) on
18:52
<ljharb>
littledan: https://apidock.com/rails/Array/forty_two
18:53
<michaelficarra>
devsnek: can't always use rest parameters
18:53
<rkirsling>
I mean if we hit web compat issues with the Web APIs then *just* having a "from the right" method might suffice
18:53
<devsnek>
michaelficarra: why not
18:53
<Bakkot>
littledan I don't see why indexing with `-1` is any worse than indexing with `0`
18:53
<michaelficarra>
devsnek: use strict directive or weird parameter ordering conventions a la node
18:53
<michaelficarra>
Bakkot: +1
18:53
<devsnek>
Array.prototype.item.call(arguments, -1)
18:53
<michaelficarra>
devsnek: yeah that's a decent alternative
18:54
<michaelficarra>
or the old reliable `args = [].slice.call(arguments)`
18:54
<ljharb>
RIP `arguments::Array.prototype.item(-1)`
18:54
<devsnek>
lmao
18:54
<michaelficarra>
ljharb: :'(
18:54
<haxjs>
Can we revive it?
18:55
<michaelficarra>
haxjs: it wasn't too popular
18:55
<howdoi>
ljharb: epic! self[41]
18:55
<littledan>
rbuckton: peek sounds like a great name
18:55
<leobalter>
picking the last item from `arguments` without checking the length sounds weird. For arguments you either expect a length or - if you expect many arguments - it feels like rest parameter is already a good design
18:55
<gibson042>
peek by convention is from the front
18:56
<ystartsev>
peek sounds too ambiguous to me
18:56
<devsnek>
https://apidock.com/rails/Array/forty_two
18:56
<gibson042>
x.peek(0) is like x[0]
18:56
<devsnek>
what does peek mean
18:56
<ystartsev>
i understand peek as similar to next, without advancing
18:56
<devsnek>
i only know it in the context of iterators
18:56
<gibson042>
it's actually a good candidate replacement for "item" if that name doesn't work out
18:56
<rkirsling>
peek is great if you're already a parser geek, but...
18:56
<rbuckton>
gibson042: that wouldn't match with `push` and `pop` being from the back and being queue-like operations on Array.
18:56
<littledan>
sorry don't worry about my concern about .item(-1), it doesn't seem really bad to me, ljharb makes a good point about .slice
18:57
<ljharb>
peek is like pop and push, it's just weird because arrays conflate Lists and Queues
18:57
<littledan>
I still like the idea of .lastElement() somehow or other
18:57
<rbuckton>
This proposal was already suggested in an issue on last: https://github.com/tc39/proposal-array-last/issues/27
18:57
<ystartsev>
i think the concept is good
18:57
<devsnek>
ljharb: wdym "like pop and push"
18:57
<ystartsev>
i would support moving it forward
18:57
<ljharb>
devsnek: peek is "pop but don't remove it"
18:57
<rbuckton>
Well maybe not the same proposal, please ignore.
18:57
<devsnek>
ahhh got it
18:57
<gibson042>
peek is "next but don't remove it"
18:58
<devsnek>
yeah i wasn't sure what it meant on collection types
18:58
<ljharb>
arrays actually conflate the concepts of List, Stack, and Queue, i think?
18:58
<gibson042>
yeah
18:58
<ljharb>
pop/push, shift/unshift, and then everything else
18:58
<devsnek>
they're also dictionaries
18:58
<littledan>
+1 for Stage 1!
18:59
<rkirsling>
ship it
18:59
<devsnek>
[-1] for stage 1
19:00
<jridgewell>
I think of arrays as being closer to stacks then queues
19:01
<devsnek>
they have the methods needed to be queues
19:01
<rkirsling>
jridgewell: I think performance encourages that view
19:01
<jridgewell>
Mainly because `shift` is O(n) and `pop` is O(1)
19:01
<devsnek>
yeah performance *definitely* is on the side of that
19:01
<rkirsling>
yeah.
19:01
<gibson042>
yep
19:01
<devsnek>
you could do a butterfly allocation for every array
19:04
<rbuckton>
jridgewell: agreed, I misspoke when I said "queue-like operations" above, I meant to say "stack-like operations" w.r.t. `push/pop`. Hence why I think `.peek` makes sense as "look at the nth element of the array starting from the last element".
19:04
<ljharb>
ystartsev: fwiw the motivation is to do it in node, and even if node is adding webcrypto, it seems like it should be in the language :-/
19:05
<jridgewell>
Yah, I agree with `peek` being backwards looking for it
19:05
<devsnek>
crypto sounds good
19:05
<devsnek>
i still don't think uuid belongs in stdlib
19:07
<ystartsev>
ljharb: thats actually the argument we had regarding why it should be in webcrypto, node is implementing it
19:07
<michaelficarra>
shu: in case it was not obvious, I have an interest in attending that security model call
19:07
<ljharb>
ystartsev: ok but then that still means it wouldn't be portable outside browsers and node
19:07
<ystartsev>
rbuckton: we have already discussed it, we may rechartere it
19:07
<ljharb>
it's really weird imo for stuff that's not web-specific to only be in web specs.
19:08
<ystartsev>
ljharb: this is why i brought up a more wholistic approach to crypto
19:08
<ljharb>
gotcha
19:08
<keith_miller>
shu: Sorry, I missed part of this because I had a thingy. Was it discussed if we could have these be normative optional?
19:08
<rbuckton>
Given that NodeJS is also intending to implement something akin to Web Cryptography, I feel it might make sense to adopt part or all of Web Crypto in the language/standard library itself.
19:08
<ljharb>
^
19:08
<ystartsev>
the view of our security folks is that if we start introducing bits and pieces of crypto to just js, we should have a holistic picture so that we add things that are strateegic
19:09
<ljharb>
littledan: i'm not sure temporal is ready for wider review until the rate of change slows?
19:09
<ystartsev>
there was also discussion about moving web crypto to tc39, but it is blocked
19:09
<devsnek>
its worth noting that node and the web are not all of js
19:09
<devsnek>
just most of it
19:09
<ljharb>
ystartsev: phrased that way ("the view of" part) is quite compelling
19:09
<rbuckton>
ystartsev: Due to EventTarget, or for some other reason?
19:09
<ystartsev>
due to a process reason
19:09
<ystartsev>
i can raise it again, there was an ongoing discussion around this
19:10
<keith_miller>
ystartsev: Was it blocked becaues there are places where it doesn't make sense or because we don't want to be the arbiters?
19:10
<keith_miller>
IMO, I'm kind of a fan of standardizing many more things as normative optional and letting hosts define which things they should expose
19:10
<littledan>
ljharb: Temporal is seeking feedback, as announced in the presentation.
19:10
<rbuckton>
I'd be interested in knowing more, as I was asked by the committee to explore moving my `ArrayBuffer.getRandomBytes` proposal to bringing at least part of `crypto` to the language.
19:10
<keith_miller>
If we don't think they make sense everywhere
19:11
<shu>
keith_miller: what's normative optional?
19:11
<ystartsev>
therre were a couple of things -> one is that the layering and moving of bits of web crypto was offered by someone who was in an admin role but couldn't make that call
19:11
<shu>
keith_miller: .item()?
19:11
<keith_miller>
shu: no sorry, things like getRandomBytes
19:11
<shu>
keith_miller: oh i have no idea
19:11
<keith_miller>
where some contexts don't want it
19:11
<devsnek>
bradleymeck: did you pull the module string exports
19:11
<shu>
keith_miller: i'm kinda on the move to webcrypto train
19:11
<keith_miller>
because security or w/e
19:12
<ystartsev>
the second issue is that mozilla itself would be opposed to moving things out of web crypto as they see this as well defined and are being implemented by external consumers anyway (such as node)
19:12
<Bakkot>
workers don't expose most of crypto, for reasons which are totally unclear to me
19:12
<Bakkot>
they expose getRandomValues and nothing else, IIRC
19:12
<shu>
keith_miller: but i want the champions to hear that and respond, not me parroting them
19:12
<bradleymeck>
devsnek: arbitrary namespace bindings? nah, that went through
19:12
<keith_miller>
shu: One upside is that then node can share the spec
19:12
<keith_miller>
but I don't care too much
19:12
<devsnek>
bradleymeck: stage 1?
19:12
<devsnek>
oh i see it on the queue now
19:12
<bradleymeck>
`from ... import` has feedback that it doesn't carry enough weight so I'm de-prioritizing
19:12
<keith_miller>
I guess we can implement it in JSC regardless 🤷‍♂️
19:13
<keith_miller>
Just feels like a failure of the language if the spec can't have "core" library features
19:13
<bradleymeck>
devsnek: no stage because i didn't ask, it should go quickly through staging though as it seemed only validity of strings is the question
19:13
<devsnek>
bradleymeck: like utf validity?
19:14
<bradleymeck>
yes
19:14
<rbuckton>
ystartsev: `UUID` is essentially dependent on `getRandomValues` (at least per the requirements of some members of TC39). Are you suggesting that `UUID` be moved from TC39 to a proposal to Web Crypto?
19:14
<devsnek>
js strings aren't required to be valid utf anything are they?
19:14
<ystartsev>
rbuckton: yse
19:14
<Bakkot>
devsnek indeed
19:14
<Bakkot>
but they are in many other languages
19:14
<keith_miller>
shu: Oh sure, I'm not saying they should feel obligated. Just that I think a lot of proposals don't come to TC-39 because of things like SES concerns, which I think is a shame.
19:14
<ystartsev>
rathre than move getRandomValues to tc39
19:14
<michaelficarra>
devsnek: nope, just a sequence of UTF-16 code units
19:15
<devsnek>
so what's the problem then lol
19:15
<shu>
keith_miller: ah, interesting observation
19:15
<bradleymeck>
devsnek: exporting invalid stuff that other langs couldn't deal w/
19:15
<keith_miller>
shu: if we could solve that via normative optional then we might have a better path forwar
19:15
<keith_miller>
forward*
19:15
<michaelficarra>
I'm glad we're getting to this editorial topic
19:15
<rkirsling>
oh man
19:15
<michaelficarra>
being an editor and all lol
19:16
<rkirsling>
most heated editorial topic ever
19:16
<rbuckton>
ystartsev: There's a broader question of whether there's the possibility of other ES standard library APIs that might depend on UUID, and then can't because it isn't specified. I suppose they would have to rely on merely a string or `ArrayBuffer` representation of the UUID.
19:16
<ystartsev>
rbuckton: are there specific apis you have in mind?
19:16
<rbuckton>
"might depend on UUID" in the future, rather.
19:16
<devsnek>
why would something have to depend on uuid
19:17
<gibson042>
shu: optional to implement, but if implemented must conform with the spec
19:17
<rkirsling>
definitely did *not* know about cbrt
19:19
<rbuckton>
ystartsev: Nothing concrete at the moment, no. I know that, in languages like C#, UUID (or rather, `Guid`) usage is fairly prevalent within the standard library.
19:19
<keith_miller>
devsnek: I don't think they are forced to be UTF-16 but it's a pain to do a lot of RegExp stuff if they're not in that form
19:19
<keith_miller>
If we didn't have non-unicode RegExp's with unicode characters then it would probably fine lol
19:19
<devsnek>
keith_miller: of course one *shouldn't* store nonsense in them
19:19
<ystartsev>
rbuckton: what kind of usage do we mean here? as a building block for other rthings?
19:19
<devsnek>
but one *can*
19:20
<keith_miller>
devsnek: store?
19:20
<keith_miller>
maybe we are talking about different things?
19:20
<rbuckton>
ystartsev: Yes.
19:20
<devsnek>
strings
19:20
<devsnek>
in js
19:20
<devsnek>
people used to store binary data in them before we got arraybuffer
19:20
<ystartsev>
rbuckton: from our perspective, it doesn't make sense in duplicating the standard, or having slightly different implementations of the same thing, or maintaining two implementations in parallel
19:20
<Bakkot>
fwiw I am in favor of requiring those strings to be valid UTF16
19:20
<keith_miller>
I don't think it's the string so much as the code points
19:20
<Bakkot>
they're not arbitrary data; they're specifically an interop point, potentially with other languages
19:20
<keith_miller>
for regexps
19:20
<ystartsev>
rbuckton: i am unaware of any features that we are planning to add to js that would rely on uuid
19:20
<rbuckton>
I'm not opposed to UUID moving to web crypto, but I do wonder if we might have to revisit this again in the future.
19:21
<Bakkot>
and you can't export a dynamic string, so it's not like you have to check your strings or whatever
19:21
<devsnek>
Bakkot: a language may use a mangling scheme which is not valid utf
19:21
<Bakkot>
it would be an early error
19:21
<Bakkot>
devsnek ehhhhh
19:21
<devsnek>
i mean i doubt it exists
19:21
<Bakkot>
devsnek JS strings are not strings of bytes
19:21
<devsnek>
i don't see a reason to limit it though
19:21
<Bakkot>
they are strings of 16-bit values
19:21
<ystartsev>
i will see where the rechartering of webcrypto is at the moment, and i will get back to folks
19:21
<devsnek>
Bakkot: people used them as byte strings
19:21
<ystartsev>
the alternative is a holistic approach to crypto in tc39 that compliments web crypto
19:21
<keith_miller>
rbuckton: If we put UUID in W3C how would anything in TC-39 depend on it anyway?
19:22
<Bakkot>
devsnek yes, but this is an interop point, not an arbitrary string
19:22
<Bakkot>
devsnek the reason to limit it is so that the interop is "unicode strings" rather "sequences of 16-bit values"
19:22
<Bakkot>
if the strings were literally bytes, that might be reasonable, but they aren't
19:22
<Bakkot>
bytes are a kind of reasonable interop point
19:22
<Bakkot>
sequences of 16-bit values are not
19:23
<keith_miller>
i.e. I don't see how having TC-39 have it as normative optional would be different from a TC-39 use
19:23
<rbuckton>
keith_miller: As far as I can tell, we couldn't. At best, if we did need to support it we could depend on a uniform string representation of a UUID and users would have to depend on the host to give them a mechanism to generate one.
19:23
<rbuckton>
string or ArrayBuffer
19:23
<devsnek>
rbuckton: what is the use case that requires uuids
19:24
<devsnek>
vs some other somewhat unique value
19:24
<keith_miller>
rbuckton: I'd also be surprised since we can't add UUID to TC-39 we could add anything that depends on it
19:24
<rbuckton>
devsnek: I don't have one currently. I find myself often needing UUIDs in user code, and would find it acceptable if Web Crypto implemented UUID, as long as a compatible implementation is also available on Node.
19:26
<keith_miller>
ystartsev: I'd really like to see us consider normative optional before moving to WebCrypto but obviously I'm not championing the UUID proposal
19:26
<rbuckton>
My experience in C# has shown that `Guid` is often heavily used in larger programs and is tied to a number of standard library features in .NET. It would be unfortunate that we wouldn't be able to define something that is consistent and broadly available across all hosts, but it isn't the end of the world.
19:27
<keith_miller>
ystartsev: Not that you are either AFAICT, but you mentioned rechartering the group above
19:27
<ystartsev>
just a sec
19:27
<keith_miller>
no worries
19:28
<Bakkot>
rbuckton fwiw I think that's a C3-specific thing
19:28
<Bakkot>
*C#
19:29
<Bakkot>
I don't think Guid gets a lot of use in random programs in other languages
19:29
<rbuckton>
It's also a C++/MFC thing, heavily steeped in the fact that much of the Windows registry is built around GUID/UUIDs
19:30
<devsnek>
i've literally never seen UUIDs used outside of databases
19:31
<rbuckton>
devsnek: You pretty much can't write a shared Windows native library without them, though in recent years its not as obvious to the user.
19:31
<devsnek>
ah there's the problem
19:31
<devsnek>
i don't write shared windows libaries
19:31
<devsnek>
or libraries
19:33
<Bakkot>
jorendorff host hooks are "host-defined abstract operations"
19:33
<Bakkot>
that is the phrase used in the spec
19:33
<Bakkot>
I think this is equivalent to "AOs which start with the word Host"
19:36
<littledan>
should we go down the queue?
19:51
<Bakkot>
shu ljharb michaelficarra fwiw I am fine with writing down the thing Waldemar said and preserving that distinction
19:51
<shu>
yes, i was about to suggest that
19:51
<shu>
what waldemar is saying he finds it useful to editorially distinguish
19:52
<shu>
that is fine with me, as long as we get guidelines for editors to apply our judgment
19:52
<michaelficarra>
I don't fully understand what Waldemar wants
19:53
<Bakkot>
michaelficarra he wants us to only use "implementation-defined" when there is not a clearly correct answer
19:53
<michaelficarra>
still just an editorial distinction?
19:53
<Bakkot>
yup
19:53
<michaelficarra>
and we can still make it host-defined?
19:53
<Bakkot>
with committee approval, it sounds like
19:53
<michaelficarra>
aww
19:53
<Bakkot>
(that was chip's point)
19:54
<Bakkot>
(not waldemar's)
19:54
<rkirsling>
how does "implementation-dependent" as a phrase conjure up an image of "there is a best answer"
19:54
<ljharb>
to me, "dependent" and "defined" are identical
19:54
<ljharb>
like in terms of english words
19:54
<keith_miller>
You folks just play word games
19:55
<keith_miller>
Is that like words with friends?
19:55
<ljharb>
i mean, that's accurate
19:55
<gibson042>
I appreciate the distinction in of "defined" being specifiable and "dependent" not
19:55
<rkirsling>
^ I'm okay with "defined" emphasizing a "definition" but
19:55
<ljharb>
regardless of the editorial category, the current wording is very unclear to me
19:55
<ystartsev>
ok so my understanding of this proposal is doing this: https://github.com/tc39/ecma262/issues/1524
19:55
<ystartsev>
oops
19:55
<ystartsev>
sorry
19:55
<rickbutton>
IMO, the editors have a specific role to play word games, that's like the point?
19:55
<ystartsev>
https://github.com/tc39/ecma262/issues/1524#issuecomment-611692464
19:55
<ystartsev>
this
19:56
<ljharb>
rickbutton: that's a triple word score right there
19:56
<gibson042>
the collapse of a quantum superposition is experiment-dependent, but the result of a classical coin flip is experiment-defined
19:56
<ystartsev>
my question might not have been clear
19:56
<ljharb>
gibson042: how are those not the same, a classical coin flip still depends on quantum effects
19:56
<gibson042>
"classical" by definition excludes quantum
19:56
<ljharb>
ah k
19:57
<ljharb>
still not clear on the difference in the terms tho
19:57
<ljharb>
i just think "dependent" and "defined" don't actually have different meanings conversationally, even if in C++ era languages they have a concrete meaning
19:57
<devsnek>
the point there is about causality
19:57
<ljharb>
and importantly, the spec currently does not have any normative distinction between them i'm aware of
19:57
<gibson042>
that part I absolutely agree with
19:58
<devsnek>
like engines don't choose what the cube root of a number is
19:58
<ljharb>
devsnek: they're allowed to, tho.
19:58
<devsnek>
i mean a real number
19:58
<michaelficarra>
note-takers (rricard): feel free to use point of order, that's why it's there
19:59
<gibson042>
nondeterminism would be more concerning in something specified as "implementation-defined" than something "implementation-dependent"
19:59
<shu>
michaelficarra: Bakkot: i did get the sense some delegates have a different notion of "normative" than narrowly scoped to "observably different"
19:59
<shu>
if normative expands to also capture intent
19:59
<shu>
that alarms me
19:59
<ljharb>
i don't see how anything is normative if you can't write a program that observes the difference
20:00
<gibson042>
but both out of scope for ECMA 262 anyway
20:00
<michaelficarra>
yeah I don't think everyone was fully prepared to have this conversation
20:01
<rkirsling>
ljharb: +1
20:02
<shu>
Bakkot: excellent summary, thanks
20:31
<Bakkot>
shu I think it is less that there is disagreement about "normative", more that there are things which are not normative which people (e.g. Chip) feel should not be totally at the discretion of editors
20:31
<shu>
right, that's very sensible
22:01
<shu>
ystartsev: did you and keith schedule anything next week?
22:19
<keith_miller>
shu: Oh I thought it was gonna happen at the incubator meeting?
22:20
<shu>
keith_miller: wait -- the normative optional topic? no that wasn't my intention
22:21
<keith_miller>
Ah ok. Sure we can set something up.
22:23
<shu>
keith_miller: ystartsev: okay i'll set something up
22:23
<keith_miller>
Ok, thanks! are you gonna send us a doodles?
22:23
<shu>
yeah
22:24
<shu>
though that site is like, as much a cpu hog as VC software
22:24
<shu>
are there lighter doodle alternatives
22:25
<drousso>
shu i used <http://whenisgood.net>; a lot in college :P
22:25
<drousso>
much uglier, but still very functional and super lightweight
22:25
<keith_miller>
shu: I have it open and it's all of Safari is using 2% of CPU? Either I need to use your VC software or somethings weird in your browser...
22:25
<shu>
keith_miller: there are like 6 banner ads
22:25
<ljharb>
whenisgood is great
22:26
<keith_miller>
Oh, I have content blockers
22:26
<shu>
keith_miller: i support the hand the feeds me i guess...
22:26
<shu>
that*
22:26
<keith_miller>
Because I hate adds more than I want to support the web lol
22:27
<shu>
no judgment from me
22:31
<drousso>
shu you could always buy a Premium account for no ads :P <http://whenisgood.net/Pricing>;