00:11
<shu>
Rob Palmer: you have my 5m item scheduled on the day i can't attend
00:20
<Rob Palmer>
Fixed
00:26
<shu>
ty
00:44
<Rob Palmer>
Retweets on the Community Event invitation are appreciated: https://twitter.com/TC39/status/1549192175891652608
00:50
<Rob Palmer>
A headsup for tomorrow's plenary meeting: We are going to use Google Meet for dial-in (instead of Jitsi) We will open the call at 09:30 so folk can test their AV setup. https://github.com/tc39/Reflector/issues/437#issuecomment-1188456766
00:51
<Rob Palmer>
If anyone is attending plenary in-person in SF tomorrow, please ensure you have read the entirety of the Reflector main post, otherwise you risk getting denied entry. https://github.com/tc39/Reflector/issues/437#issuecomment-1188456766
00:59
<Rob Palmer>
Also, breakfast is provided. So you have an incentive to arrive at 09:20.
03:13
<Hemanth H.M>
Anyone here driving through or around Fremont tomorrow? 🤓
15:35
<Rob Palmer>
Hello all, the meeting begins in 90 minutes. The signup sheet is now linked from the Reflector which you can use to get the Google Meet URL. The Google Meet call will be available for entry from ~45 mins before the meeting onward. If you are attending in person please remember your photo ID, proof of vaccination, and mask.
16:02
<Michael Ficarra>
Rob Palmer: The draft schedule has a video call link. You should probably remove it.
16:19
<rkirsling>
which lobby are we meant to come to?
16:21
<rkirsling>
I'm at the Spear Lobby Visitor Entrance
16:28
<Rob Palmer>
You are correct.
16:32
<Rob Palmer>
ok, we have 8 people in thephysical room
16:41
<rkirsling>
are people eating elsewhere or something?
16:42
<yulia>
oh my gosh, in person meetings!
16:46
<rkirsling>
it's very confusing; Dan came in here and yelled at me and then immediately left and it's like
16:46
<rkirsling>
I don't why I'm the only one eating here but I'm eating so geez
16:49
<Rob Palmer>
All, Google Meet does not let you change your name to the desired form <name> (<affiliation>) so please use Incognito/Private browsing mode - then it will allow you
16:54
<Chris de Almeida>
I find the video conf section of the doc confusing
16:54
<Chris de Almeida>
is https://meetings.igalia.com/tc39plenary accurate? is that the google meet meeting? is jitsi/8x8 used or not?
16:55
<Ashley Claymore>
To get the link to the gmeet you'll need to fill in the sign in form
16:55
<rickbutton>
no, check the reflector
16:55
<Chris de Almeida>
this is #437 btw .. in the reflector
16:55
<rickbutton>
also please delete links from this channel, it is logged publicly
16:56
<Chris de Almeida>
oh.. the issue has been updated, I'm looking at an email from 8 June.. 🤦
16:56
<Ashley Claymore>
easily done!
17:01
<Rob Palmer>
The meeting is now starting
17:01
<rkirsling>
yeah so that clarification would've been helpful much earlier
17:02
<rkirsling>
so that I wouldn't've had to be yelled at
17:02
<rkirsling>
I didn't appreciate that
17:03
<Michael Ficarra>
is somebody speaking? I have no audio
17:04
<Ashley Claymore>
Others are getting audio ok (we got thumbs up)
17:04
<Michael Ficarra>
I did the audio test in meet and it plays fine but I'm getting no call audio
17:05
<Michael Ficarra>
I will try reconnecting
17:05
<Michael Ficarra>
rejoining worked
17:05
<Michael Ficarra>
strange
17:06
<bakkot>
computers /shrug
17:09
<msaboff>
Roughly how many people are in the room?
17:09
<snek>
20ish
17:12
<Michael Ficarra>
the microphone seems highly directional
17:22
<Michael Ficarra>
oh wow, I forgot about introductions!
17:25
<yulia>
congrats rkirsling on the big move!
17:25
<rkirsling>
thank you!!
17:27
<rkirsling>
🦆
17:28
<yulia>
congrats nicolo-ribaudo on the upgrade :D
17:30
<Robin Ricard>
Congrats on the GPU Yulia
17:32
<rickbutton>
important question: what games are you putting on that GPU?
17:32
<Robin Ricard>
Sorry, I should have posted in tes
17:32
<Robin Ricard>
TDZ*
17:33
<Luca Casonato>
important question: what games are you putting on that GPU?
Factorio :)
17:35
<snek>
gaming? on a gpu? i thought those were for generating funny pictures
17:35
<yulia>
Factorio :)
satisfactory
17:35
<yulia>
waggles eyebrows
17:35
<yulia>
in the direction of tdz
17:37
<Rob Palmer>
there are 21 people here in the room in SF
17:38
<Chris de Almeida>
TCQ agenda/speaker not working
17:39
<Chris de Almeida>
thanks
17:39
<Rob Palmer>
thanks, Chris - i fixed it now
17:46
<rkirsling>
what was the deal with the "nice" thing
17:46
<yulia>
we have ugly pdfs i hear
17:47
<bakkot>
the current editors have not prioritized the pdfs, it is true
17:48
<ljharb>
another way to say it is, the only people who care about the PDF quality haven't prioritized it until now
17:48
<rkirsling>
I guess I was just curious what specifically Allen did
17:49
<bakkot>
rkirsling: https://twitter.com/awbjs/status/1548072759741124609
17:50
<Michael Ficarra>
attending a UTC+1 meeting remotely from the US is going to suuuuuuuck
17:50
<rkirsling>
thanks! I missed that thread
17:50
<littledan>
You should expect a presentation from the inclusion group and/or chairs about the NVC funding issue in a future meeting. We just didn't have time to prepare such a presentation before this meeting.
17:51
<ljharb>
6pm-1am in PT isn't too bad, but in CT that'd be rough
17:51
<littledan>
I'd prefer that Istvan coordinate on these presentations a bit more; if he has questions, he can ask those involved.
17:52
<rkirsling>
those points really do seem to suggest a fundamental misunderstanding of the purpose of the training 😕
17:52
<Michael Ficarra>
6pm-1am in PT isn't too bad, but in CT that'd be rough
I think you're doing the conversion wrong. A 10:00A meeting in Norway starts at 2:00A for me, 1:00A for you
17:53
<shu>
time to exercise "letting go"
17:54
<shu>
not sure i wanna have a 5 hour meeting at 1am
17:54
<bakkot>
didn't we have one earlier this year?
17:54
<bakkot>
or last year
17:54
<bakkot>
or the one before
17:54
<shu>
yeah and it was not fun
17:54
<bakkot>
(for people in PT)
17:54
<littledan>
We have a number of delegates calling in from Asia at this point, so it seems only fair to give them a break for once
17:54
<littledan>
or twice
17:55
<snek>
how about we compromise and have all meetings in my personal timezone wherever i am
17:57
<nicolo-ribaudo>
According to google it takes 335 days to walk around the globe, you could start walking and the meetings would be mostly equally distributed in one year
17:57
<rkirsling>
ecma 262 is on summer mode lol
17:57
<ljharb>
oh i was thinking tokyo
17:57
<ljharb>
yeah norway's going to be very rough
17:58
<Michael Ficarra>
According to google it takes 335 days to walk around the globe, you could start walking and the meetings would be mostly equally distributed in one year
much faster if you start at one of the poles
17:58
<snek>
lol
18:00
<Michael Ficarra>
Korea Advanced Institute of Science & Technology (KAIST)
18:00
<rkirsling>
neat
18:00
<bakkot>
Robin Ricard: ^
18:00
<Michael Ficarra>
see https://github.com/es-meta/esmeta
18:02
<jasew>
has the bot stopped?
18:02
<Luca Casonato>
The list of teams: https://github.com/orgs/tc39/teams/delegates/teams
18:02
<jasew>
nvm
18:02
<ljharb>
Github teams for member orgs: https://github.com/orgs/tc39/teams/delegates/teams
18:02
<bakkot>
btw if you are presenting this meeting, are on a mac, and have not given your slideshow software (e.g. chrome) permission to present, you may want to do that now
18:03
<Hemanth H.M>
Ah, just https://github.com/orgs/tc39/teams/ didn't list it.
18:04
<Hemanth H.M>
Ah, just https://github.com/orgs/tc39/teams/ didn't list it.
18:06
<ljharb>
it's underneath "delegates" which is underneath "eligible meeting participants"
18:09
<yulia>
thats very useful to have the version
18:09
<Michael Ficarra>
sffc: You should see if it's feasible to generate polyfills using KAIST's esmeta
18:10
<Michael Ficarra>
they are apparently able to generate a reference implementation for most of 262, so 402 should be a breeze
18:10
<Michael Ficarra>
sorry, didn't mean to ping while you were presenting
18:12
<bakkot>
most of 402 is locale stuff, but I guess it's possible you could wire up something with ICU
18:13
<Michael Ficarra>
are the polyfills not bring-your-own-ICU-data?
18:13
<Michael Ficarra>
they bundle that data?
18:13
<waldemar>
ljharb: Bill Budge is no longer at Google
18:14
<ljharb>
https://github.com/tc39/Admin-and-Business/issues/259
18:15
<bakkot>
ljharb: do CoC updates go in the notes? I forget
18:15
<ljharb>
yeah, it's fine, anything that can't go in the notes, we can't tell plenary either
18:22
<bakkot>
TA has subarray, which is the thing I want
18:22
<bakkot>
i never want non-contiguous subarrays of a TA
18:24
<bakkot>
note that TAs also do not have flatmap
18:24
<bakkot>
'cause like
18:24
<bakkot>
why do you want that
18:24
<bakkot>
flatmap is also non-mutating, though, so it's possible in the same sense as toSpliced
18:25
<shu>
yeah
18:25
<shu>
the ES6-era thing of just having all the Array stuff on TAs is just not the right call
18:25
<shu>
why are you sorting your bytes??
18:25
<snek>
lol i just posted that tweet in tdz shu
18:26
<snek>
people do run interesting algorithms on TA data, but very rarely are they written in terms of high level operations like flatmap
18:26
<rkirsling>
wait, like, if it exists, it would have to be called toSpliced, no? since that what the operation is (I'm for excluding it, but yeah)
18:26
<sffc>
sffc: You should see if it's feasible to generate polyfills using KAIST's esmeta
Could you suggest this in https://github.com/tc39/ecma402/issues/700 ?
18:26
<bakkot>
do i want typedarray to be learnable
18:27
<snek>
i think typedarray should be learnable, its not one of those evil features like atomics
18:27
<rkirsling>
detachment is arguably evil
18:27
<rkirsling>
lol
18:27
<snek>
once we have resizing
18:27
<snek>
🙏
18:31
<bakkot>
the name is fine by me
18:31
<littledan>
OK, so, how do we draw a conclusion here?
18:31
<bakkot>
i mean splice is already a gross name but it exists, having another name is worse
18:31
<littledan>
Do people feel convinced by the champion's arguments?
18:31
<ryzokuken>
temperature check?
18:32
<HE Shi-Jun>
i mean splice is already a gross name but it exists, having another name is worse
yes but we always have the option that do not add "toSpliced" method at all, so we won't spread the gross name more.
18:33
<bakkot>
yeah but you need it on tuples
18:33
<bakkot>
you really need it on tuples
18:34
<rickbutton>
is there any interest in moving just TypedArray.prototype.toSpliced to a follow on?
18:34
<rickbutton>
to resolve this?
18:34
<rkirsling>
ehh I think this could be resolved now
18:34
<shu>
littledan: i'd rather we follow res judicata if there is any sentiment to keep toSpliced, we keep it, because it's already stage 3. bar to make stage 3 normative changes should be high
18:34
<shu>
to me TAs are just special
18:35
<bakkot>
yeah
18:35
<rkirsling>

res judicata

An issue that has already been decided by another court, and therefore must be dismissed.

18:35
<snek>
tc39 common law
18:35
<shu>
oh i guess i used it incorrectly then
18:35
<bakkot>
we should only add methods on TAs when they actually make sense for TAs specifically
18:35
<shu>
i meant more like we decided earlier
18:35
<HE Shi-Jun>
yeah but you need it on tuples
I suggested a different api: https://github.com/tc39/proposal-change-array-by-copy/issues/80
18:37
<HE Shi-Jun>
What each emoji mean?
18:37
<Luca Casonato>
:+1: = you like toSplice for TA 😕 = you don't like toSplice for TA
18:38
<HE Shi-Jun>
I don't know which one I should choose, because I dislike toSpliced at all, but if we must have it, it seems TA should also have it...
18:39
<yulia>
well, unconvinced is a pretty good description of my feling
18:43
<yulia>
I'll be off for 15 min
18:44
<yulia>
dminor can field anything for mozilla
18:46
<rkirsling>
ah yes, the saddest of all keys
18:46
<rkirsling>
(for crying out loud, how do I strikethrough, Matrix)
18:47
<ryzokuken>
<del></del>
18:47
<ryzokuken>
like this
18:48
<snek>
its totally up to each client
18:49
<Hemanth H.M>
https://github.com/tc39/test262/pull/3525
18:52
<snek>
as the maintainer of engine262 i support this change lol
18:53
<Michael Ficarra>
snek: congratulations on your faithful implementation which is now incorrect
18:53
<snek>
such is life
18:56
<bakkot>
just to be clear we're back in 65 minutes?
18:56
<bakkot>
64 now
18:56
<littledan>
yes
18:56
<Robert Pamely>
corect
20:03
<Kris Kowal>
Have we retrieved all delegates from the patio? I believe that’s the last place I saw Peter Hoddie during lunch.
20:04
<ryzokuken>
we're on time, but in the future maybe we could call out for delegates still busy with lunch?
20:06
<littledan>
Sorry for our delay!
20:15
<HE Shi-Jun>
I feel parseImmutable should be parsePrimitive ?
20:15
<littledan>
HE Shi-Jun: Can you say why?
20:16
<HE Shi-Jun>
immutable is a little bit broad word, it could be immutable object. and it also make us impossible to make tuple/record become mutable value type (just like swift)
20:17
<HE Shi-Jun>
in the future
20:17
<littledan>
I feel fine committing to making record/tuple not becoming a mutable value type like in Swift; to avoid making way too many copies, Swift depends on compiler optimizations that would be infeasible for JS
20:19
<HE Shi-Jun>
I think we need more investigation on value type, at least we shouldn't add constraint in current status by naming it "immutable"
20:21
<HE Shi-Jun>
Swift use CoW optimization, it seems js engines still can use such tech, for example, I believe JavaScriptCore use CoW heavily?
20:21
<nicolo-ribaudo>
Regardless of compiler optimizations, immutability has been one of the core goals of this proposal since the beginning
20:22
<ryzokuken>
I think this proposal loses a lot of its value if we move away from immutability.
20:23
<rbuckton>
"one time", except for Array
20:23
<HE Shi-Jun>
Regardless of compiler optimizations, immutability has been one of the core goals of this proposal since the beginning
Value type do not need to be "immutable". I think we start with immutable, because in the languages without value type, we have to use immutable objects. But we shouldn't mix the concepts.
20:24
<littledan>
I feel fine committing to making record/tuple not becoming a mutable value type like in Swift; to avoid making way too many copies, Swift depends on compiler optimizations that would be infeasible for JS
HE Shi-Jun: If you have an idea for how to get past this issue, I'd be interested to hear it.
20:24
<Michael Ficarra>
__proto__ not being allowed is unfortunate but understandable
20:24
<HE Shi-Jun>
HE Shi-Jun: If you have an idea for how to get past this issue, I'd be interested to hear it.
What issue?
20:25
<littledan>
the issue where, to use a Swift-like approach for CoW immutable things without tons of copies, you need to determine when there is not a reference to the original value, which is fundamentally hard in JS
20:25
<littledan>
(e.g., the environment record may reference the object, and so you need to prove that this reference is dead, which is easier to do in Swift than in JS)
20:27
<littledan>
also the runtime version of CoW depends on reference counting, also easier in Swift
20:30
<HE Shi-Jun>
I'm not sure I fully understand your question. IMO, the problem is always there, the idea of "mutable" tupe/record could be easily think as a syntax sugar of creating a new tuple/record. For example, let x = #[1]; x[0]++ could be think as sugar of x = #[x[0]+1]
20:31
<bakkot>
ljharb: i feel like the symbol protocol is the icky hardcoded special case
20:31
<bakkot>
it's only there for historical reasons
20:31
<ljharb>
it could have been an internal slot that HTML sets too tho
20:33
<nicolo-ribaudo>
How do I change my company on TCQ?
20:33
<bakkot>
we went this route because ES6 specifically was trying to make all special behavior explicable in terms of user-exposed mechanisms
20:33
<bakkot>
this was a mistake
20:33
<bakkot>
(IMO)
20:34
<ryzokuken>
How do I change my company on TCQ?
by changing it on github
20:34
<snek>
it would be nice if any implementors could share their view here. concat spreadable being a bailout condition in multiple engines seems to speak very accutely to the fact that no one is using this or really cares about it
20:34
<shu>
i have not heard any contrary evidence that it's some widely useful protocol
20:34
<shu>
so it remains a protector in V8 with the cliff
20:35
<littledan>
note that this isn't a JIT cliff but rather a switch among multiple implementations of the function, the slow version and the fast one
20:35
<nicolo-ribaudo>
Ashley Claymore: That's exactly what I meant, thank you!
20:35
<shu>
littledan: it's not just that in V8, it's one of those protector things
20:35
<shu>
there's a protector on prototype lookups of @@isConcatSpreadable
20:35
<ljharb>
to be fair all my personal use cases are or will be around concat-spreading arrays and tuples only, not generic spreadable objects. but it seems like a weird deviation from an established protocol.
20:36
<littledan>
right, and the protector switches you globally into the slow version
20:36
<shu>
right
20:36
<littledan>
but regardless of JIT stage
20:36
<shu>
correct
20:36
<snek>
the thing that interests me is that they consider it acceptable to treat it as a slow path, implying to me that it really has no usage in practice and we should not bother trying to bring it forward.
20:38
<HE Shi-Jun>
also the runtime version of CoW depends on reference counting, also easier in Swift
So the CoW optimizations are similar. If runtime know there is no x shared, they could just modify the value of x, if it's shared, it just copy x and modify on new x. Of coz engines could choose always copy x, do not need ref counting.
20:38
<Michael Ficarra>
I'll move my queue items to the issue tracker to save time
20:39
<bakkot>
to be clear, these exotic wrappers only come up when you invoke a method (presumably with .call) in sloppy code with the record or tuple as its this
20:39
<bakkot>
it's a very narrow case and I don't much care about sloppy-mode code
20:39
<bakkot>
(if my understanding is wrong please correct me)
20:39
<shu>
what's the problem with hard coding things?
20:40
<snek>
(if my understanding is wrong please correct me)
this sounds correct to me
20:40
<Michael Ficarra>
rickbutton: I don't think Jordan's concerned about the verbosity of the spec
20:41
<rickbutton>
oh thats what I interpreted it as (in addition to the JS-side problems)
20:41
<Michael Ficarra>
bakkot: they also come up when doing Object(record) explicitly, right?
20:41
<bakkot>
sure I guess
20:42
<bakkot>
I also don't much care about that code
20:42
<rickbutton>
strings are containers of characters
20:43
<snek>
that's a loaded sentence
20:43
<Luca Casonato>
strings are containers of strings
20:43
<rickbutton>
so much so that you can make something that looks a lot like a string with a tuple
20:43
<nicolo-ribaudo>
numbers are containers of bits
20:43
<Luca Casonato>
oh this isn't tdz
20:43
<bakkot>
yeah I don't think these should pass an isRecord check
20:44
<bakkot>
in fact it is not totally clear to me why (or if) this is different from just making a new, regular, frozen object with properties and prototype being copied
20:44
<bakkot>
I guess invoking methods on tuples works, is the main difference?
20:44
<bakkot>
but you can have the tuple methods check for the special wrapper
20:44
<snek>
r&t have new typeof values right
20:44
<bakkot>
yes
20:45
<snek>
yeah i feel very unmotivated about the whole object wrapper situation lol
20:45
<nicolo-ribaudo>
yeah i feel very unmotivated about the whole object wrapper situation lol
I hate object wrappers
20:45
<bakkot>
you need some sort of wrapper for sloppy code here
20:45
<bakkot>
well
20:45
<bakkot>
I guess you technically don't but you probably should
20:45
<littledan>
I don't think the word "axiom" makes much sense here
20:45
<littledan>
more like "true statement"
20:46
<bakkot>
i feel like Object(record) should make a copy of the record with all the keys
20:46
<bakkot>
that seems better
20:46
<nicolo-ribaudo>
I guess you technically don't but you probably should
We considered hiding wrappers for R&T and it's possible, but it would be different from what every other primitive does
20:46
<bakkot>
that's like being a wrapper
20:46
<bakkot>
nicolo-ribaudo: that's fine by me
20:46
<snek>
wrapper existing and wrapper having dedicated apis are different levels of caring about the wrapper and i'm feeling more on the former
20:46
<Michael Ficarra>
I think the current wrapper semantics are fine
20:46
<bakkot>
I don't like isRecord for the wrapper semantics
20:46
<Michael Ficarra>
snek: same
20:47
<bakkot>
otherwise I'm fine with it
20:47
<littledan>
well, the wrapper semantics are the entire point of isRecord existing
20:47
<bakkot>
right
20:47
<bakkot>
so, don't have that
20:48
<littledan>
I'd be OK with omitting this operation; I'd also be OK with adding a weird predicate Record.isRecordWrapper
20:48
<snek>
i'm personally fine with the is methods existing under the assumption that i will never see them being used outside of occasionally reading code from jordan's es-whatever packages
20:48
<bakkot>
yeah, isRecordWrapper is certainly a lot more palatable
20:49
<bakkot>
wait yeah try-catch does this already
20:49
<snek>
isRecordObject
20:49
<bakkot>
try-catch solves this perfectly
20:49
<bakkot>
we should do that 100%
20:49
<littledan>
how?
20:49
<snek>
console.log in node can use native apis from v8
20:49
<snek>
we don't need Record.isRecord
20:49
<littledan>
yes
20:50
<nicolo-ribaudo>
console.log in node can use native apis from v8
It could also just print record wrappers as normal objects
20:50
<Luca Casonato>
and it already does for things like the isProxy detection code
20:50
<bakkot>
isRecord(x) is exactly typeof x === 'record' || try { Record.omit.call(x, 'a'); return true; } catch { return false }
20:50
<bakkot>
if I understand correctly
20:50
<snek>
yeah we like, reach into weakmaps and stuff to print out their values, we are very far from needing stdlib support for stuff :P
20:50
<nicolo-ribaudo>
bakkot: The proposal doesn't currently include .omit
20:50
<bakkot>
true
20:50
<bakkot>
but if it did that would work
20:50
<rbuckton>
Is there a mechanism to unwrap a Record wrapper if there's no .valueOf?
20:51
<ljharb>
to be clear, these exotic wrappers only come up when you invoke a method (presumably with .call) in sloppy code with the record or tuple as its this
also an explicit Object() call
20:51
<nicolo-ribaudo>
Is there a mechanism to unwrap a Record wrapper if there's no .valueOf?
If wrappers are immutable, Record(wrapper)
20:51
<rbuckton>
Ah, thanks.
20:51
<nicolo-ribaudo>
but if it did that would work
True (and maybe it would be nicer than .isRecordWrapper)
20:51
<bakkot>
rkirsling: did you volunteer to review?
20:51
<bakkot>
trying to capture reviewers in the notes
20:52
<ljharb>
more like "true statement"

a statement or proposition which is regarded as being established, accepted, or self-evidently true.

yes, that's what axiom means

20:52
<bakkot>
no, "happens to be true" is very different from "is an axiom"
20:52
<shu>
yes
20:52
<rbuckton>
If wrappers are immutable, Record(wrapper)

Not 100% sure why that is a requirement:

var obj = Object(1);
obj.x = 2;
obj.x; // 2
var i = Number(obj);
i; // 1
i.x; // undefined
20:52
<ljharb>
If wrappers are immutable, Record(wrapper)
that would work whether they're mutable or immutable.
20:52
<nicolo-ribaudo>
Because Record(...) just copies the enumerable keys from the argument
20:53
<ljharb>
it shouldn't, if it's passed a wrapper
20:53
<rbuckton>
Then it's not "unwrapping" the wrapper, its constructing a new record, which is not the same.
20:53
<ljharb>
it should just extract the slot and return it. if not, that's a bug
20:53
<nicolo-ribaudo>
Then it's not "unwrapping" the wrapper, its constructing a new record, which is not the same.
How is that different since two records with the same contents are the same record?
20:53
<snek>
the slide should say mod instanceof WebAssembly.Module i believe
20:54
<rbuckton>
Its different for the exact reason mentioned above. if it copies enumerable keys then it might construct a new record if its mutable, so its not unwrapping in that case.
20:54
<nicolo-ribaudo>
it should just extract the slot and return it. if not, that's a bug
let myStr = new String("abc")
myStr.toString = () => "def";
String(myStr) // "def"
Boolean(Object(false)) // true
20:54
<rickbutton>
there is no difference between a "new record" with the same values, and the old record
20:54
<rickbutton>
they are the same value
20:54
<nicolo-ribaudo>
So it only matters if they are mutable: if they are immutable, that's unwrapping
20:55
<ljharb>
filed https://github.com/tc39/proposal-record-tuple/issues/329
20:55
<rkirsling>
rkirsling: did you volunteer to review?
yup!
20:55
<rickbutton>
oh i see, yeah if its enumerating and non-mutable it would pick up extended properties on the wrapper
20:55
<bakkot>
thank
20:55
<rbuckton>
So it only matters if they are mutable: if they are immutable, that's unwrapping
If record wrappers are mutable, then I'd want some mechanism to unwrap like valueOf
20:56
<nicolo-ribaudo>
If record wrappers are mutable, then I'd want some mechanism to unwrap like valueOf
Yes, I agree
20:56
<littledan>
The current proposal is that record wrappers are immutable. We're still waiting on a concrete scenario presented which justifies otherwise.
20:57
<bakkot>
honestly I kind of like just not having wrappers
20:57
<bakkot>
make it so Object(record) makes a copy
20:57
<bakkot>
wrappers are evil
20:57
<littledan>
We did some extensive work into analyzing a no-wrappers version. After a lot of discussion, it wasn't adopted
20:57
<littledan>
but actually I think in that version Object(record) just returned record
20:58
<Michael Ficarra>
bakkot: I'd rather not have records be special in this way
20:58
<ljharb>
Object(x) returning a primitive would be quite bad
20:58
<littledan>
well, in this case, it'd be an object
20:58
<Ashley Claymore>
__proto__ not being allowed is unfortunate but understandable
to be clear, ["__proto__"] is allowed as a way to add that as a string prop. It's only the bare syntax which is dissallowed
20:58
<Ashley Claymore>
to match the object literal semantics for when it's setting the proto or not
20:59
<bakkot>
Object(x) returning a primitive would be quite bad
tbc the proposal was to make a new object with the same keys/values as the record
20:59
<littledan>
right I'm just referring to the version that we spelled out in a bunch of detail
20:59
<bakkot>
(you can't "make a copy" of a record)
21:00
<snek>
isn't this what we have the difference between Object() and new Object() for
21:00
<snek>
or like, not why, but we happen to have this annoying difference
21:01
<Michael Ficarra>
oh god, don't ever put new in front of one of those constructors
21:01
<shu>
you don't do new Number() to be OO in your math?
21:03
<HE Shi-Jun>
The current proposal is that record wrappers are immutable. We're still waiting on a concrete scenario presented which justifies otherwise.
One possible usage of mutable is: let x = #{foo:1}; x = alter(x, x=>x.foo++); assert.equal(x, #{foo:2}); function alter(r, f) { let o = Object(r); f(o); return Record(o) }
21:04
<littledan>
A use case wouldn't just be code but also an explanation of why we want to do this
21:04
<nicolo-ribaudo>
HE Shi-Jun: You could just use { ...r } instead of Object(r)
21:09
<HE Shi-Jun>
HE Shi-Jun: You could just use { ...r } instead of Object(r)
yeah, u could. I just feel current Object(primitive) always give a mutable objects.
21:11
<HE Shi-Jun>
A use case wouldn't just be code but also an explanation of why we want to do this
I'm ok with Object(record) returns an immutable object, I just wrote an example which might use mutable version.
21:11
<nicolo-ribaudo>
Btw, alter("abc", s => s[1] = "d"); function alter(r, f) { let o = Object(r); f(o); return String(o) } doesn't currently return "adc"
21:19
<HE Shi-Jun>
nicolo-ribaudo: alter is just a mimic of current userland immutable library (see https://leontrolski.github.io/alter.html ), so I don't expect people would use that to alter strings... 😅
21:26
<bakkot>
"can this be imported" seems like major semantics but I guess I am ok deciding that at stage 2 instead of before
21:29
<littledan>
the import keyword is important to make things syntactically unambiguous
21:29
<shu>
eh, it seems fundamental to me that if we're reflecting stages of the module pipeline, the verb import necessarily becomes overloaded
21:30
<shu>
but that seems fine to me from a readability perspective
21:30
<shu>
like, it seems worse if, for the sake of the english word being unambiguous, we had a form like import.instantiate(x)
21:31
<rickbutton>
we shouldn't place much if any weight on the actual english definition of import as it relates to its place in the module pipeline. import is already super ambiguous in english anyway
21:31
<rickbutton>
so i guess +1
21:33
<rkirsling>
syntax budget definition is up for someone to review: https://github.com/tc39/how-we-work/pull/116
21:44
<snek>
syntax budget definition is up for someone to review: https://github.com/tc39/how-we-work/pull/116
looks good but can we somehow work a jab at perl into this definition
21:45
<rkirsling>
### Counterexamples
Perl
21:46
<bakkot>
there's also https://www.stroustrup.com/P0977-remember-the-vasa.pdf
21:46
<rkirsling>
yeah I thought about linking that
21:46
<bakkot>
though I guess that's not just syntax
21:46
<rkirsling>
but it's ever so slightly different
21:47
<bakkot>
https://erights.medium.com/the-tragedy-of-the-common-lisp-why-large-languages-explode-4e83096239b9 is possibly a better link
21:47
<snek>
was it dan who gave the presentation at like, 2019 microsoft maybe, showing all our syntax combined
21:47
<rkirsling>
oh yeah, that's the one I forgot about
21:47
<bakkot>
leo, maybe?
21:47
<bakkot>
i remember that presentation it was fun
21:47
<snek>
i remember everyone laughing
21:47
<littledan>
yeah that was Leo; I found that sample a little unfair
21:47
<littledan>
I mean, you can write messy stuff in ES3
21:48
<snek>
well the examples were unrealistic
21:48
<snek>
to some degree
21:48
<rickbutton>
can confirm, own an es5 environment, you dont need new syntax to do bad things. I've seen things.
21:48
<snek>
new Array(n) is worse than hitting the syntax budget don't @ me
21:49
<littledan>
Leo had a bunch of good ideas in that presentation, but I don't find the "we're about to fall off the complexity cliff!" frame that others have used very revealing
21:49
<bakkot>
syntax budget only applies to things actually written
21:49
<nicolo-ribaudo>
new Array(n) is worse than hitting the syntax budget don't @ me
Be grateful that new Array does not return an "array wrapper"
21:49
<bakkot>
like with doesn't really count, because, like, you don't have to know about it
21:49
<snek>
a few of the proposals were simplified though
21:50
<bakkot>
on the other hand match has like 4x as much syntax now
21:50
<snek>
yulia's document she posted yesterday was so well done
21:50
<bakkot>
link?
21:51
<bakkot>
or dm me if it's not public I guess
21:51
<snek>
https://github.com/tc39/proposal-pattern-matching/issues/281 in the OP
21:57
<bakkot>
not sure how I feel about adding a new eval
21:57
<bakkot>
even one where the code being eval'd must be granted permissions explicitly
21:59
<yulia>
Where is the new eval?
21:59
<nicolo-ribaudo>
In the "Evaluators" part
21:59
<yulia>
Ah!
21:59
<bakkot>
Module as being proposed on a previous slide took a string and produced a module object which could be evaluated
22:00
<waldemar>
Need "need notetakers" on that bingo card
22:01
<ryzokuken>
wait, we don't?
22:01
<ryzokuken>
oops, also #temporaldeadzone:matrix.org
22:01
<ljharb>
http://j.mp/tc39bingo could be customized :-p
22:03
<waldemar>
What does "&c" mean?
22:03
<rbuckton>
I assume "and company"
22:03
<bakkot>
"etc"
22:03
<rbuckton>
^
22:04
<snek>
andcetera
22:04
<ljharb>
it's where "et cetera" came from, i believe (actually, googling suggests that it's just a historical abbreviation of the full etc)
22:04
<rbuckton>
fair
22:05
<littledan>
It's important to understand IMO that these layers are not necessarily "this proposal comes before that one" or "they all eventually happen" but just a way to understand the whole conceptual space that we're working within, in modules
22:05
<littledan>
It's a great way to understand it IMO
22:07
<Hemanth H.M>
We need consensus to customize? :D
22:12
<Jack Works>
like with doesn't really count, because, like, you don't have to know about it
I use it everyday, in our production code!
22:13
<nicolo-ribaudo>
I use it everyday, in our production code!
Is new Evaluators the with-killer we need?
22:13
<rickbutton>
well now that you've said this you can't unsay it :)
22:14
<bakkot>
that was a "you" meaning, like, normal people, not the people in this room. I also have to know about B.3.3 but no one else should
22:14
<Jack Works>
Is new Evaluators the with-killer we need?
I'm gradually switching (but not done) to Ahead-of-time compiling to Virtual Modules based on today's presentation of Compartments.
22:15
<snek>
that was a "you" meaning, like, normal people, not the people in this room. I also have to know about B.3.3 but no one else should
high bus factor on B.3.3, do you have an apprentice?
22:16
<Michael Ficarra>
We need consensus to customize? :D
Hemanth H.M: are you fundamentally advocating that we relitigate the bingo card? we should defer the bikeshed of this meta-argument to userland until we can reach consensus on this scenario. let me finish.
22:16
<nicolo-ribaudo>
Maybe a bus factor of 1 is exactly what B.3.3 needs
22:16
<bakkot>
snek: my plan is to die and for it to become lost knowledge
22:16
<snek>
lol
22:16
<snek>
nicolo and bakkot in solemn agreement
22:17
<ryzokuken>
nicolo-ribaudo: we're not letting you drive a bus anymore
22:17
<bakkot>
(to be clear in actual fact a few other delegates have at least as much knowledge here as I do, though most of us do try to keep it paged out as much as possible)
22:19
<nicolo-ribaudo>
nicolo-ribaudo: we're not letting you drive a bus anymore
Driving bus is not in my daily acitvities list
22:19
<Michael Ficarra>
everybody likes to complain about B.3.3, but the rest of B.3 is just as worthy of your derision
22:20
<nicolo-ribaudo>
We get bug reports in Babel for not properly supporting B.3
22:21
<ljharb>
from a set of how many people tho
22:21
<bakkot>
labeled function declarations are merely useless, not horrifying
22:21
<nicolo-ribaudo>
from a set of how many people tho
At most 3
22:21
<bakkot>
also I guess it's actually B.3.2 now? which thing did we remove...
22:22
<rickbutton>
add em to the bus list
22:22
<rickbutton>
:)
22:22
<littledan>
B.3.4 and B.3.5 are pretty bad
22:22
<bakkot>
oh, __proto__ in object literals, of course
22:22
<littledan>
yeah B.3.3 isn't so bad by comparison
22:23
<nicolo-ribaudo>
yeah B.3.3 isn't so bad by comparison
Well, B.3.3 (functions in if) is just "in this case, do what B.3.2 says" (functions in bloks)
22:23
<rkirsling>
also I guess it's actually B.3.2 now? which thing did we remove...
wait what
22:23
<rkirsling>
do I need to update the article
22:23
<bakkot>
I will always think of it as B.3.3
22:24
<bakkot>
but yes we removed __proto__ and things got moved around
22:24
<rickbutton>
ring the bell, Annex B has changed
22:24
<nicolo-ribaudo>
Editors, can we add an empty B.3.2 section and restore the correct numbers?
22:24
<bakkot>
... tempting
22:24
<bakkot>
(B.3.1 technically)
22:25
<nicolo-ribaudo>
(jokes aside, being able to skip clause numbers in ecmarkup is something both ljharb and me would like)
22:25
<bakkot>
PRs welcome
22:25
<nicolo-ribaudo>
PR will come
22:26
<bakkot>
put a clause-number attribute on emu-clause or something
22:26
<ljharb>
that would be so amazing. especially if it auto-numbered from that point
22:26
<bakkot>
ofc
22:27
<snek>
p0 is dark theme
22:27
<rickbutton>
dark reader extension works ok
22:28
<ryzokuken>
you're supposed to be temporarily blinded whenever you read the spec, it's intentional
22:28
<bakkot>
if you want to find someone who can actually do design to make us a dark theme, including the variable highlight stuff, go for it
22:28
<bakkot>
I am... not a designer
22:28
<ryzokuken>
we just need colors, right?
22:28
<ryzokuken>
nothing else
22:29
<rickbutton>
with the dark reader extension ^
22:29
<bakkot>
what does it look like when you click a variable?
22:29
<bakkot>
or a couple varaibles
22:29
<ryzokuken>
yeah, what if we just used the inverted version of every single existing color?
22:29
<snek>
dark reader doesn't just invert
22:30
<bakkot>
gross
22:30
<ryzokuken>
yeah, but if we did that as a dark mode MVP, would it be decent?
22:30
<rickbutton>
idk seems fine
22:30
<snek>
i can play with this
22:30
<bakkot>
gotta get better colors for the highlights
22:30
<rkirsling>
yeah, what if we just used the inverted version of every single existing color?
er well notes should remain green, say
22:30
<snek>
at some point
22:30
<rickbutton>
like just to pull the color codes from
22:30
<snek>
i am technically a frontend developer
22:30
<rkirsling>
discord does a very good job of dark mode
22:30
<rkirsling>
unlike GH's sorry first attempt
22:31
<ljharb>
i've never understood the appeal of dark mode personally
22:31
<snek>
yeah i'll just copy discord's colors /s
22:31
<rickbutton>
you have magic eye jordan
22:31
<ljharb>
my optometrist would disagree
22:31
<ryzokuken>
yeah i'll just copy discord's colors /s
purple spec when
22:31
<snek>
blurple*
22:32
<nicolo-ribaudo>
Can we load vscode themes?
22:32
<bakkot>
i also do not use dark mode
22:32
<rickbutton>
sublime text 2 themes
22:32
<rickbutton>
dark mode comes from late night lights off pc usage and not wanting to flashbang your eyeballs
22:32
<bakkot>
possibly we should take this to tdz
23:00
<nicolo-ribaudo>
"I hate that Kris started counting from 0" ~ me one hour before the meeting
23:04
<littledan>
For the earlier discussion about wrapper-less Records and Tuples, see https://github.com/tc39/proposal-record-tuple/issues/201
23:38
<Jack Works>
I'm wondering if we can add { a as b } as the replacement of { a: b } which is unreadable