00:00
<rkirsling>
whaa
00:00
<devsnek>
oh wait it didn't
00:00
<devsnek>
i lied
00:00
<rbuckton>
ES logical-ish operators work on boolean-ish values like truthy and falsy.
00:00
<devsnek>
i was accidentally looking at bitwise ops
00:00
<rkirsling>
yeah phew
00:01
<ljharb>
rbuckton: some value selection operators pivot on truthiness. `??` is a value selection operator that pivots on nullishness.
00:01
<rkirsling>
rbuckton: yeah my point is to be really diligent about not mixing "truthy" and "nullish" terminology willy-nilly
00:01
<ljharb>
neither are logical.
00:01
<ljharb>
rkirsling: lol
00:01
<howdoi>
6 years ago https://usercontent.irccloud-cdn.com/file/uZGwDHvC/sc
00:01
<rbuckton>
ljharb: A few meetings ago there was a (possibly joking) proposal to introduce strict-logical operators `|||` and `&&&`
00:01
<rkirsling>
ljharb: :high-five:
00:02
<ljharb>
rbuckton: lol yes, and those would be logical
00:02
<howdoi>
https://esdiscuss.org/topic/shorthand-notation-for-attribute-creation
00:02
<devsnek>
"object creation" good orthogonality
00:02
<devsnek>
s/object/attribute/
00:03
<howdoi>
true that
00:06
<ystartsev>
rbuckton: omg
00:09
<devsnek>
if we go with the one where it doesn't call set
00:10
<devsnek>
does it block exceptions
00:10
<devsnek>
like `thisDoesNotExist ||= false`
00:10
<Bakkot>
michaelficarra by "in this proposal" do you mean the short-circuiting variant?
00:10
<michaelficarra>
yes
00:10
<rbuckton>
devsnek: if `thisDoesNotExist` is not defined, it would throw on the attempt to read the binding.
00:10
<devsnek>
oh true
00:10
<devsnek>
lol
00:10
<akirose>
haxjs: do you want to do one of your topics after the break (in about 20-30 minutes)?
00:11
<howdoi>
2001!
00:11
<Bakkot>
I have notes in my closet about adding class fields dating back to 1999
00:11
<rbuckton>
sffc: optional chaining doesn't permit assignment.
00:12
<rbuckton>
(as much as I would rather it did).
00:12
<howdoi>
Bakkot: wow!
00:13
<ystartsev>
sffc: optional chaining disallows assignment atm
00:21
<rbuckton>
That `a?.setValue(b)` works but `a?.value = b` doesn't is unfortunate to me.
00:21
<devsnek>
seems reasonable to me
00:21
<Bakkot>
yeah I am really happy that doesn't work
00:23
<robpalme>
breaking until 14:33 (10 mins)
00:27
<brad4d>
kiwi IRC keeps dropping my connection - what linux clients are folks using?
00:28
<akirose>
irssi
00:28
<akirose>
irssi running in tmux is what i used to use on linux
00:28
<akirose>
err no it was running in screen
00:29
<akirose>
i fell in love with tmux only in the past 5 or 10 years
00:39
<devsnek>
hearing "filter in" confuses me
00:39
<rkirsling>
^
00:39
<rbuckton>
Do any existing languages use `filterOut`? Scala and Kotlin use `filterNot`
00:39
<devsnek>
if you start with "filter out" then "filter in" makes sense
00:39
<devsnek>
but the other way around makes my brain not understand
00:39
<rkirsling>
I don't like `filterOut` because "filter in" is not an English phrase
00:39
<rkirsling>
but `filterWithout` might be not unthinkable?
00:39
<michaelficarra>
brad4d: I use empathy typically, but it's not working here due to blocked ports
00:39
<rbuckton>
I like `filterNot` because the semantics and name have precedence in other languages.
00:40
<michaelficarra>
so for now I'm using the freenode webchat
00:40
<rkirsling>
rbuckton: ditto but Justin doesn't like it
00:40
<rbuckton>
I would argue for prior art as it helps developers of multiple languages make sense of the feature.
00:41
<devsnek>
removeIfCallbackReturnsTrue
00:41
<devsnek>
actually
00:41
<devsnek>
remove and keep
00:41
<devsnek>
πŸ‘€
00:42
<rbuckton>
`.excludeIf` :/
00:42
<devsnek>
i don't like having "if" in the name
00:42
<devsnek>
removeIf and keepIf work though
00:42
<ljharb>
`.omit`, if we're not calling it filter something?
00:42
<rbuckton>
Me either.
00:42
<devsnek>
exclude is also a negative which is not ideal
00:42
<rbuckton>
`.omit` is interesting.
00:43
<devsnek>
omit and emit
00:43
<rbuckton>
devsnek: `exclude` is also the opposite of `include`, which is already used for a different meaning on arrays (i.e. ,`.includes(value)`)
00:43
<rbuckton>
devsnek: That'll just be another `wake` and `wait` problem.
00:43
<devsnek>
rbuckton: yeah i being facetious
00:43
<michaelficarra>
`Function.prototype.not = function() { let self = this; return function() { return !self.apply(this, arguments); }; };`
00:44
<devsnek>
oh no
00:44
<michaelficarra>
oh yes
00:44
<rbuckton>
oh the overhead
00:44
<rkirsling>
oh the humanity
00:44
<rkirsling>
(sorry)
00:44
<devsnek>
bindInverse
00:45
<rkirsling>
I think I'd support `.omit`
00:45
<devsnek>
omit is good
00:45
<devsnek>
assuming its the opposite of what filter does
00:45
<michaelficarra>
`reject` is fine
00:45
<devsnek>
i don't know what it does
00:45
<devsnek>
off the top of my head
00:45
<michaelficarra>
also I still kinda prefer groupBy/partition, we can kill two birds with one stone
00:45
<rbuckton>
I dislike `reject` because of possible `Promise.reject`confusion. I like `filterNot`, but `omit` isn't terrible.
00:46
<rbuckton>
I'd love `groupBy`
00:46
<rkirsling>
yeah I think the Promise.reject concern is legitimate too
00:46
<devsnek>
as in
00:46
<devsnek>
partition into two groups
00:46
<devsnek>
keep one?
00:46
<rbuckton>
Then again, my iterable-quer package has `groupBy`, so I'm biased.
00:46
<rbuckton>
*query
00:46
<michaelficarra>
devsnek: yeah, a special-cased groupBy
00:47
<devsnek>
why not just sort and slice
00:47
<devsnek>
:)
00:47
<michaelficarra>
justin has argued against groupBy/partition because of the perceived overhead from returning a container and taking out the bit you care about
00:48
<devsnek>
i wouldn't use partition to filter
00:48
<devsnek>
if it were a thing
00:48
<michaelficarra>
but I don't think we should really care about the wrappers that often don't actually have to be realised
00:48
<devsnek>
i'd use it to partition
00:48
<rbuckton>
Yeah, if you don't want the `false` values, `partition` would have unnecessary overhead since it would produce both sides of the condition.
00:49
<michaelficarra>
rbuckton: not necessarily though
00:50
<michaelficarra>
when you pull the thruthy result out immediately and the falsey result is unobservable, the engine doesn't need to realise it
00:51
<michaelficarra>
this kind of optimisation (the same we discussed earlier with Object.iterateKeys) seems fairly straightforward to me
00:51
<devsnek>
lot of overhead for non-jit impls
00:51
<devsnek>
especially in embedded case
00:51
<devsnek>
where memory is tight
00:51
<michaelficarra>
non-jit impls are dog slow ayway, who cares?
00:51
<michaelficarra>
*anyway
00:51
<devsnek>
performance isn't the only concern
00:52
<devsnek>
if you only have 64k of ram you can't be wasting it on unused arrays
00:52
<rbuckton>
Yeah. Even in a jit impl, you still need to hold onto all of the memory *just in case* the calling code requests it.
00:52
<michaelficarra>
rbuckton: there's no "just in case" when you can prove there's no way to observe it
00:53
<devsnek>
it may not always be as simple as partition(xyz)[0]
00:54
<devsnek>
my point was basically just "jit will make it usable" is not a great choice imo
00:54
<devsnek>
don't want to get too into the weeds of how things jit
00:54
<jridgewell>
`filterNot` only works as a name if you understand what `filter` does
00:54
<rbuckton>
Also depends on engine implementers actually implementing the optimization, which could take time depending on their backlog and other work.
00:55
<jridgewell>
The "not" doesn't imply what's happening
00:55
<michaelficarra>
🀷 you don't even need a JIT, keith_miller was saying it could probably be done at the interpreter level
00:55
<michaelficarra>
and I agree
00:55
<jridgewell>
It's simply inverting `filter`, which is my problem, I can't remember what `filter` does.
00:55
<rbuckton>
jridgewell: You said your self, every language that uses `filter` has the same semantics as JS, so it seems fairly obvious what `filterNot` would mean to those developers.
00:55
<devsnek>
interpreter is one of the stages of jit
00:55
<michaelficarra>
jridgewell: I think that regardless of what comes of this proposal, you're going to start remembering what filter does now
00:55
<michaelficarra>
problem solved
00:55
<devsnek>
(i assume no implementations are doing AST walks?)
00:56
<jridgewell>
Every language is wrong. πŸ˜›
00:56
<devsnek>
(aside from engine262)
00:56
<devsnek>
i actually do know what splice does now
00:58
<devsnek>
michaelficarra: the point is that we shouldn't rely on engines performing optimizations to js code
00:58
<devsnek>
like something that walks over an ast tree is a valid (but slow) implementation
00:58
<michaelficarra>
I think we can't make performance-based justifications in the absence of information about performance optimisations
00:59
<rkirsling>
I think that just means we shouldn't make perf-based justifications for this?
01:02
<rbuckton>
Aside from perf discussions, it's a high bar to expect developers to reason that the opposite of `filter` is `partition(...)[0]` or `partition(...)[1]`, as they'd likely need to review documentation on `partition` to know which array was which.
01:03
<rkirsling>
yeah I don't really think those conversations should be merged
01:03
<michaelficarra>
rbuckton: who said array?
01:03
<michaelficarra>
`partition(...).true`
01:04
<michaelficarra>
`groupBy(...).true`
01:04
<michaelficarra>
same thing
01:04
<rbuckton>
I'd like `filterNot` (whatever it is named) for perf-critical scenarios, as there are a lot of *positive* filter callbacks out there (like `isString`, etc.), but you rarely see an `isNotString`, so you end up with a lot of `.filter(x => !isString(x))`, which produces more overhead than a `.filterNot(isString)`.
01:05
<rkirsling>
rbuckton: I mean you could reasonably expect that it would *eventually* lead to better perf but it wouldn't be a spec conformance req
01:05
<rbuckton>
michaelficarra: Definitely wouldn't use `groupBy` like that (i'd expect to be able to group by other keys besides booleans that may not have a reliable `toString` implementation). `partition` maybe, since all the `partition` implementations I've seen only split on boolean.
01:06
<littledan>
we've discussed the rationale for BigInt's JSON semantics at length in TC39; I'd be happy to follow up with anyone offline for background here
01:16
<michaelficarra>
why hasn't there been as much screaming about not being able to round trip undefined values?
01:16
<ystartsev>
ok folks, im out
01:17
<michaelficarra>
ECMAScript distinguishes null from undefined pretty consistently, for better or worse
01:17
<ystartsev>
ill be back in the morning
01:17
<ljharb>
michaelficarra: i assume because most languages don't have two nil values
01:17
<jridgewell>
πŸ‘‹
01:17
<michaelficarra>
but in JSON we just convert to null and call it a day
01:17
<rkirsling>
πŸ‘‹
01:17
<michaelficarra>
ljharb: but we are ECMAScript
01:17
<jridgewell>
michaelficarra: I've actually written code that depends on undefined not being round-tripped for security
01:18
<michaelficarra>
jridgewell: the question is why do people care so much about round-tripping of BigInt but not undefined?
01:18
<ljharb>
because undefined is one value, and it's not that useful to know it's there, but bigint represents infinite values
01:19
<michaelficarra>
ljharb: finite but very many
01:20
<ljharb>
sure
01:20
<apaprocki>
we get questions for NaN all the time
01:20
<michaelficarra>
infinite strings of characters are not valid JSON I believe
01:20
<ljharb>
a great many, then, the point stands
01:20
<michaelficarra>
apaprocki: same thing!
01:21
<bterlson>
wait, did ecma404 add a size limit??
01:22
<michaelficarra>
bterlson: not a finite one, no
01:22
<devsnek>
lol
01:23
<devsnek>
ljharb: they have infinite precision but can only represent finite numbers
01:24
<apaprocki>
philosophical question.. does a string of infinite length have a trailing "?
01:24
<Bakkot>
"arbitrarily many"
01:24
<Bakkot>
apaprocki mu
01:25
<devsnek>
infinity+1
01:25
<Bakkot>
oh this is the wrong channel again
01:25
<michaelficarra>
as the meeting goes on, #tdz slowly merges with #tc39-delegates
01:26
<akirose>
every time
01:28
<rkirsling>
truly every time
01:28
<rkirsling>
this doesn't bode well for tomorrow
01:35
<littledan>
from remote I can hear Ron very well
01:35
<littledan>
Brian also talked
01:35
<littledan>
he's talking now
01:35
<Bakkot>
thanks littledan
01:35
<Bakkot>
our speaker is quiet for some reason
01:35
<Bakkot>
trying to fix it
01:35
<Bakkot>
fixed!
01:38
<littledan>
the comment about methods on each TypedArray prototype seems misplaced: the built-in methods are on the shared superclass
01:42
<cmorningstar>
michaelficarra an infinite string of characters *might* be valid JSON, but it's too soon to tell.
01:43
<michaelficarra>
I guess we'll just agree that it both is and isn't for now
01:46
<devsnek>
we are not using webidl
01:46
<devsnek>
in node core
01:46
<devsnek>
MylesBorins:
01:47
<shu>
SDO = standards development body btw
01:49
<rkirsling>
"org" you mean?
01:50
<bterlson>
SDO = Software Documentation Outhouse
01:50
<akirose>
pedant 😝
01:50
<bterlson>
wrong channel sorry
01:50
<littledan>
devsnek: Well, you might benefit in terms of spec compliance if you used a generator, and tests based on idlharness.js
01:50
<littledan>
my coworker Joyee has been working on applying this in Node.js Core, for existing APIs
01:51
<rkirsling>
akirose: oh sorry, I was actually making sure myself >_<
01:51
<devsnek>
littledan: yeah not saying we shouldn't
01:51
<devsnek>
just that we currently don't
01:51
<devsnek>
i love what jsdom does
01:51
<littledan>
oh right of course you know about this already, sorry for being redundant
01:51
<littledan>
my understanding was that WebCrypto in Node Core was pretty early
01:52
<devsnek>
currently separate repo https://github.com/nodejs/webcrypto
01:55
<michaelficarra>
we LITERALLY define subtraction by normative reference to another spec!
01:55
<michaelficarra>
what is this example?!
01:55
<Bakkot>
amazing
01:55
<michaelficarra>
same with Intl and the Unicode data sets
01:59
littledan
holds self back from clarifying, again, that we don't reference CLDR or ICU
01:59
<littledan>
oh, I guess I didn't do that right
01:59
<littledan>
(we do reference the Unicode Character Database)
02:02
<michaelficarra>
😜
02:03
<littledan>
that comment in the WebCrypto repo was made by a W3C staffer. It's not clear how this relates to other W3C participants think.
02:04
<littledan>
and it's not clear what's meant by referencing the definition: should it observably call it, as we're talking about UUID doing?
02:04
<littledan>
https://github.com/w3c/webcrypto/issues/227
02:04
<Bakkot>
littledan oh, ok. he has the commit bit on the repo so I assumed he was the maintainer for these purposes
02:07
<littledan>
the W3C often performs useful functions in terms of releasing specifications and helping with broad review, so commit bits are not surprisng
02:07
<ljharb>
rbuckton: please lmk when you've renamed the proposal/repo, and i'll update the proposals repo
02:07
<rbuckton>
Sure.
02:08
<Bakkot>
littledan is there way to answer the question of what other W3C participants think?
02:09
<littledan>
Bakkot: Yeah, maybe you could reconvene the WebCrypto WG, whose charter expired? :)
02:09
<Bakkot>
uh
02:09
<Bakkot>
would prefer to not do that
02:09
<Bakkot>
Would reconvening be necessary if it's just a matter of shuffling which things are in which spec?
02:12
<littledan>
maybe starting with an email to the person who filed that issue (who's been landing things), the person listed as editor, and the other person landing things over the past year?
02:13
<littledan>
there's an interesting question of whether we care about a new standard being released, or whether it'd be enough to get an update into the editor's draft
02:14
<littledan>
long-brewing W3C work would enable just updating the editor's draft and not worrying. Lots of people just update the draft and are happy, even in the absence of this procedure.
02:16
<littledan>
Bakkot: Are we talking about an observable change, or just an editorial one?
02:17
<Bakkot>
littledan it sounds like Shu would not want changes where were observable from the perspective of web developers
02:21
<littledan>
Bakkot: Are you suggesting that we have two API entrypoints that reference the same internal algorithm, which is the CSRNG?
02:21
<ljharb>
that'd be the typical way these things are done; but i assume it's easier to virtualize if there's one, not two entry points that need replacing
02:22
<Bakkot>
littledan I am suggesting ECMA262 requires hosts to have a global named `crypto` which is required to have a property named `getRandomValues` which is specified to do exactly the thing the W3C crypto.getRandomValues does right now
02:22
<littledan>
oh, I see
02:22
<Bakkot>
possibly first make the observable change which would allow you to invoke it without `crypto` being the receiver, which is dumb
02:23
<jridgewell>
Wouldn't they be more annoyed that we "claimed" their object?
02:23
<littledan>
this would be slightly complicated to do unobservably--crypto.getRandomValues follows WebIDL, not ECMA-262, conventions. But it sounds possible to me. I'm not sure if the committee might have additional requirements (like this weakening you're suggesting)
02:23
<jridgewell>
`crypto` is a Web object
02:24
<rbuckton>
Bakkot: does it today? Unless its a WebIDL thing, I don't see anything in the spec text that enforces that.
02:24
<Bakkot>
rbuckton it is a webidl thing
02:24
<Bakkot>
jridgewell well, we'd have to ask
02:24
<Bakkot>
I would hope not
02:24
<devsnek>
it wouldn't be the first time a spec left w3c
02:25
<rbuckton>
My concern is that if ECMAScript ships a global `crypto` object, how would the crypto API make that a `Crypto` object (which also has a `subtle` property for `SubtleCrypto`)? Would we have to specify the prototype is "host defined"?
02:26
<littledan>
Bakkot: so, I'd lay that option out clearly in the issue, and then ping the people who have been landing patches and who maintain implementations
02:26
<ljharb>
rbuckton: it'd probably have to ship a CryptoPrototype, so that there was a place for the web to stick stuff on
02:26
<rbuckton>
Or would the host just augment a theoretical `%cryptoprototype%`?
02:26
<ljharb>
^ that
02:26
<Bakkot>
yeah that
02:26
<rbuckton>
There's a possible web-compat problem though.
02:27
<Bakkot>
Is there?
02:27
<littledan>
WebIDL is specified in terms of stuff that ES exposes
02:27
<littledan>
we could do just the same things, and make the change unobservable
02:27
<rbuckton>
Yeah, code that might feature test for `crypto` vs `require("crypto")`.
02:27
<littledan>
or, we could decide that we don't like the looks of it and it must change
02:27
<Bakkot>
littledan right, I meant, I want to be able to do `(0, crypto.getRandomValues)()` and have that work
02:27
<Bakkot>
this was more of an aside
02:27
<ljharb>
rbuckton: true, but that kind of code would break with any new global
02:27
<rbuckton>
https://github.com/rbuckton/reflect-metadata/blob/master/Reflect.js#L1099
02:28
<littledan>
rbuckton: Sounds like you're talking about a Node-compat problem? But then the WebCrypto-in-Node effort faces that anyway
02:28
<ljharb>
rbuckton: that wouldn't break, that'd just start working better once the global appeared
02:28
<Bakkot>
rbuckton that isn't web compate, it's node compat, right?
02:28
<rbuckton>
Then again, that wouldn't break because it *does* use `getRandomValues`, but there could be others.
02:28
<littledan>
anyway there could be ecosystem compat problems due partial implementations, yes
02:28
<ljharb>
if node suddenly added a matching `crypto`, then your code Just Works
02:29
<wsdferdksl>
rbuckton: I get a 404 on this link from the proposal: https://rbuckton.github.io/proposal-arraybuffer-fillrandom
02:29
<ljharb>
and if the code needs `crypto.foo` and isn't checking for the presence of `crypto.foo` then it's brittle anyways
02:29
<rbuckton>
wsdferdksl: I just transferred it to tc39-transfer
02:29
<littledan>
Bakkot: Right, I'm pretty worried that there are several different things that are different about WebIDL from TC39's work, and making the change unobservable would be controversial for us
02:29
<rbuckton>
Ah, there's no spec text generated yet.
02:29
<littledan>
I'd really prefer that, if we do port it, that we don't make these changes
02:29
<Bakkot>
littledan yeah, it would be a two-step thing
02:30
<Bakkot>
ideally get them to change, and then port it
02:30
<littledan>
remember, TC39's changes to TypedArrays still aren't ecosystem reality
02:30
<Bakkot>
but alternatively just don't worry about it
02:30
<rbuckton>
Rather, there's no ecmarkup generated spec text yet.
02:30
<littledan>
some of them are, some of them aren't
02:30
<Bakkot>
and do the thing W3C says
02:30
<ljharb>
wsdferdksl: https://tc39-transfer.github.io/proposal-csprng/
02:30
<ljharb>
wsdferdksl: the url will change again tho once a chair (akirose robpalme MylesBorins bterlson) bounces it into the tc39 org
02:30
<akirose>
on it
02:31
<ljharb>
oh lol the spec is empty anyways
02:31
<ljharb>
akirose: ty
02:31
<rbuckton>
There's nothing in there right now though. All of the current spec text exists in the explainer.
02:31
<Bakkot>
littledan: fwiw the change I want to crypto.getRandomValues is just making a non-error into an error, so I am almost certain is web compat
02:31
<rbuckton>
I'll clean that up once the transfer process has completed.
02:32
<wsdferdksl>
The links towards the end point to the rbuckton.github.io version.
02:32
<michaelficarra>
Bakkot: you mean the other way around?
02:32
<rbuckton>
I can fix that too. Its surprising GH doesn't auto-forward those like it does for other URLs related to a transfer.
02:32
<Bakkot>
michaelficarra uh yeah that
02:33
<littledan>
Bakkot: There's also a question of how much extra work it will be to go and weaken this. And if you look at everything, I bet you'll come up with more changes you feel like making
02:33
<littledan>
*work in implementations
02:34
<ljharb>
rbuckton: unfortunately there's no easy way to forward both
02:34
<Bakkot>
littledan I have looked at everything and that is the only change I think is worth making
02:34
<ljharb>
rbuckton: if you ever make a new repo with the same name as an old name, it breaks the repo redirects
02:35
<rbuckton>
ljharb: There wasn't anything substantive in there anyways, so I'll adjust the URL once the transfer finishes.
02:39
<ljharb>
kk
02:40
<sffc>
I also added one more 30-min timebox to the end of the agenda of we have time tomorrow
02:42
<michaelficarra>
sffc: I think we should add agenda items in the appropriate order, regardless of whether they were added late
02:42
<robpalme>
sffc: we currently have 3hrs 50mins of content to fit into a 5 hour window. so we will probably have time to add your 30min topic
02:42
<michaelficarra>
leave it to the chairs to prioritise
02:44
<rbuckton>
I've just redirected the spec link to the #todo section for now.
02:44
<shu>
slides seem pretty slow to advance
02:44
<jridgewell>
Dan is always super laggy on calls.
02:45
<michaelficarra>
I think littledan just always has some delay
02:47
<littledan>
sorry! were you able to understand me anyway?
02:48
<littledan>
I'm not sure how to remove the delay?
02:48
<jridgewell>
It was only the slides
02:49
<jridgewell>
So your audio seemed fine
02:49
<jridgewell>
But you were talking about something before we could see the slide you were discussing
02:49
<Bakkot>
keith_miller https://tc39.es/proposal-weakrefs/#sec-liveness
02:49
<Bakkot>
"WeakRef.prototype.deref being called on a WeakRef whose referent is obj"
02:49
<littledan>
oh, well, you know, the slides are linked from the agenda
02:54
<Bakkot>
shu I am pretty sure the liveness definition doesn't do what you want: if you have `a = {}; b = { a }; a.b = b;` and then WeakRefs to both `a` and `b`, and you lose access to both `a` and `b` but keep access to both WeakRefs, then `a` and `b` are still live, which seems bad
03:59
<rbuckton>
shu: I put up a draft PR to explore the possibility of devising a web-compatible `crypto` global in place of `ArrayBuffer.fillRandom`: https://github.com/tc39-transfer/proposal-csprng/pull/2
04:00
<shu>
thank you
19:40
<gibson042>
michaelficarra:
19:40
<gibson042>
$ eshost -se 'Object.keys({[2**32+3]:true, [2**32+2]:true, [2**32+1]:true, [2**32]:true, [2**32-1]:true, [2**32-2]:true, [2**32-3]:true}).map(n => n-2**32)'
19:40
<gibson042>
#### Chakra, JavaScriptCore, SpiderMonkey, V8, XS
19:40
<gibson042>
-3,-2,3,2,1,0,-1
20:01
<littledan>
note, it was possible to hear Yulia from remote
20:02
<brad4d>
in the room we have to turn on a microphone next to a zoom speaker to hear remote folks :)
20:02
<brad4d>
now fixed
20:06
<littledan>
note, I'd be happy to do this for all of my presentations as well, I'm just not sure how to set it up
20:06
<devsnek>
recordin?
20:06
<devsnek>
g
20:06
<littledan>
yes
20:06
<littledan>
it's a good idea to help share information around
20:06
<devsnek>
if you happen to be zooming you can use zoom
20:06
<devsnek>
otherwise obs works well
20:07
<littledan>
maybe the committee could help facilitate this recording too, and storing and presenting the uploaded videos
20:12
<bterlson>
I made this thing using Moddable's stuff: https://twitter.com/bterlson/status/1219461543647039490. This keyboard firmware will allow (safe) extensions too thanks to this SES stuff.
20:12
<bterlson>
https://gist.github.com/bterlson/c615924c7ef7bb5d45908cdb6417c3be is a code dump from a few weeks ago
20:13
<michaelficarra>
what non-static scoping is Mark referring to here?
20:13
<michaelficarra>
I assumed it was globals
20:23
<gibson042>
I like the Caridy's vocabulary from https://docs.google.com/presentation/d/1pkxAvJQvL-DeiygPFfs4ecdV39Cfv8cBe-zAfunhp5A/edit#slide=id.g75cbab44da_0_106 : "Primordials are the subset of Intrinsics that are reachable by ECMAScript source text"
20:30
<MylesBorins>
littledan: I can make sure that it is recording
20:30
<MylesBorins>
module attributes or do you have another presentation?
20:31
<littledan>
MylesBorins: I'd be happy with this; I probably should've recorded the decimal one
20:34
<michaelficarra>
for those with difficulty with colours, the MR items are all green, the first CMR item is blue and the rest are red, and the first 3 items of the STMR are blue, the last is red
21:00
<devsnek>
how does importSync work
21:00
<devsnek>
that doesn't make sense to me
21:09
<michaelficarra>
devsnek: different questions
21:09
<michaelficarra>
nobody answered you because you asked how it works
21:09
<michaelficarra>
not whether he described how it works
21:09
<devsnek>
oh fair point
21:11
<michaelficarra>
https://i.imgflip.com/3oev83.jpg
21:11
<littledan>
I guess importSync makes sense if modules are provided by a static map. It seems unfortunate to lose the dynamic case, but I can understand that, for some environments, it doesn't make sense
21:11
<littledan>
so I guess importSync would be unavailable if you provide a host hook for modules rather than the module map
21:11
<littledan>
(?)
21:12
<devsnek>
🀷🏻
21:13
<michaelficarra>
I needed this for a time elapsed/remaining display on effectively a video player we were making, just last week
21:13
<littledan>
this presentation is great
21:13
<littledan>
concreteness is really good
21:13
<michaelficarra>
littledan: agreed, I love seeing a variety of justifications up front
21:14
<michaelficarra>
needs an Oxford comma option though
21:14
<michaelficarra>
(or just include it always, fine by me)
21:14
<ljharb>
+1
21:14
<mmarchini>
formatting time duration is a pain on every language I had to do it so far
21:15
<mmarchini>
would love to see it improved on JS
21:16
<sffc>
jridgewell: yes, I think that's a typo
21:24
<michaelficarra>
oh man I'm going to miss the desk mics so much when we don't have them
21:35
<rbuckton>
There's an unfortunate web-compat issue I need to work out for CSPRNG if we intend to bring in part of WebCrypto: https://github.com/tc39/proposal-csprng/issues/5
21:35
<rbuckton>
Basically, WebCrypto throws `TypeMismatchError` and `QuotaExceededError`, but my current spec text just reuses `TypeError` and `RangeError`. It wasn't a web-compat issue when the API was attached to `ArrayBuffer` (because it wouldn't break existing code), but *is* a web-compat issue if we chose to bring in the global `crypto` object.
21:36
<rbuckton>
s/chose/choose
22:16
<haxjs>
can't find today's notes url...
22:16
<haxjs>
Could anyone repaste it?
22:17
<jridgewell>
Don’t paste it here
22:17
<jridgewell>
It’s on the reflector
22:17
<jridgewell>
1 sec
22:18
<jridgewell>
https://github.com/tc39/Reflector/issues/271
22:18
<haxjs>
ok! thank you!
22:18
<devsnek>
when are we resuming
22:19
<jridgewell>
12:30
22:33
<rbuckton>
Are there slides?
22:34
<Bakkot>
not that we are seeing
23:21
<shu>
akirose: robpalme: could you double check at the next meeting break that we retained consensus for independent lifetime FinalizationGroups? (retained in the sense this was the original, historical intent of the proposal, if confusing.) this was kind of implied by people saying they're okay with changing the name of the constructor to better reflect independent lifetimes and i'd like it explicitly asked
23:22
<ljharb>
bradleymeck: that's not a bug, that's by design - everything >= the first default argument is optional
23:23
<robpalme>
shu: ack
23:26
<bradleymeck>
ljharb: i'm not arguing the intent, but that bugs in libraries have occured due to misunderstanding and usage in the wild has shown issues
23:28
<ljharb>
k
23:39
<ljharb>
can we get istvan set up on the queue
23:43
<ljharb>
can a chair interrupt him please? there's later queue items about time zones and stuff
23:43
<ljharb>
akirose: robpalme MylesBorins ^
23:49
<ljharb>
akirose: totally fair point about stage 4 :-p
23:49
<akirose>
it came up in a panel at some point
23:50
<akirose>
"how fast can you ship a feature"
23:50
<akirose>
something like that
23:50
<ljharb>
i guess theoretically a patch to a browser, timed right before a release hits the train, could get out in a matter of weeks, with the cooperation of the browser?
23:53
<Bakkot>
browsers can ship things before stage 3 if they want
23:53
<michaelficarra>
I super agree with Saboff's point