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? |
17:35 | <snek> | gaming? on a gpu? i thought those were for generating funny pictures |
17:35 | <yulia> | Factorio :) |
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 |
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 |
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 |
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 |
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
|
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 |
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> | |
18:46 | <rkirsling> | (for crying out loud, how do I strikethrough, Matrix) |
18:47 | <ryzokuken> | <del></del> |
18:47 | <ryzokuken> | |
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> | |
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 |
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 |
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. |
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? |
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 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) |
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 |
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 |
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 |
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 Object() call |
20:51 | <nicolo-ribaudo> | Is there a mechanism to unwrap a Record wrapper if there's no Record(wrapper) |
20:51 | <rbuckton> | Ah, thanks. |
20:51 | <nicolo-ribaudo> | but if it did that would work .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"
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, Not 100% sure why that is a requirement:
|
20:52 | <ljharb> | If wrappers are 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. |
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
|
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? |
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 |
20:56 | <nicolo-ribaudo> | If record wrappers are mutable, then I'd want some mechanism to unwrap like valueOf |
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__"] 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> | |
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. 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 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 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 |
21:45 | <rkirsling> |
|
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 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> | |
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 |
22:13 | <nicolo-ribaudo> | I use it everyday, in our production code! 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 |
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 |
22:16 | <Michael Ficarra> | We need consensus to customize? :D |
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 |
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 |
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 |
22:23 | <rkirsling> | also I guess it's actually B.3.2 now? which thing did we remove... |
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? |
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 |
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 |