17:44 | <michaelficarra> | is anyone in the meeting yet? |
17:55 | <ljharb> | michaelficarra: to change your name, you have to leave and rejoin i believe. |
17:59 | <ryzokuken> | do we need to fill in the table on the docs? |
17:59 | <ryzokuken> | since we already have an attendance form? |
18:02 | <Bakkot> | ryzokuken the table in the docs is useful for the note-takers, I think |
18:02 | <ryzokuken> | oh right |
18:02 | <ryzokuken> | thanks |
18:02 | <ljharb> | akirose: force quit and reopened the ipad app, and i briefly saw the BA again, then the slides popped in, so i'm good |
18:03 | <rkirsling> | everyone does indeed look like themself, ha |
18:08 | <gibson042> | Teams doesn't seem to be working for me; is anyone else stuck on something like "You're not on Teams yet, but you can set it up for your organization"? |
18:08 | <ljharb> | gibson042: you have to sign in as a guest |
18:09 | <gibson042> | I don't even see a way to do that |
18:09 | <gibson042> | anyway, joining via browser seems to work |
18:09 | <rbuckton> | transcription bot: `s/Baht/bot` |
18:10 | <ljharb> | gibson042: it's possible if you're logged into your microsoft passport account it skips that screen |
18:14 | <ystartsev> | editors ready after this? |
18:14 | <gibson042> | hmm, now Teams is showing a "Sign in" screen but there is no guest option |
18:15 | <akirose> | what the heck |
18:15 | <gibson042> | whatever, the web app is working so I'll stick with that |
18:16 | <sffc> | It might work if you join as a guest using the web client |
18:16 | <sffc> | yep |
18:24 | <ryzokuken> | I have had some informal comms with CalConnect folks, they are actively working on it, just as an FYI. |
18:24 | <leobalter> | sffc: wrt ECMA-402 updates, we should communicate we're doing the cut of ECMA-402 for the 2021 candidate. I believe the only next additions before the cut would be DTF formatRange and perhaps the current listed PRs if they get consensus in this meeting. |
18:24 | <leobalter> | gibson042: ^^ |
18:27 | <sffc> | leobalter gibson042: I added a slide. Do you want to discuss it? |
18:28 | <sffc> | (also, this is #tc39-delegates; we have #tc39-ecma402 for i18n discussions) |
18:29 | <leobalter> | moving the discussion there |
18:30 | <Bakkot> | also for anyone considering taking notes, you should know that it usually does a better job than it was doing iwth Istvan |
18:31 | <Bakkot> | e.g. it got dan almost perfectly |
18:42 | <akirose> | "SDO" is also the acronym for standards orgs |
18:43 | <akirose> | standards develop(ing|ment) organization |
18:45 | <ystartsev> | I am so happy about this channge |
18:46 | <ljharb> | super great |
18:47 | <littledan> | omg I'm so excited about this |
18:47 | <littledan> | this is awesome |
18:53 | <ystartsev> | Editor group has done amazing stuff |
18:53 | <JaseW> | That |
18:55 | <JaseW> | That's great news Bakkot |
18:56 | <michaelficarra> | btw a lot of these changes will apply to ECMA-402 as well, since they use ecmarkup |
18:58 | <michaelficarra> | littledan ystartsev we are, too! |
19:00 | <michaelficarra> | as editors, we spend a decent amount of time navigating the spec and we were constantly feeling the pains addressed by the SDO re-org |
19:04 | <rpamely> | I just noticed the reflector issue link in the room title is old. Current meeting is issue 340. |
19:07 | <ljharb> | rpamely: thanks, fixed |
19:17 | <ryzokuken> | 👏 |
19:20 | <akirose> | the department of meta |
19:34 | <ljharb> | ok so `(console.log(0), null)[console.log(1)] = console.log(2);` logs 0,1,2 in my browser - what order does the current spec dictate? (Bakkot, ystartsev) |
19:34 | <Bakkot> | ljharb it dictates 0, 1, throw, I believe |
19:34 | <ljharb> | i'd kind of expect 0, throw |
19:34 | <ljharb> | ah k |
19:34 | <Bakkot> | not totally sure; might be 0, throw |
19:35 | <Bakkot> | ah, I was right the first time |
19:35 | <Bakkot> | that's part of why it's so painful |
19:35 | <Bakkot> | because you look at the object, then the key, then the object again |
19:36 | <ljharb> | which is what you already have to do for `o[k]` in case o is a proxy or has a setter on o[k], no? |
19:37 | <ljharb> | i guess in those two cases you'd have to have the RHS first |
19:37 | <Bakkot> | sorry, so, current spec dictates: |
19:37 | <Bakkot> | object, key, object, rhs, object+key+rhs |
19:38 | <Bakkot> | you do have to check for proxies or setters or whatever, but those happen as part of performing the assingment |
19:38 | <Bakkot> | which happens after evaluating the HRS |
19:38 | <Bakkot> | *RHS |
19:39 | <ljharb> | right |
19:39 | <ljharb> | so this would just become "object, key, rhs, all" |
19:40 | <Bakkot> | yeah |
19:41 | <ljharb> | k, thanks |
19:41 | <ystartsev> | sorry for the mixup earlier |
19:42 | <ystartsev> | the chairing transition was a bit rough |
19:43 | <JaseW> | I think the note taker has stopped |
19:43 | <JaseW> | and it's back |
19:43 | <Bakkot> | JaseW refresh |
19:43 | <Bakkot> | yeah |
19:43 | <Bakkot> | ljharb in fact it was even worse than that, now that I've looked |
19:43 | <Bakkot> | it was, evaluate obj, evaluate prop, coerce obj to object, coerce prop to string, evaluate RHS, perform assignment |
19:43 | <ljharb> | and now? |
19:44 | <Bakkot> | now it's just evaluate object, evaluate prop, coerce prop to string, evaluate RHS, perform assignment |
19:44 | <Bakkot> | so the "evaluate prop" and "coerce prop to string" become adjacent |
19:45 | <ystartsev> | ^ yeah that is the main change |
19:45 | <ljharb> | and "coerce obj to object" happens as part of "perform assignment" |
19:45 | <ljharb> | gotcha |
19:45 | <shu> | 46! |
19:45 | <ystartsev> | yeah, ToObject basically does the same |
19:46 | <ystartsev> | there is a more in depth write up in my test repo for it |
19:56 | <ystartsev> | sffc: I got the thumbs up on #500 |
19:56 | <ystartsev> | sorry for the delay and thanks for the patience |
20:01 | <sffc> | ystartzev: thanks! |
20:03 | <shu> | rbuckton: yay, thanks for presenting |
20:04 | <rbuckton> | 👍 |
21:09 | <msaboff> | rbuckton Someone on the JSC team ask a question about materializing "indices" and I didn't know the answer. |
21:11 | <msaboff> | rbuckton With the latest, just approved, version of the spec, is there a reason we don't set 'indices' to 'undefined' when the 'd' flag isn't present? |
21:12 | <msaboff> | I haven't run any perf tests on that variant and I don't remember it being discuss as part of the new option discussion. |
21:12 | <msaboff> | The team member noted that 'indices' has a different creation semantic than the 'groups' property. |
21:25 | <rbuckton> | msaboff: No particular reason, other than not to have it if its not requested. If we unconditionally create the property (like we do for groups), and leave it as `undefined`, I would have no issue. |
21:26 | <msaboff> | rbuckton Okay. I can run perf tests to see if there is any issue. I'll try to get to that by the end of the meeting. |
21:32 | <littledan> | +100 to ljharb 's point on the queue |
21:46 | <caridy> | I get the same impression than Waldemar, same issue with Trusted Types! |
21:47 | <caridy> | you must own/control the whole app, the whole code running for the app to make this any useful |
21:49 | <littledan> | I don't think Mark's proposed constraint makes sense. I think it would be a very unreasonable constraint on the development of the JS standard library |
21:49 | <littledan> | I agree that checking whether a template tag is literal is a rather low-level property |
21:51 | <jridgewell> | From Google’s experience, controling the whole app is expected |
21:52 | <caridy> | right! but majority of apps are not like that! anything using anything from NPM is automatically in the other category! |
21:52 | <jridgewell> | I’m not sure I agree |
21:53 | <jridgewell> | The point isn’t to guard against a truly malicious 3p script running on the page |
21:53 | <jridgewell> | It’s to guard against accidental usage |
21:54 | <ljharb> | i don't think there's agreement that that's not the point |
21:55 | <jridgewell> | Having `makeSafeUrl(codeIThoughtWasStaticButIsActuallyDynamic)` is a wholey different attack than `makeSafeUrl'https://im.actually.static'` |
21:55 | <jridgewell> | Potecting against a page that’s exposed `eval`, you’re entire app is insecure, their’s no fixing that. |
21:55 | <littledan> | there's sort of an interesting parallel between the shape of Mark's argument and previous arguments against SES-motivated features: both allege that the scenario where the feature is useful is impractical |
21:56 | <ljharb> | jridgewell: there's tons of ways to protect against eval |
21:56 | <littledan> | I wonder if we could dig into this practicality and think about how to assess it more broadly |
21:56 | <ljharb> | jridgewell: eval doesn't break closures. |
21:56 | <littledan> | ljharb: +1 |
21:56 | <Bakkot> | jridgewell I still pretty much agree with waldemar |
21:56 | <Bakkot> | if you are not concerned about malicious code, checking for "it's frozen and has a raw property" is good enough |
21:56 | <Bakkot> | if you are concerned about malicious code, this doesn't help |
21:58 | <littledan> | this is a sort of integrity feature. It gets exactly what you want in terms of "did this really come from syntax". A bunch of people asked me if this feature is related to my topic later, about tests like Map.isMap, and my initial reaction was "no" but now I've sort of come around to, they are kind of logically similar, in letting you check whether something really is something |
22:07 | <littledan> | jridgewell: Module blocks are like module specifiers, not namespace objects |
22:13 | <rbuckton> | If it was a _real_ ModuleSpecifier, you could do this... (though I'm unsure as to whether this is a good idea or not) |
22:13 | <rbuckton> | ``` |
22:13 | <rbuckton> | import { x } from module { |
22:13 | <rbuckton> | export const x = 1; |
22:13 | <rbuckton> | }; |
22:13 | <rbuckton> | ``` |
22:13 | <jridgewell> | I didn't realize you needed to import them. |
22:17 | <michaelficarra> | rbuckton: makes sense to me |
22:31 | <ljharb> | kind of seems like if we had `class.foo = bar` syntax we wouldn't have to use `this` |
22:33 | <shu> | i think ClassName suffices, still, kind of like kevin |
22:33 | <shu> | that was the conclusion from the subclassing hazard discussion |
22:34 | <shu> | it doesn't follow from that that we should *ban* `this`; i'm just saying ron's implication in the other direction that `this` is the natural way to assign static properties |
22:35 | <shu> | isn't that compelling |
22:36 | <ljharb> | i agree that repeating the class name is the status quo, and is "fine" |
22:36 | <ljharb> | but i also think repeating it sucks, and that's why i liked the `class.` proposal |
22:36 | <ljharb> | but we could go with "repeat the class name" here and still do `class.` later |
22:37 | <shu> | ah |
22:37 | <shu> | there are weird inconsistencies that cut both ways |
22:37 | <shu> | like Ron i feel _really_ strongly that vars shouldn't hoist out |
22:37 | <shu> | pls no |
22:38 | <Bakkot> | this is 50% idealogical and 50% a very practical concern that this straight-up doesn't work for half the code I wrote, which has `await` |
22:39 | <littledan> | I really think that this makes sense to treat like static field initializers |
22:39 | <littledan> | both in terms of scoping and ordering |
22:39 | <ljharb> | Bakkot: you write a lot of code that sets static properties on a class and uses `await`? |
22:39 | <Bakkot> | well, the proposal does not match filed initializers |
22:39 | <Bakkot> | ljharb of the code I wrote that sets static properties on a class, 50% uses initializers |
22:39 | <ljharb> | interesting, k |
22:39 | <Bakkot> | er |
22:39 | <Bakkot> | 50% uses await |
22:39 | <ljharb> | right |
22:39 | <littledan> | Bakkot: Well, it's fairly close; I'd prefer that it match entirely but I can buy the motivation for the changes |
22:39 | <Bakkot> | sorry, too many words going on |
22:40 | <ljharb> | what about this proposal doesn't match field initializers? |
22:40 | <Bakkot> | littledan this proposal is that static {} runs last, regardless of where it is relative to initializers |
22:40 | <littledan> | right, I'd be up for changing that |
22:40 | <Bakkot> | littledan fwiw the major upshot of this conversation is that I feel like static initializers should inherit the ability to `await` |
22:41 | <littledan> | well... I'm happy that we designed them to behave like little methods instead |
22:41 | <littledan> | that was a deliberate design |
22:41 | <Bakkot> | mostly to match regular fields |
22:41 | <Bakkot> | where it makes a lot of sense |
22:41 | <Bakkot> | makes much less sense for static methods |
22:41 | <Bakkot> | er, static initalizers |
22:43 | <ljharb> | Bakkot: notes, `a weight` should be `await` most often in the bot :-p |
22:45 | <rkirsling> | in a phrase like "allow a weight to carry over" you can hardly blame it lol |
22:45 | <ljharb> | lol true |
22:45 | <Bakkot> | ljharb I made that change a minute ago, just doesn't work if it ends up doing the post when it only has the `a` ready |
22:46 | <ljharb> | ah true |
22:46 | <littledan> | it was not underspecified. It has been specified as undefined the whole time |
22:46 | <littledan> | but the good thing is, the class features specs are all rebased and in great shape thanks to Ms2ger so this is more clear |
22:47 | <littledan> | you can see the spec at https://arai-a.github.io/ecma262-compare/?pr=1668 |
22:47 | <shu> | oh good |
22:47 | <shu> | allowing multiple interleaving blocks in order seems the most JS-y thing |
22:47 | <littledan> | (it = new.target in static field initializers) |
22:47 | <shu> | i see no good reason to limit to 1 |
22:47 | <littledan> | shu: +1 |
22:47 | <Bakkot> | would they interleave with static initalizers? |
22:47 | <Bakkot> | (presumably yes?) |
22:47 | <shu> | yes |
22:48 | <shu> | i think that's the point yes |
22:48 | <ljharb> | top-down order seems pretty important |
22:50 | <Bakkot> | oh god we've lost note taking |
22:54 | <Bakkot> | would `var`s be shared? |
22:54 | <Bakkot> | would they be visible to computed property names? |
22:54 | <ljharb> | i'd hope no |
22:58 | <shu> | Bakkot: yeah, i also hope each block would have its own var scope as the single initialized block does now |
23:04 | <littledan> | woohoo! |
23:06 | <rkirsling> | sorry, I'll help with notes tomorrow >_< |
23:29 | <Bakkot> | the bot's unedited output definitely has some of the character of gpt2 |
23:30 | <Bakkot> | where it's _almost_ coherent and _almost_ topical but it's also complete gibberish |
23:41 | <rkirsling> | hubs is way shinier than before |
23:41 | <rkirsling> | might just be a UI refresh but I like it |