01:01
<shu>
i was writing a logical assignment test in C++ and tripped C++ trigraph warnings for ??
01:01
<Bakkot>
nice
01:02
<shu>
if i had known at the time of proposing nullish, who knows what my opinion would've been
01:09
<drousso>
shu i actually ran into the same thing 🤣
01:12
<shu>
drousso: beset by legacy features no matter where we work
01:12
<drousso>
😭
01:42
<devsnek>
we should add trigraphs to js
01:43
<devsnek>
by which I mean the c ones
01:43
<drousso>
shu i don't think the test262 tests for `AggregateError.prototype.errors` has been removed
01:44
<drousso>
oh wait i just found the PR
01:44
<drousso>
sorry 😅
01:44
<devsnek>
oh what was the conclusion on that
01:45
<drousso>
it should be an own property instead of a prototype accessor
01:45
<drousso>
im trying to change this in JSC right now <https://webkit.org/b/212677>;
01:45
<devsnek>
nice
01:47
<rkirsling>
damn, Yusuke reviewed it before I even knew it existed
01:47
<rkirsling>
lol
01:48
<drousso>
rkirsling i asked him :P
01:49
<drousso>
rkirsling also, i think i have a fix for the `foo ??= function() {}` change :)
01:49
<rkirsling>
yeah I'm teasin', I know he reviewed the original (and gave lots of comments I wouldn't've been equipped to give)
01:51
<devsnek>
was it decided that it should get the name
01:51
<Bakkot>
yeah
01:52
<devsnek>
woo
01:52
<rkirsling>
I think by saying "woo" now you just expressed the most energetic sentiment there
01:53
<rkirsling>
people seemed to be pretty meh on the whole whether agreeing or disagreeing 😅
01:54
<drousso>
i genuinely could go either way on this lol
05:23
<rkirsling>
yikes. guess it's good we switched away? https://twitter.com/NicoAGrant/status/1268020841054269440
05:38
<ljharb>
personally i'd prefer name inference not exist, but i'm a -0 on adding it in new places
05:39
<ljharb>
rkirsling: i mean, that kind of presumes microsoft and google don't cooperate with law enforcement
05:40
<rkirsling>
perhaps
05:40
<rkirsling>
just seemed poorly put
05:41
<ljharb>
well sure, zoom is a garbage company. but their product is miles ahead of everyone else, and there's sadly not many companies that don't cooperate with law enforcement; we just don't hear about most of them.
05:41
<ljharb>
(also we'd be using a premium zoom account if we used it)
05:42
<rkirsling>
fair enough...
15:11
<michaelficarra>
I'm very excited about the extensibility of module attributes
15:12
<Bakkot>
has Chrome expressed a position on module attributes?
15:12
<Bakkot>
I feel like someone from the chrome team was opposed to them
15:13
<Bakkot>
domenic, maybe
15:13
<ljharb>
michaelficarra: the syntactic extensibility, or the host-carte-blanche extensibility?
15:13
<michaelficarra>
ljharb: syntactic
15:13
<ljharb>
gotcha, thanks
15:13
<michaelficarra>
I think littledan is missing the biggest reason why these must be in-band: import-site-specific metadata vs resource-specific metadata
15:14
<ljharb>
i'm confused; the queue item says "for stage 2" but the slide intro said "status update". is this proposal seeking advancement today?
15:14
<michaelficarra>
ljharb: I'm sure littledan will clarify that for us shortly
15:14
<ljharb>
kk
15:14
<michaelficarra>
oh I should stop mentioning his name while he's presenting, sorry Daniel!
15:14
<shu>
Bakkot: i am for the most part for them
15:16
<Bakkot>
shu neat, thanks
15:17
<shu>
Bakkot: this is a bottleneck for non-JS assets for web apps
15:17
<ljharb>
not for wasm tho?
15:17
<shu>
Bakkot: and given that i've been convinced that non-syntax alternatives are strictly technically worse, i'd prefer this get through
15:17
<shu>
yes, also for wasm?
15:17
<shu>
i mean, it affects wasm
15:17
<ljharb>
hm, can you help me understand that?
15:17
<shu>
i don't understand what your question is
15:18
<ljharb>
right but i mean, the motivating concerns don't apply to importing wasm, as i understand them
15:18
<ljharb>
only to non-code assets
15:18
<ljharb>
(json, css, html)
15:18
<shu>
that's not how i understand it
15:19
<ljharb>
what's your understanding? :-)
15:19
<shu>
the original motivating security concern from apple included both "noexecute" and "wrong parser"
15:19
<shu>
wasm falls in "wrong parser"
15:21
<shu>
the function does run differently depending on how you call it
15:21
<ljharb>
"wrong parser" can be solved without syntax tho on the web - it can use headers
15:25
<brad4d>
why did my question disappear from the queue? Was it inappropriate in some way?
15:25
<ljharb>
brad4d: hm, i never saw yours on there
15:25
<ljharb>
brad4d: reload the page?
15:26
<brad4d>
weird, refresh brings it back, thx
15:26
<jridgewell>
brad4d: sometimes the tcq is buggy
15:26
<ljharb>
ah lol yes i see it now that i refresh too
15:26
<jridgewell>
Or, sometimes 2 people click "delete" on the same row at the time time
15:33
<akirose>
i have done that before
15:33
<rkirsling>
do you mean both click delete on their own item at the same time?
15:34
<rkirsling>
'cause I don't think anybody can delete anybody else's
15:35
<akirose>
i mean as a chair
15:36
<akirose>
or like someone clicks "i'm done speaking" at the exact same time as i click "next speaker" bc i think they forgot and they did forget _until that exact moment_
15:37
<ljharb>
i did click "done speaking" on myself
15:38
<ljharb>
robpalme: i'm still on the queue (i had 2), and if you refresh you may see that i'm "speaking" right now :-) but i can go after bradley
15:44
<ljharb>
msaboff: you can't try/catch imports
15:45
<msaboff>
I know
15:53
<michaelficarra>
I have the same concerns about ignored vs rejected unknown attributes, but I also think it wouldn't kill this proposal either way; if it ends up being a problem, those attributes just unfortunately won't be added
15:54
<shu>
ljharb: to answer your question on here
15:55
<shu>
ljharb: i think the pressure to align isn't going to prevent aligning on a strictly worse solution, like a DSL inside module specifier
15:56
<keith_miller>
How would an envaluator work if you have two imports with different evaluators do you get different modules?
15:57
<keith_miller>
Because that would be wild
15:57
<michaelficarra>
I agree with Shu, they will just do something worse for the other attributes
15:57
<ljharb>
shu: out-of-band is also a viable option
15:57
<shu>
ljharb: i do not have the energy to be the middle man currently for this entire space
15:58
<ljharb>
ok
15:58
<akirose>
timebox, y'all. i'm about to start snapping like an impatient suburban mom
15:58
<shu>
akirose: this is an important proposal
15:58
<shu>
i believe extension is worth while
15:58
<akirose>
yes it is. and so are all the other things on the schedule.
15:58
<shu>
no, i believe this is more important than other things on the schedule
15:58
<ystartsev>
cool down period and come back to this topic?
15:59
<rbuckton>
ljharb: Limit the allowed keys of the `with { }` to just the one we care about for now?
15:59
<ystartsev>
@bterlson akirose robpalme MylesBorins ?
15:59
<ljharb>
rbuckton: which is just "type", yes, i'd be happy with that for now
15:59
<michaelficarra>
I agree with Shu, can we take a break and come back to this later or tomorrow?
15:59
<ystartsev>
ditto
15:59
<akirose>
that's fine
16:00
<michaelficarra>
littledan please include me in the offline module attributes discussion
16:01
<michaelficarra>
I also encourage people to choose less restrictive timeboxes for time sensitive proposals like this
16:01
<littledan>
sorry aboutthat
16:02
<littledan>
I guess we can start this offline discussion during lunch
16:02
<sffc>
Great example of something to do in the hallway track
16:03
<ljharb>
littledan: i'll need 10m to make lunch but will hop in after that
16:03
<littledan>
OK good
16:03
<sffc>
I'm in favor of shorter timeboxes to identify conflicts, followed by hallway track to resolve those conflicts out of band
16:04
<sffc>
Since we are over-subscribed this meeting and I'm still hoping we can get to Intl.Segmenter, which fell off the end
16:09
<michaelficarra>
sffc: if it's any consolation, overflow from previous meetings precede other proposal agenda items
16:10
<michaelficarra>
though I don't necessarily agree with that ordering
16:10
<devsnek>
what is the argument for BuiltInModule being preferable to just having globals
16:10
<Bakkot>
devsnek I am about to ask that question
16:11
<ljharb>
wsdferdksl: you run the shimming Script first, and then later Modules are affected by it
16:11
<devsnek>
hasModule = name in global, import = global[name], export = global[name] = v, freezeModules = Object.freeze(global)?
16:12
<jridgewell>
Or, `import 'shim.js'; import 'main.js'`, and `shim.js` will run before imports
16:12
<Bakkot>
Object.freeze(global) has a lot of other effects
16:12
<Bakkot>
which you really don't want
16:13
<devsnek>
Bakkot: some application of removing configurability and writability then
16:13
<jridgewell>
Oh, maybe linking in `main.js` happens before execution of `shim.js`
16:14
<rkirsling>
+1 to Thomas Levy's question (not sure IRC handle)
16:14
<jridgewell>
I'm not 100% sure, since this would be the first time you could muck with it
16:14
<ljharb>
jridgewell: yeah you'd need `import 'shim.js'; await import('main.js')` i think
16:14
<devsnek>
would be nice to hear from implementations on that last point
16:14
<ljharb>
rkirsling: just like now, where applications must always choose to freeze the env if that's what they want, they must choose to freeze builtin modules
16:15
<devsnek>
they already have pretty reasonable accessor apis for lazy object creation
16:15
<ljharb>
rkirsling: (is how i understand it)
16:15
<rkirsling>
more specifically I'm wondering if this becomes the new way to begin a JS file
16:15
<Bakkot>
devsnek msaboff is an implementation
16:15
<rkirsling>
er wait not file
16:15
<Bakkot>
... implementor
16:15
<rkirsling>
app
16:15
<ljharb>
rkirsling: SES.lockdown() isn't the way to begin a JS file now :-)
16:15
<devsnek>
Bakkot: ah ok, the way he phrased that made it sound otherwise
16:16
<rkirsling>
ljharb: I mean I can take your word for that but I'm not familiar with SES envs
16:16
<rkirsling>
first-hand
16:16
<ljharb>
rkirsling: it's definitely the way to start any app that wants that kind of lockdown, sure
16:17
<rkirsling>
I mean I guess once-per-app is reasonable
16:17
<rkirsling>
I dunno why I thought once-per-file
16:20
<rkirsling>
oh... this is a new topic that jumped the queue
16:20
<rkirsling>
:-/
16:21
<devsnek>
so the only reason this is better than adding new apis to the global is because engines can lazy load?
16:21
<bradleymeck>
rkirsling: you don't freeze in prod due to perf
16:22
<bradleymeck>
perf goes down in a non-trivial way for frozen stuff in engines
16:22
<robpalme>
v8 does not really have much of a penalty once frozen
16:22
<rkirsling>
but I think locking down was for security _in prod_
16:22
<rkirsling>
*thought
16:22
<bradleymeck>
robpalme: has that been fixed? last i saw it still devolved into dict mode
16:22
<jridgewell>
robpalme: it did until about last year
16:23
<jridgewell>
bradleymeck: Yes, they fixed it very recently
16:23
<bradleymeck>
yay
16:23
<devsnek>
bradleymeck: it causes a deoptimization but everything can reoptimize again
16:23
<devsnek>
not locked to dict anymore
16:23
<bradleymeck>
so likely it is just a comms issue for that
16:23
<robpalme>
@bradleymeck we did a lot of benchmarking and could not find anything worth investing in fixing, so i's "good enough"
16:23
<rkirsling>
ohh I didn't realize we skipped ALL the replies
16:23
<rkirsling>
I too didn't recognize voices 😓
16:24
<gibson042>
mea culpa
16:24
<jridgewell>
I believe this is the public doc: https://docs.google.com/document/d/1X6zO5F_Zojizn2dmo_ftaOWsY8NltPHUhudBbUzMxnc/edit
16:25
<jridgewell>
^ "Fast frozen & sealed elements in V8"
16:27
<devsnek>
is freezeModules shallow?
16:27
<devsnek>
do you have to call freezeModules if your app is esm
16:27
<msaboff>
freezeModule doesn't freeze the module, just the module map.
16:28
<ljharb>
devsnek: i'm not sure how the BuiltinModules object would be made unavailable inside ESM
16:28
<ljharb>
devsnek: so i'd say yes
16:28
<devsnek>
well i wouldn't want anything to not be made available
16:28
<devsnek>
so if this is shallow, can't bad code still do bad things
16:29
<devsnek>
like i can't replace Temporal but i can replace Temporal.prototype.whatever
16:29
<shu>
i don't understand how shallow/deep applies to freezing the module map
16:29
<shu>
that doesn't do any freezing to things inside the module
16:29
<devsnek>
right so i'm asking
16:29
<devsnek>
what's the point of it
16:29
<jridgewell>
devsnek: I think that applies to global objects, too
16:29
<jridgewell>
This shouldn't be any different
16:29
<devsnek>
my understanding was freezeModules implies some sort of security
16:30
<shu>
no
16:30
<devsnek>
ok so what's it for
16:31
<ljharb>
it just means that the module namespace object can't be replaced any further
16:31
<ljharb>
replaced/modified
16:31
<devsnek>
right but why does someone want that
16:31
<devsnek>
what would be my motivation to call freezeModules()
16:31
<ljharb>
to have guarantees about the semantics of the rest of your application
16:31
<ljharb>
some of them
16:31
<devsnek>
what guarantees
16:32
<ljharb>
that `import * as ns from 'builtin module'` will always provide the `ns` you expect
16:32
<ljharb>
you certainly may also want to freeze the contents of that ns
16:32
<devsnek>
so its just like... a consistency thing
16:32
<ljharb>
you say "just" but i prioritize that pretty highly :-)
16:33
<devsnek>
i mean if we don't allow mutating the map in the first place
16:33
<devsnek>
sorry scratch that, if we don't have the distinction
16:33
<devsnek>
of application before freeze and application after freeze
16:34
<devsnek>
like with the global, you can apply whatever constraints you want
16:34
<devsnek>
at whatever point
16:35
<robpalme>
heads up on scheduling: the next topic (deep-path properties) is 25min (11:45-12:10 CST) so will eat into lunch. meaning lunch will be 50min instead of 60min.
16:44
<robpalme>
this font is not the greatest font in the world, it is just a tribute
16:46
<rkirsling>
robpalme: to tdz with ye
16:46
<robpalme>
@rkisling soory of course
16:47
<rkirsling>
(oh I'm not chastising so much as inviting lol)
16:49
<NilSet>
that nestd spread mess is used all over our codebase today, when we attempt to be immutable without a lib
16:50
<michaelficarra>
couldn't you theoretically do something like `newObj = (someFunction(immutableObj).deep.path.property = newValue)`?
16:50
<devsnek>
michaelficarra: i was thinking the same thing
16:50
<michaelficarra>
getters/setters solve the problem
16:50
<devsnek>
it would be unique for assignment to not return rhs though
16:50
<Bakkot>
no, that gives you newValue
16:51
<jridgewell>
Yah, that's the same as `newObj = … = newVal`
16:51
<devsnek>
Bakkot: it could not though
16:51
<jridgewell>
Whic his just `newVal`
16:51
<Bakkot>
devsnek yeah, I assumed the question was about using existing language features
16:51
<michaelficarra>
even when a setter is invoked, assignment returns the RHS?
16:51
<Bakkot>
yup
16:51
<michaelficarra>
aww
16:51
<devsnek>
like i said, unique
16:52
<jridgewell>
Yah, just like with `x = (uint8array[0] = 999)`
16:52
<jridgewell>
You get `999`
16:52
<jridgewell>
Even though `uint8array` will do a setter-like thing
16:52
<devsnek>
how about
16:52
<keith_miller>
shu: Do you or V8 have performance concerns with tuples generally?
16:52
<devsnek>
walrus operator
16:52
<keith_miller>
Since there's going to be a lot more object allocations
16:52
<devsnek>
`newRecord := oldRecord.x.y.z = 5`
16:52
<shu>
keith_miller: i haven't looked too deeply yet. i have vague anxiety, i guess
16:53
<ljharb>
lol walrus
16:53
<shu>
keith_miller: the default implementation technique means a lot more interning too
16:53
<keith_miller>
and it's hard to do escape analysis in JS, which is pretty important generally for other languages that have tuples.
16:53
<devsnek>
ljharb: i thought i was kidding but now i think i'm serious
16:54
<shu>
keith_miller: well yeah, and v8 at least wants things to be fast in the interpreter nowadays, we can't really lean escape analysis or scalar replacement and the like even if it were easy
16:54
<keith_miller>
so you can't do the normal just use the same cell
16:54
<jridgewell>
I want walrus operator just for the name.
16:54
<shu>
lean on*
16:54
<keith_miller>
right
16:54
<Bakkot>
python has tuples and is hard to escape-analyze
16:54
<jridgewell>
Eg, `||=` should forever be known as the mallet operator
16:54
<devsnek>
Bakkot: python is famously slow
16:54
<shu>
Bakkot: true, but python's performance demands is mostly offshored to C
16:54
<jridgewell>
https://github.com/tc39/proposal-logical-assignment/blame/master/README.md#L6
16:55
<ljharb>
jridgewell: ||= doesn't look like a mallet tho unless it's `||=` :-/
16:55
<shu>
in those FFI modules, is my understanding
16:55
<NilSet>
the turbofish operator <>:: is literally why i first looked at rust
16:55
<michaelficarra>
what does it mean for this proposal to advance to stage 1 when records/tuples is not stage 4?
16:56
<ljharb>
michaelficarra: stage 1 just means we're going to talk about it more
16:56
<michaelficarra>
because we agree there's a problem that needs to be solved
16:56
<michaelficarra>
how can there be a problem if there's no feature?
16:56
<gibson042>
stage(deepPathProperties) ≤ stage(recordsAndTuples)
16:57
<devsnek>
i feel like this should either be part of the more general object proposal
16:57
<Bakkot>
michaelficarra I think it's fine to say that we're advancing this to stage 1 with an eye towards a problem which does not yet exist but might in the future
16:57
<devsnek>
or the record/tuple proposal
16:57
<akirose>
wait isn't stage 1 acknowledging "there's a problem" and stage 2 "that we're interested in solving"
16:57
<jridgewell>
michaelficarra: See NilSet's comment
16:57
<jridgewell>
> that nestd spread mess is used all over our codebase today, when we attempt to be immutable without a lib
16:58
<jridgewell>
I think that means we have a larger issue than just record/tuple?
16:58
<Bakkot>
akirose stage 2 is "that we are interested in solving _with something like this solution_"
16:58
<Bakkot>
stage 2 implies a particular approach to solving the problem
16:58
<Bakkot>
(just with details omitted)
16:58
<michaelficarra>
^
16:59
<michaelficarra>
stage 1: we agree that there's a problem, stage 2: we've agreed on the important bits of our solution, stage 3: we've nailed down all the details of our solution
16:59
<rbuckton>
All of the mutations could be packed into a single result if the mutations within the same `{}` are tracked?
17:01
<michaelficarra>
nowObj = delete lens(oldObj).deep.property.name
17:01
<michaelficarra>
*newObj
17:02
<Bakkot>
michaelficarra fwiw we usually treat stage 1 as more like "we are not willing to declare that there is definitely not a problem"
17:02
<michaelficarra>
agreed, the bar for stage 1 is low
17:02
<michaelficarra>
and I think that's the right way to operate
17:03
<michaelficarra>
we should really add descriptions like these to the process document
17:03
<Bakkot>
request that we refrain from arguing about these details, given the timebox
17:03
<Bakkot>
the ones being discussed on the call, that is
17:10
<jridgewell>
Is "lenses" just codewords for proxy?
17:11
<michaelficarra>
jridgewell: all you could ever want to know about lenses: https://hackage.haskell.org/package/lens-tutorial-1.0.4/docs/Control-Lens-Tutorial.html
17:12
<rkirsling>
it's basically recreating property access in a pure FP setting
17:12
<rkirsling>
but I wasn't prepared to try to envision this in a JS setting
17:13
<TabAtkins>
OH wow, this was apparently not the morning for me to skip the pre-lunch parts of the meeting, if we're getting into lenses already
17:13
<jridgewell>
Can you translate into a normal language?
17:13
<jridgewell>
Lol.
17:13
<NilSet>
Question: What is a lens?
17:13
<NilSet>
Answer: A lens is a first class getter and setter
17:13
<rkirsling>
TabAtkins: lol. you missed it by a couple of minutes
17:13
<NilSet>
sounds to me like yes its codeword for proxy
17:14
<TabAtkins>
No, it's quite different from a proxy, but for ~mysterious reasons~
17:14
<NilSet>
or rather you could implement a lens with a function that returns a proxy
17:14
<rkirsling>
oh like using a proxy as a view
17:15
<TabAtkins>
I'm busy this morning trying to untangle the HTML spec's use of GOTO in algorithms into nested loops
17:15
<TabAtkins>
for real wtf
17:15
<rickbutton>
oh no
17:17
<devsnek>
TabAtkins: link?
17:18
<TabAtkins>
the one i'm working on right now is https://html.spec.whatwg.org/multipage/parsing.html#reconstruct-the-active-formatting-elements
17:18
<devsnek>
i lost it at "rewind"
17:20
<rkirsling>
reverse reverse
17:22
<shu>
ljharb: are we talking about module attributes?
17:26
<gibson042>
michaelficarra: https://tools.ietf.org/html/rfc3986#section-3
17:27
<jridgewell>
To answer the builtin modules discussion earlier:
17:27
<michaelficarra>
gibson042: huh?
17:27
<jridgewell>
https://gist.github.com/jridgewell/8428f797ef85346d3081c99518fa9fce
17:27
<ljharb>
shu: i'm here in the hallway track just now; littledan?
17:27
<jridgewell>
That will execute `shim.js` (which defines `js:foo`) before `main.js` links `js:foo`
17:27
<devsnek>
jridgewell: what if shim.mjs imports main.mjs
17:27
<shu>
ljharb: stepped away for a sec, omw
17:27
<jridgewell>
That would break it
17:28
<gibson042>
scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
17:28
<gibson042>
sorry, that was for jridgewell
17:44
<bradleymeck>
jridgewell: in your gist the whole graph is lined prior to entry being ready to evaluate (and thus before shim)
17:44
<bradleymeck>
linked*
17:44
<bradleymeck>
so shim wouldn't execute prior to main linking
17:45
<jridgewell>
This behavior is msaboff's intention
17:45
<bradleymeck>
ah
17:45
<bradleymeck>
cycles would have to be isolated, that seems... hard
17:47
<msaboff>
If the shimming happens in a script loaded before a module that imports the shimed module, We propose that the shimmed module is the one that would be linked.
17:48
<bradleymeck>
<script> or Script (JS parse goal)
17:48
<bradleymeck>
?
17:48
<msaboff>
Yes
17:48
<bradleymeck>
which?
17:49
<msaboff>
Script
17:49
<msaboff>
parse goal
17:49
<bradleymeck>
msaboff: would the ESM module graph from an import be rewired is the question
17:49
<bradleymeck>
to my understanding your Script/<script> would be outside of the ESM module graph it can instrument
17:49
<bradleymeck>
not like the linked gist
17:50
<msaboff>
I'd like to talk with you about how that would work.
17:52
<msaboff>
In the linked gist, it is my desire that shim.js would be processed first, before the second import, but we need to talk.
17:58
<shu>
sorry had to close spatial chat
17:58
<shu>
was making my gsuite laggy :/
17:58
<robpalme>
two minutes warning!
17:59
<bradleymeck>
msaboff: that would be a change for sure to how ESM currently works
17:59
<robpalme>
we will be starting with Restrict subclassing support for built-inmethods
17:59
<bradleymeck>
linking is in early error domain currently
17:59
<msaboff>
Let's figure out a time to talk.
17:59
<rwaldron>
bterlson tomorrow do a 4 minute warning. https://www.youtube.com/watch?v=6eyUrpOl40k
18:00
<rkirsling>
ooh yes, been waiting for this topic
18:02
<leobalter>
littledan: for what I want, it's ok for -0 to be similar as in `0 === -0`, at the same time I want the flexibility of not breaking a deep comparison because of NaN
18:03
<ljharb>
leobalter: that's SameValueZero
18:03
<leobalter>
yes
18:03
<leobalter>
yes
18:03
<keith_miller>
rickbutton: littledan: Thinking about record/tuple more, have you considered just one type? so #["a"] is just sugar for #{ 0:"a" }?
18:03
<ljharb>
keith_miller: lists and structs should be conceptually distinct imo, that seems odd
18:03
<jridgewell>
Can we just throw if you insert a `NaN` inside a record?
18:04
<rickbutton>
keith_miller: it would need to sugar to #{ 0: "a", length: 1 }
18:04
<keith_miller>
ljharb: It's weird to me that those wouldn't be the same?
18:04
<keith_miller>
rickbutton: Sure
18:04
<ljharb>
keith_miller: a list has N items, a struct has N pairs
18:04
<ljharb>
also there's a ton of methods you want on Tuples that don't really make sense on Records
18:05
<littledan>
keith_miller: Tuples have Array-like methods on their prototype, whereas Records probably shouldn't have those
18:05
<littledan>
also Tuples have a .length, but I guess that could be part of the desugaring
18:05
<Bakkot>
jridgewell markm proposed that but a lot of people didn't like it
18:05
<Bakkot>
I also don't like it
18:05
<keith_miller>
I don't know how much it matters for the array methods to be on the prototype
18:05
<Bakkot>
though I don't hate it I guess
18:06
<keith_miller>
since it just wouldn't do anything
18:06
<rickbutton>
keith_miller I think it matters a lot, because we want people to be able to use tuples like they already use arrays, which use prototype methods
18:06
<rickbutton>
Array.prototype.slice doesn't mutate the array
18:06
<Bakkot>
jridgewell https://github.com/tc39/proposal-record-tuple/issues/65#issuecomment-635771624
18:06
<keith_miller>
I just find it mildly confusing that a record could have exactly the same members as a tuple but not be ==
18:06
<ljharb>
keith_miller: if they're own properties you can't polyfill Tuple methods.
18:06
<jridgewell>
`NaN` causes hairy equality issues, which is bad if records are motivated by equality.
18:06
<ljharb>
keith_miller: imo that's a feature. a list and a struct can't be the same
18:07
<jridgewell>
We already have runtime checks for disallowing mutable objects
18:07
<keith_miller>
ljharb: But that's not how objects in JS work
18:07
<keith_miller>
Objects in JS can have both indexed and non-index properties
18:07
<ljharb>
keith_miller: depends on what custom comparison logic you choose
18:07
<keith_miller>
so can arrays
18:08
<ljharb>
keith_miller: most comparison libraries (including the quite popular ones i maintain) consider arrays and objects to not be equalish
18:08
<ljharb>
also node's assert
18:08
<jridgewell>
Bakkot: I think Mark was also proposing `#[-0]` throws
18:08
<Bakkot>
jridgewell true
18:08
<Bakkot>
-0 also causes hairy equality issues, tbf
18:08
<keith_miller>
What do you mean by custom comparison logic?
18:08
<devsnek>
thinking of tuples in terms of arrays is surprising to me
18:08
<ljharb>
keith_miller: like, what's the implementation of your `isEqual(a, b)` function
18:08
<rickbutton>
I would be against #[-0] throwing, there are legitimate cases where -0 can appear, we don't want those to throw
18:08
<jridgewell>
I think `===` has good equality for `-0`.
18:09
<ljharb>
keith_miller: if it includes an Array.isArray check, as all the common ones do, then an array and an object would never be considered equal
18:09
<jridgewell>
It doesn't for `NaN`
18:09
<keith_miller>
But that's not part of the actual type system that's just what people implement when they do deep comparison
18:10
<keith_miller>
You could also do any amount of prototype chain checking
18:10
<shu>
keith_miller: after this item you got a min to talk through the deep property path escape analysis comment you had
18:10
<rickbutton>
it is a part of the type system, if you consider that object being an "array" exotic object is a part of the type itself
18:10
<keith_miller>
shu: Sure
18:10
<keith_miller>
shu: You mean the presentation or IRC?
18:11
<shu>
keith_miller: the presentation
18:11
<keith_miller>
👍🏾
18:11
<shu>
keith_miller: i just wanted to queue it up
18:11
<keith_miller>
👍🏼
18:13
<ljharb>
keith_miller: right but i'm saying that virtually the whole ecosystem does check the type when doing deep comparison at this point
18:13
<ljharb>
keith_miller: which means that many would find it confusing for JS not to do that
18:14
<keith_miller>
ljharb: The only way you'd see a distinction is if you create a record that looks exactly like a tuple
18:15
<keith_miller>
So, it's not even really a thing that's going to come up
18:17
<ljharb>
it comes up with arrays and objects.
18:18
<keith_miller>
So does equality not look at the prototype chain?
18:18
<rickbutton>
equality of what?
18:18
<ljharb>
keith_miller: normal JS equality does not, no
18:18
<keith_miller>
rickbutton: ljharb's isEqual function
18:18
<ljharb>
keith_miller: ecosystem deepEqual methods compare the [[Prototype]]
18:19
<ljharb>
iow `{ __proto__ A }` is not equal to `{ __proto__: B }`
18:19
<keith_miller>
Ok, so yeah, that makes sense because those are different types then.
18:19
<ljharb>
and so is `[]` and `{}`
18:24
<shu>
yikes
18:24
<shu>
robot
18:25
<ljharb>
jridgewell: you're a bit roboty
18:25
<bterlson>
droids
18:25
<ljharb>
jridgewell: ok you're better now
18:25
<leobalter>
daleks
18:25
<shu>
oh man that was jarring, the transition
18:25
<shu>
it was like watching the t-1000 heal
18:25
<robpalme>
sounded like a vocoder
18:25
<jorendorff>
`CustomArray.of` and `CustomArray.from` silently changing to not return a CustomArray seems almost mean
18:25
<bterlson>
any signals geeks know what happened there?
18:26
<ljharb>
jorendorff: only if there's a single person doing that tho, which i'm not sure is established :-p
18:26
<jorendorff>
true
18:26
<rickbutton>
bterlson: gremlins in the wires
18:27
<leobalter>
I want to take the opportunity of new types to fix a long time issue with === and NaN. I'd love for Records and Tuples to have a SameValueZero out of the box if I use ===
18:28
<rkirsling>
<3 "stepping up to take out the trash"
18:31
<jorendorff>
+1
18:38
<keith_miller>
rbuckton: Wait what were you saying? I zipped out for a second what's the problem with this.constructor?
18:39
<littledan>
I'm a very strong supporter of this proposal
18:40
<littledan>
(I think I added the species support in feross's buffer library...)
18:40
<keith_miller>
littledan: I heard you speaking about the this.constructor thing
18:40
<rbuckton>
This:
18:40
<rbuckton>
```
18:40
<rbuckton>
class MyArray extends Array {
18:40
<rbuckton>
constructor(options, items) {
18:40
<rbuckton>
super(...items);
18:40
<rbuckton>
this.options = options;
18:40
<rbuckton>
}
18:40
<rbuckton>
}
18:40
<rbuckton>
```
18:40
<rbuckton>
If we use `this.constructor` for `map`, calling `map` on a `MyArray` results in garbage.
18:40
<littledan>
https://github.com/feross/buffer/pull/97
18:40
<littledan>
is this what people are referring to as the only correct usage of species?
18:41
<littledan>
yeah, that problem came up in the buffer library, and was actually a sort of web compat issue for ES6
18:41
<bradleymeck>
littledan: it is the only one that doesn't do things like accidentally stop subclasses from working
18:41
<bradleymeck>
i'm sure there are *some* examples of using it properly elsewhere
18:42
<bradleymeck>
but not on sites i've crawled/code searches
18:42
<rbuckton>
With species I can do something like:
18:42
<rbuckton>
```
18:42
<rbuckton>
class MyArray extends Array {
18:42
<rbuckton>
...
18:42
<rbuckton>
}
18:42
<rbuckton>
MyArray[Symbol.species] = function(...args) { return new MyArray({}, ...args); };
18:42
<rbuckton>
```
18:42
<bradleymeck>
which makes me question if actually setting it is too complex
18:42
<rkirsling>
wait I thought 2-without-3 was on the table
18:42
<rbuckton>
If we use `this.constructor`, I have to override `map` hack around the use of `this.constructor`.
18:42
<bradleymeck>
rwaldron: if you have examples of cross realm apps/libs/sites/etc. I'd appreciate since writing cross context hooks is a bit involved
18:42
<rkirsling>
(er "remove 3 without removing 2")
18:43
<ljharb>
rbuckton: `constructor() { super(); this.constructor = custom; }`?
18:43
<michaelficarra>
yeah rkirsling that's not what the slides said
18:44
<shu>
rkirsling: oh, not via .constructor
18:44
<shu>
maybe there's a better way but i don't have any ideas
18:44
<shu>
i think there was indeed miscommunication here
18:44
<rkirsling>
oops
18:48
<rkirsling>
yay
18:48
<rwaldron>
bradleymeck It's not really something that's well advertised about apps
18:48
<rwaldron>
or libraries, or whatever
18:48
<ljharb>
mpcsh: on it
18:49
<bradleymeck>
yea, so not easy for me to find :-/
18:49
<keith_miller>
Bakkot: RE the branch on pageload, there's so much other stuff that's in builtin functions that normal user code would never do already
18:49
<shu>
i think folks are overfocusing a bit on it being "an unnecessary branch"
18:50
<shu>
it propagates to a lot more complexity in V8 and SM than just a single branch, though that's what it is in the spec text
18:50
<keith_miller>
i.e. you'd get better perf by rewriting all the iterator methods anyway
18:50
<keith_miller>
err
18:50
<bradleymeck>
rwaldron: right now the crawler just replaces every method that calls [@@species] with a devtools debugger trap. in theory it should catch cross realm stuff, but idk if any of our listed sites do that
18:50
<devsnek>
i'm a big fan of async context
18:50
<keith_miller>
prototype
18:50
<rwaldron>
What is the current preferred way of adding things to the notes that we didn't get to?
18:50
<msaboff>
So is the "restrict subclassing support" the first stage 1 or greater proposal to remove normative behavior?
18:51
<rwaldron>
msaboff nope, I think I get that award: renaming Atomics.wake to Atomics.notify
18:51
<rwaldron>
That was in a published spec
18:51
<keith_miller>
shu: How do V8/SM do their fast path check?
18:51
<rwaldron>
ᕦ(ò_óˇ)
18:52
<rickbutton>
rwaldron: like additional queue items?
18:52
<rbuckton>
Yay, async call contexts. I've wanted this for awhile. Kind of like `Threading.AsyncLocal` in .NET.
18:52
<rickbutton>
(that didn't make it)
18:52
<jridgewell>
bradleymeck: Are you using `Object.defineProperty` for that?
18:53
<shu>
keith_miller: there're two ways: 1) manual fast/slow path dispatch in the built-in implementation
18:53
<jridgewell>
The `@@species` props are all no-set getters
18:53
<msaboff>
rwaldron =: Okay. But we knew that wasn't web breaking because the feature was turned off (and still is).
18:53
<bradleymeck>
jridgewell: no, just replacing the primordial method with a diff function
18:53
<shu>
keith_miller: 2) a monotonic "protector bit" that gets flipped if the page does something that results in a bad time, i think as you call it
18:53
<ystartsev>
do i get an award for having my first championed proposal be to remove normative behavior instead of add?
18:53
<bradleymeck>
jridgewell: basically we are trapping [].map not [][@@species]
18:53
<shu>
keith_miller: it's much worse for regexp than Array#map
18:53
<rickbutton>
you certainly should ystartsev
18:54
<shu>
keith_miller: okay, so to dequeue my question earlier
18:54
<rkirsling>
I removed early ref error 🤔
18:54
<rkirsling>
but it was a normative PR lol
18:54
<rbuckton>
I think the Queue is still on a topic from the last agenda item?
18:54
<shu>
keith_miller: help me understand the escape analysis issue, more in detail?
18:54
<robpalme>
you should get 10x more tc39 points for deleting lines from the spec vs adding them
18:54
<shu>
keith_miller: what allocations would it elide if the optimization applies?
18:54
<bradleymeck>
jridgewell: slightly old but same idea in https://gist.github.com/bmeck/5f195c4ae08009db4f3eefdc8bb360c9
18:55
<bradleymeck>
we have a lot more coreJS detection stuff now :-/
18:55
<rwaldron>
rickbutton yeah, I was in the queue
18:55
<keith_miller>
shu: Yeah, I think we mostly use the our equivalent of bit method.
18:55
<rwaldron>
There's a pretty important point that I need to add to the notes
18:55
<keith_miller>
But I haven't looked in a while
18:55
<rickbutton>
rwaldron: we usually just append them to the end of the notes for the section
18:55
<rickbutton>
:%s/section/proposal section/g
18:55
<rwaldron>
I think it changes our understanding of what would be affected by @@species removal
18:55
<rwaldron>
Because it's not @@species being used directly
18:56
<rickbutton>
with like a header of "remaining queue items" or something
18:56
<rkirsling>
robpalme: we should add that to how-we-work
18:56
<shu>
rwaldron: what's the point?
18:56
<shu>
rwaldron: the proposed semantics is that the built-ins create an instance of the built-in in the current realm
18:56
<ljharb>
mpcsh: rickbutton tell me where to add my skipped queue item for that one btw
18:56
<rwaldron>
shu you shook something loose when you mentioned looking through old code (or something like that)
18:57
<shu>
what does that mean? :)
18:57
<rwaldron>
I'm getting to it
18:57
<keith_miller>
shu: So in most languages that have simple updates to immutable things they are either refcounted (so refCount == 1 means mutate in place) or they heavily rely on an escape analysis to prove that the tuple doesn't leave the function so you don't need to allocate it at all
18:57
<rwaldron>
I need to check something
18:57
<rwaldron>
No, I can do that later
18:57
<rickbutton>
ljharb just put it after the conclusion in the "restrict subclassing support" section
18:57
<rwaldron>
If we remove @@species, I believe we will break every site that ever used Zepto
18:57
<keith_miller>
actually you need the escape for the ref count thing anyway
18:58
<shu>
rwaldron: fascinating, would love to dig in
18:58
<keith_miller>
But you can't really do that optimization in JS without a lot of speculation due to getters
18:58
<rwaldron>
shu https://github.com/tc39/notes/blob/master/meetings/2014-11/nov-18.md#46-zepto-broken-by-new-thisconstruct-usage-in-some-arrayprototype-methods
18:58
<shu>
keith_miller: ah, that's a general concern about records/tuples, not a specific one about the deep path properties?
18:59
<keith_miller>
shu: Yeah, true but deep path properties make it much more ergonomic.
18:59
<ljharb>
rwaldron: that's if we remove species *and* use constructor?
18:59
<keith_miller>
And I don't think people realize that it's going to be very expensive
19:00
<shu>
keith_miller: ah, i see. kinda a moral hazard argument that they might think records and tuples are cheaper than object literals
19:00
<shu>
when they are in fact worse
19:01
<keith_miller>
shu: If deep path mutation is in a userland library they 1 need to find it and 2 probably have different expectations on its performance
19:01
<shu>
rwaldron: good find, though my read is of that is how @@species broke ES5-era behavior (the "old semantics" we're proposing), and removing @@species and constructor delegation altogether gets us back to ES5-era behavior, and would be compatible
19:01
<rickbutton>
keith_miller: these are valid arguments, can you list your performance considerations in the issue tracker?
19:01
<shu>
that's a big part of the intuition that this change IS compatible fwiw, because it was what it was in es5 and we broke it for a bit and worked around with @@species
19:01
<keith_miller>
rickbutton: sure
19:01
<rickbutton>
thank you :)
19:02
<shu>
keith_miller: and to make sure i understand some more...
19:02
<shu>
keith_miller: the worst case here for tuples is _as many allocations_ as mutable objects
19:02
<shu>
not somehow inherently worse than mutable objects?
19:03
<shu>
i guess this is also a question for wsdferdksl
19:03
<shu>
i still don't fully understand his concern
19:03
<keith_miller>
shu: I'm not sure I understand your concern
19:03
<shu>
i have no concern yet
19:03
<keith_miller>
err clarification
19:03
<shu>
keith_miller: like, suppose we definitely cannot do any smart optimizations
19:04
<keith_miller>
It's just that when I do `foo.bar.baz = 1` on an object it doesn't do an allocation people don't think about the fact that the immutable thing will do allocations
19:04
<shu>
what will be the performance characteristic of records be? wouldn't it be the same as using mutable objects as if they were immutable??
19:04
<shu>
ah, i see, ok
19:04
<keith_miller>
Oh, I see what you're saying
19:04
<keith_miller>
yeah, it's the same
19:04
<shu>
didn't mean 2 question marks
19:05
<shu>
still working trigraphs out of my system
19:05
<keith_miller>
But it's just much harder to work with so people are unlikely to do it.
19:05
<shu>
right, i get your concern now
19:05
<keith_miller>
I'd just be sad if we add this feature then every linter in the world say "DON'T DO IT FOR PERF!!!!11!!"
19:06
<keith_miller>
it's gonna ruin your page load time
19:06
<keith_miller>
maybe that won't happen though...
19:06
<keith_miller>
It's more just something I'd like to consider
19:07
<jridgewell>
> `foo.bar.baz = 1`
19:07
<jridgewell>
Isn't it clear from `{ ...record, x: 1 }`'s syntax that it will be doing a clone?
19:07
<rickbutton>
I would also be sad if that is the case. I think it would be useful to find some examples of cases where this kind of thing is already happening, during the prez redux got mentioned, where deeply-nested "many allocations" with regular objects are common/expected.
19:08
<shu>
jridgewell: you'd think, but we were just talking yesterday about IIFEs being a suitable replacement for a do-block, despite the extra allocations
19:18
<rwaldron>
shu you may indeed be right, but I just want to make sure we don't miss any of the historic context
19:22
<shu>
rwaldron: +100
19:22
<devsnek>
shu: fwiw people who use products like datadog and sentry tracing and stuff all opt into the perf hit and seem fine with it
19:22
<devsnek>
(i still think these should be disabled by default)
19:22
<shu>
devsnek: sure, the point is we want it to be opt in
19:23
<shu>
devsnek: but last time the feedback was we don't know how to make the performance characteristic to be opt in
19:23
<devsnek>
got it, understand you now
19:23
<rwaldron>
mmarchini I think you just gave me a flash back to Domains
19:24
<mmarchini>
lol
19:24
<mmarchini>
sorry
19:24
<devsnek>
"flash back" i wish domains were in my past
19:24
<rwaldron>
That was the Zones issue, IIRC
19:24
<rwaldron>
right?
19:24
<bradleymeck>
rwaldron: zones were a 21 line wrapper around domains
19:24
<rwaldron>
Yep ^^^
19:24
bradleymeck
wiggles eyebrows
19:24
<rwaldron>
hahahahaha
19:24
<mmarchini>
LOL
19:24
<devsnek>
zones are a small wrapper around async hooks as well
19:26
<rwaldron>
This proposal makes me want to revive my "async blocks" syntax proposal
19:27
<rwaldron>
(I can't tell if I'm serious yet)
19:27
<jridgewell>
Async blocks?
19:27
<rwaldron>
yeah dog
19:27
<Bakkot>
rwaldron I mentioned `async do {}` in my do-exprs proposal
19:27
<rwaldron>
I knooooooowwwww
19:27
<shu>
i miss when people said dog
19:27
<rwaldron>
;)
19:28
<rwaldron>
Bakkot I was *thrilled*
19:28
<devsnek>
tracking the causality of async tasks bro
19:29
<rwaldron>
Gus, don't you mean "tracking the causality of async tasks dog"
19:30
<rkirsling>
not dawg though?
19:30
<rwaldron>
That works as well
19:30
<rwaldron>
Interchangeable
19:31
<rwaldron>
Bakkot jridgewell my old timey proposal was basically something that I came up with when Luke Hoban first started working on async functions
19:32
<ystartsev>
akirose: regarding announcments, would tomorrow morning work?
19:36
<leobalter>
robpalme I have to pause for another meeting, I won't be able to catch the Intl Enumeration discussion. Please let me know if anything else will be discussed today, if you have time to do it, of course :)
19:37
<devsnek>
i'm so confused about the stage 1 block
19:37
<rwaldron>
devsnek I've been confused by Stage 1 since forever
19:37
<devsnek>
isn't people agreeing this is a problem the exact stage 1
19:37
<devsnek>
requirement
19:37
<robpalme>
we have nothing else scheduled. this will take us to 6 minutes beyond the scheduled end.
19:37
<ljharb>
devsnek: stage 1 also means, we want to talk about it more in committee
19:37
<devsnek>
right
19:38
<ljharb>
devsnek: to me it sounds like the blocks mean "we are currently convinced there's nothing further to discuss"
19:39
<ryzokuken>
right, I always thought of a stage 1 block as "this is a non-starter. we don't even think this warrants attention."
19:39
<devsnek>
i don't think stage 1 requires exhaustively proving no solution will be found
19:39
<michaelficarra>
is there a reason we're skipping Intl.Segmenter for stage 3?
19:39
<michaelficarra>
we're not going to get to it today and it's not on the schedule for tomorrow
19:39
<ljharb>
devsnek: it generally requires convincing everyone that a solution *could* be found
19:39
<ljharb>
michaelficarra: it was added late, so it'd be done last
19:40
<michaelficarra>
since when?
19:40
<michaelficarra>
we do agenda items in order (modulo timing constraints)
19:40
<ljharb>
that's true
19:40
<ljharb>
i'm not really sure
19:40
<ljharb>
it came up on monday and the chairs suggested it going later
19:40
<michaelficarra>
being added late only changes whether we think it's justifiable to reject based on timing alone
19:40
<ljharb>
agreed
19:41
<michaelficarra>
oh it was added after we agreed to the agenda?
19:41
<rbuckton>
michaelficarra: are you looking at the draft schedule or TCQ?
19:41
<ljharb>
michaelficarra: no https://github.com/tc39/agendas/commit/ec18f27dce69959586ad5f205bfb00b690201d26#diff-3441294351e2ad1cc9682d5d1eafb082
19:41
<rbuckton>
In the draft schedule Intl.Segmenter is listed as Overflow
19:41
<michaelficarra>
oh then we should definitely prioritise it ahead of stage 0 things
19:42
<ljharb>
but michaelficarra is right; being added late is not supposed to mean they get bumped to the end
19:42
<ljharb>
akirose et al? ^
19:42
<rickbutton>
it's on the draft agenda twice, once under overflow, once under "items added after deadline"
19:42
<keith_miller>
I could see an argument for bumping it FWIW, not that I care that much one way or the other
19:42
<ystartsev>
michaelficarra: i think this was a response to how packed the agenda and there was a question asked to the room if things that missed the deadline should be deprioritized, and the answer was yes
19:43
<ystartsev>
since it was added late, this is grounds for not allowing it to move forward due to a technicality, and it might not be a good use of time
19:45
<michaelficarra>
we could ask if anyone feels it should be skipped for this reason before starting, but I don't think it's appropriate to assume that it would not be a good use of our time
19:45
<sffc>
I would like Intl.Segmenter to be prioritized if possible
19:46
<sffc>
Chrome is getting ready to ship it
19:46
<sffc>
But it would be awkward to ship a Stage 2 proposal
19:46
<sffc>
It's been ready for Stage 3 for a few months, but it just never got added to the agenda
19:46
<rickbutton>
will it truly take 30 minutes? could consider slipping it in as a smaller timeslot
19:46
<ystartsev>
could it be shorter?
19:47
<ystartsev>
it already got the ok from zibi so we are fine with it
19:47
<ystartsev>
the problem is it was added to the agenda after the deadline, so the team didn't review it
19:47
<ystartsev>
and i don't want that to become acceptable practice.
19:47
<sffc>
We could timebox it for 10-15 minutes, and attempt for Stage 2
19:47
<ystartsev>
that deadline for advancement is really important
19:48
<sffc>
I agree about the deadline being important
19:48
<sffc>
attempt for *Stage 3*
19:48
<ystartsev>
chrome is preparing to ship it, that is a little strange for stage 2 no?
19:49
<sffc>
I mean, it's implemented, but I think Frank won't flip the bit until it gets to Stage 3 at TC39
19:50
<ystartsev>
i have to say i am not comfortable with having something shoe horned in. we are lucky that zibi had been working on this so much so we are already invested
19:50
<ystartsev>
that isn't true for all delegates
19:50
<ystartsev>
just because something is ready for stage 3 for a long time doesn't necessarily mean people have checked it for review
19:50
<michaelficarra>
ystartsev: if that is the case, you are completely justified in rejecting advancement
19:50
<ystartsev>
that said, overall, we don't have an issue
19:50
<michaelficarra>
I don't want you to feel pressured
19:51
<rkirsling>
I agree the principle may be more important here, even if the thing is totally uncontroversial
19:51
<rkirsling>
(i.e. I'd actually like to see it advance now rather than later but I'd prioritize the principle)
19:53
<ljharb>
there's plenty of things we discuss that aren't up for advancement
19:53
<ystartsev>
yeah ... it was added on thursday last week which only gives 1 full day for review
19:53
<ljharb>
even if advancement is off the table due to not enough review time, discussing the item could still be valuable
19:53
<ystartsev>
we could discuss it, but would that be a good use of time if it doesn't advance?
19:53
<Bakkot>
fwiw I am totally on board with the chairs making that kind of call
19:54
<ystartsev>
same
19:54
<ljharb>
that's really up to the champions i'd think? as i said above, tons of things are worth the time even when they don't request advancement.
19:54
<ljharb>
if advancement is the main criteria, then we shouldn't have any items that aren't advancement requests
19:54
<ljharb>
i think it's appropriate to leave it up to the chairs when it means the difference between completing the agenda or not
19:55
<ljharb>
but the intention when adding that deadline was to not obstruct people's ability to add discussions even at the last minute
19:55
<Bakkot>
I'd support changing the agenda rules to say that anything added after the advancement deadline is deprioritized even if it isn't looking to advance, absent some particular reason it is time-sensitive
19:55
<ljharb>
iow, it's not to prevent the need for someone to block based on the deadline; it's to make that blocking low-cost
19:55
<Bakkot>
we also review the agenda after the deadline to make sure we know what we think about all of the topics on the agenda
19:55
<jridgewell>
wsdferdksl: https://github.com/bslassey/privacy-budget
19:55
<ljharb>
Bakkot: if we got consensus on that (like we did on the original deadline) then that seems fine to me too
19:55
<Bakkot>
and we don't have that for things added after the deadline
19:56
<ystartsev>
we do the same as bakkot
19:56
<ljharb>
understood, and while review's always helpful, and for some is critical to permit advancement, that doesn't mean that lack of review should block the discussion
19:57
<ljharb>
stage 1-seeking proposals don't even have to provide materials
19:57
<rkirsling>
but they should >_<
19:57
<Bakkot>
ljharb ehhhhhhhhh
19:57
<rkirsling>
did we not finish that discussion?
19:57
<Bakkot>
I think it should deprioritize the discussion
19:57
<ljharb>
sure. and "should", but not "must", was an explicitly chosen difference.
19:57
<ystartsev>
they do now? they require a proposal
19:57
<rkirsling>
there was a thread
19:57
<littledan>
I think browser TC39 representatives have been monitoring browser fingerprinting concerns; at least that's been the case in ECMA-402
19:57
<rkirsling>
yeah I know we had a full PR...
19:57
<ljharb>
ystartsev: yes we changed it recently to "Such proposals must link to a proposal repository and they should link to supporting materials when possible."
19:57
<ljharb>
but i don't have to have anything in the repo
19:58
<rkirsling>
https://github.com/tc39/process-document/pull/26
19:58
<ystartsev>
ok but we are getting into a digression
19:58
<michaelficarra>
Bakkot: I would prefer we continue to prioritise by stage, regardless of when the item was added or whether it is looking for advancement, so that we continue to make progress on reducing our in-progress work
19:58
<ljharb>
ah true, that requires the repo "capture the above requirements"
19:58
<ljharb>
sorry for the digression
19:58
<Bakkot>
michaelficarra except it is difficult to make progress on things when there isn't time for people to review htem
19:59
<ljharb>
sometimes difficult. and not impossible.
19:59
<ljharb>
and that seems like something the champions should be able to judge?
19:59
<michaelficarra>
maybe not as productive as they could have been, but I doubt the champion would bring it forward if they didn't think it could be useful
20:21
<bradleymeck>
hallway track definitely keeps cutting off audio, anyone else seeing that
20:22
<rickbutton>
not happening for me
20:42
<rkirsling>
oof, so much for 26 C; it's now 33
21:32
<shu>
ljharb: i confirmed internally with some folks that the 'type' attribute should suffice for the web use cases currently
21:32
<ljharb>
shu: awesome, great to hear!
21:32
<shu>
ljharb: (of course, the formulation where it's up to the host to process the value)
21:32
<shu>
the value of the 'type' key
21:32
<ljharb>
yes, agreed
21:35
<shu>
while we disagree on the signals that ecma262 do or should send, i believe we understand each other, and i'm more than happy to move forward with the check-style only restriction
21:41
<bradleymeck>
i did realize i have one evaluator i want somewhat badly, `wrapToAvoidThenable=true`
21:42
<ljharb>
bradleymeck: that seems like it only applies to dynamic import, and would be the same Module object, it just would wrap it in a container. not just a "check" to be sure, but i'm not sure that qualifies as an evaluator either
21:43
<bradleymeck>
import.wrapped() would be fine to me
21:53
<shu>
big oof @ thenables
21:54
<gibson042>
ystartsev: the spec hasn't changed since team review from last time when the Mozilla objection was withdrawn
21:55
<gibson042>
but I realized that Intl.Segmenter stage 3 official review #2 is still pending and so advancement will/would be conditional upon that anyway. But there is an important issue to discuss that stretches beyond this specific proposal and should be discussed if there's time: https://docs.google.com/presentation/d/1Pe9eVhgK93cgB3KCufTQvzqCjIYj3RRxJaOeNIbWN_A/edit#slide=id.g87b4869bad_0_0
21:56
<gibson042>
I'm willing to defer because I did miss the deadline, but fwiw the requirement is "must be added (and noted as such) *along with the necessary materials* prior to the deadline", and every meeting there are always tons of slides and spec text slipping in to an otherwise empty placeholder slot after the deadline
23:51
<rkirsling>
wow, it could've been called @@copyConstructor, huh
23:52
<rkirsling>
that would've been way less "I have zero idea what this word will be used to mean"-inducing than @@species :p