00:42 | <shu> | could a node user enlighten me on the async contexts proposal, which seems to be largely lifted from the existing node api? |
00:43 | <shu> | by "automatic tracking through async tasks", how is that implemented exactly? |
00:44 | <shu> | any time a task or microtask is posted, the entered async local storage at the point of time of posting is remembered by the task? (is it COW?) |
00:51 | <devsnek> | shu: its like a linked list, each resource points to a parent resource |
00:52 | <shu> | sorry, i don't understand what that means |
00:52 | <bradleymeck> | shu: talks on async hooks may be more enlightening on underlying structure of the hooks used |
00:52 | <devsnek> | "this promise was created in this timeout which was created in this callback from this fs function which happened in the AsyncContext.run callback" |
00:52 | <bradleymeck> | it creates a new link like devsnek said in a kind of tree structure every time you queue a new async task |
00:53 | <shu> | ah, there's a linked list that functions remember at creation time? |
00:53 | <bradleymeck> | the link is by id not by a transition between actual references |
00:53 | <shu> | no, not functions, that tasks remember at creation time? |
00:53 | <bradleymeck> | shu: not a real linked list, but an ordering of events that allows you to create one |
00:53 | <bradleymeck> | shu: well the tasks when they go through various lifecycles keep the ids around |
00:54 | <devsnek> | each task gets an id and via tracking init/before/after events of each task you can create a graph |
00:54 | <shu> | i see |
00:54 | <shu> | are these ids tracked by node unconditionally? |
00:54 | <devsnek> | no, it is somewhat expensive |
00:55 | <shu> | so when an AsyncContext.start or whatever is called, it tells node to start tracking task ids through tasks' lifetime state transitions |
00:55 | <devsnek> | yeah, and then it stores the relationships in a map somewhere |
00:55 | <shu> | gotcha |
00:55 | <shu> | okay, that helps a lot, thank you! |
00:55 | <shu> | this was not at all clear from the explainer |
00:57 | <devsnek> | 👍🏻 |
01:01 | <devsnek> | shu: https://gist.github.com/devsnek/07a61aec7d9f40d1495048790dd30a8f |
01:02 | <shu> | what does that module do? |
01:02 | <devsnek> | it does the map linked list stuff |
01:02 | <devsnek> | it might actually be missing some edge cases |
01:03 | <devsnek> | but it should give a bit of a picture |
01:05 | <shu> | oh, it implements the async context |
01:05 | <shu> | cool, thanks |
03:52 | <Bakkot> | devsnek: did you want to update https://github.com/tc39/ecma262/pull/1781 ? Otherwise I'll force-push up some commits myself |
06:53 | <mathiasbynens> | ljharb: re: https://github.com/tc39/Reflector/issues/282#issuecomment-635795520, the pdf link points to the older candidate too |
06:53 | <ljharb> | whoops |
06:53 | <ljharb> | fixing |
06:53 | <ljharb> | clipboard fun |
06:54 | <mathiasbynens> | yayyyyyyyy thanks for the fix |
06:54 | <ljharb> | thanks, should be fixed |
06:54 | <ljharb> | np, ty for catching it so fast |
06:54 | <ljharb> | i'm going to blame it on adobe acrobat stealing all my cpu :-p |
07:10 | <rkirsling> | that is one packed agenda |
07:19 | <ystartsev> | devsnek looks like you found the bug, but yes, we are implementing it now which is why we want to sort out the spec side of things |
13:05 | <ystartsev> | what is Michael Ficarra's nickname on here? |
13:09 | <mathiasbynens> | bterlson: could you please add Marja Hölttä (marjakh) as a delegate so she can access the Reflector? (she works on V8) |
13:26 | <ystartsev> | mathiasbynens: you can open an issue here and we will onboard her: https://github.com/tc39/Admin-and-Business/issues |
13:27 | <mathiasbynens> | ystartsev: thanks, will do. fyi https://github.com/tc39/Reflector#readme still says to ping bterlson |
13:28 | <ystartsev> | ooo thanks for the heads up |
13:28 | <ystartsev> | will udpate |
14:06 | <mathiasbynens> | ystartsev: cheers! |
14:06 | <mathiasbynens> | ystartsev: btw, good luck with the stream later! i can't wait |
14:20 | <ystartsev> | _internal screaming_ |
14:20 | <ystartsev> | see you there! |
14:20 | <ystartsev> | or |
14:20 | <ystartsev> | rather |
14:20 | <ystartsev> | you know what i mean |
15:59 | <Bakkot> | ystartsev: michael ficarra is not on IRC except during meetings, alas |
16:00 | <Bakkot> | he's probably reachable by email though |
16:05 | <devsnek> | ystartsev: is there a schedule somewhere for your future streams and tc39 q/a and whatnot |
17:02 | <ystartsev> | devsnek: there should be a schedule here :https://www.twitch.tv/codehag/schedule |
17:02 | <ystartsev> | and |
17:03 | <ystartsev> | here: https://developer.mozilla.com/events/compiler-compiler-yulia-startsev/ |
17:03 | <devsnek> | that twitch link just shows me your last broadcast |
17:04 | <devsnek> | but the second link works, thx |
17:49 | <devsnek> | ystartsev: iterator slides are private |
17:53 | <ystartsev> | devsnek: fixed |
17:54 | <devsnek> | thanks! |
18:04 | <ljharb> | ftr (unless the chairs want the notifications) yall don't need to make PRs to the agenda to add slides for anything that's not a stage advancement, or for schedule constraints, you can just commit directly to master |
18:35 | <ystartsev> | ljharb: _i have done horrible things when pushing to master_ |
18:35 | <ystartsev> | thats why i make prs :P |
18:37 | <ljharb> | haha fair enough |
18:44 | <keith_miller> | Why does Set use `set` to add things and Map use `add`... ugh |
18:44 | <keith_miller> | 😭 |
18:45 | <Bakkot> | keith_miller to support subclassing |
18:45 | <keith_miller> | Can we add a Map.prototype.set and a Set.prototype.add that are just aliases of the other? |
18:45 | <keith_miller> | Bakkot: ? |
18:45 | <Bakkot> | oh, wait, the different names |
18:45 | <ljharb> | keith_miller: they take diff arg signatures |
18:45 | <Bakkot> | sorry |
18:45 | <ljharb> | keith_miller: also Map uses set and Set uses add, i think? |
18:45 | <Bakkot> | I thought you were asking about why the constructors invoke the methods |
18:45 | <keith_miller> | ljharb: No I mean Map.prototype.set == Map.prototype.add |
18:45 | <ljharb> | keith_miller: you set things in a map, you add things to a set |
18:45 | <keith_miller> | Bakkot: Ah, on |
18:46 | <keith_miller> | ljharb: You have it backwards :P |
18:46 | <keith_miller> | you set things in a set and add things to a map |
18:46 | <keith_miller> | lol |
18:46 | <ljharb> | `Set.prototype.add` is the method that exists right now |
18:46 | <ljharb> | lol i do not agree with your intuition |
18:46 | <keith_miller> | oh nvo |
18:46 | <keith_miller> | oh nvm |
18:46 | <keith_miller> | I just want to have the same name |
18:46 | <ljharb> | a set is a list, you add things to it |
18:46 | <drousso> | it is aggravating to have different names |
18:46 | <ljharb> | right but they're different methods |
18:46 | <ljharb> | you add one thing at a time to a set; you set a key in a map to have a value |
18:47 | <keith_miller> | You can add things to a map? |
18:47 | <Bakkot> | I also have to look this up almost every time |
18:47 | <drousso> | ^ +! |
18:47 | <keith_miller> | I'm adding a new key to my map |
18:47 | <drousso> | yeah |
18:47 | <ljharb> | that doesn't make any sense to me |
18:47 | <ljharb> | without a value you're not mapping to anything |
18:47 | <keith_miller> | I'd be cool with an add that returns a boolean if it's a new key or something |
18:47 | <ljharb> | you don't add properties to an object either, you set them to a value |
18:47 | <drousso> | the functions can have different signatures, but it'd be nice to have a `Map.prototype.add` |
18:48 | <keith_miller> | Oh, I'm not saying it has the same signature as Set.prototype.add |
18:48 | <drousso> | i would argue that that's semantics, not necessarily how developers think |
18:48 | <ljharb> | if it has a different signature then it should have a different name imo |
18:48 | <ljharb> | drousso: i would argue those two should overlap |
18:48 | <keith_miller> | I find it more confusing that I have to figure out which name is which lol |
18:48 | <ljharb> | fair |
18:48 | <keith_miller> | 100% of the time |
18:49 | <ljharb> | i don't think this is as universal as "putting the usb plug in the wrong way" tho |
18:49 | <drousso> | ^ ditto |
18:49 | <keith_miller> | I think Map.prototype.add wouldn't be that confusing |
18:49 | <keith_miller> | especially if it returns a bool |
18:49 | <drousso> | i wish it returned a bool 😭 |
18:49 | <ljharb> | then it wouldn't be chainable |
18:49 | <keith_miller> | I'm ok with that |
18:49 | <drousso> | i've never once wanted to chain |
18:49 | <keith_miller> | If you want the chaining you can use set! |
18:50 | <drousso> | whereas i often want to know "did this exist before" in a single step |
18:50 | <drousso> | heck that could be the difference between `Map.prototype.set` and `Map.prototype.add` |
18:50 | <drousso> | err, `Set.prototype |
18:50 | <keith_miller> | although the lack of chaining may be confusing between Set and Map |
18:50 | <ljharb> | the new method seems fine, but conflicting names isn't something i'd be ok with |
18:50 | <drousso> | also, there's already some weirdness with `String.prototype.indexOf` and `Array.prototype.indexOf` |
18:51 | <keith_miller> | Maybe we should add like item or something since that's what all the DOM containers have anyway? |
18:51 | <keith_miller> | although item is an awful name |
18:51 | <ljharb> | drousso: wait, what weirdness? |
18:51 | <drousso> | they share the same name, and yet they don't do the same thing |
18:52 | <ljharb> | drousso: in what way do they differ? |
18:52 | <keith_miller> | drousso: Yeah, we should have Map.prototype.indexOf :P |
18:52 | <shu> | drousso: boy do i have bad news for you about natural languages |
18:52 | <shu> | keith_miller: i am proposing to add item did you see |
18:52 | <drousso> | ljharb `Array.prototype.indexOf` finds an item in the array whereas `String.prototype.indexOf` finds a substring not an item |
18:52 | <shu> | well, tab is, i'm championing |
18:52 | <keith_miller> | shu: !!!! |
18:52 | <drousso> | shu i saw that and loved it |
18:52 | <shu> | keith_miller: relative indexing |
18:53 | <keith_miller> | Wait, for array? |
18:53 | <ljharb> | drousso: ah, sure, that's fair |
18:53 | <shu> | keith_miller: all number indexables |
18:53 | <Bakkot> | are we adding item to set and map? |
18:53 | <shu> | nah |
18:53 | <Bakkot> | oh :( |
18:53 | <Bakkot> | ah well |
18:53 | <ljharb> | drousso: but we're not trying to add a new thing named indexOf now :-p |
18:53 | <drousso> | oh yes true |
18:53 | <ljharb> | shu: wait, strings too? |
18:53 | <keith_miller> | shu: I wouldn't be opposed to adding an item to Map and Set |
18:53 | <keith_miller> | for consistency |
18:53 | <drousso> | ljharb that was more an example of "things with the same name doing different things" |
18:53 | <shu> | keith_miller: that... take integers? or just do something different? |
18:53 | <shu> | ljharb: strings, arrays, typedarrays |
18:53 | <Bakkot> | strings are weird for .item because they have two notions of "the nth thing" |
18:54 | <keith_miller> | I mean the array one presumably takes non-integers right? |
18:54 | <keith_miller> | Or does it error? |
18:54 | <keith_miller> | I would assume it toNumbers them |
18:54 | <shu> | keith_miller: yeah, it ToIntegers |
18:54 | <ljharb> | i like the proposal's semantics but am very questionable on the name "item" |
18:54 | <drousso> | shu love the negative value semantics especially |
18:54 | <ljharb> | but also yeah, weird on strings wrt code units/points |
18:54 | <keith_miller> | shu: So Map and Set presumably wouldn't do that... |
18:54 | <Bakkot> | name has to be item for reasons |
18:55 | <keith_miller> | but otherwise would be the same? |
18:55 | <Bakkot> | see proposal |
18:55 | <keith_miller> | e.g. it's get |
18:55 | <shu> | keith_miller: i'm open to that? i just haven't thought about it |
18:55 | <ljharb> | i saw, but i don't like those reasons |
18:55 | <shu> | ljharb: i'm gonna need a better reason than "i don't like it" |
18:56 | <ljharb> | shu: i haven't fully formed an opinion yet, but in general i don't like naming/semantics choices being made for us, especially when it's presented as "we accept this coercion, or the proposal is withdrawn" |
18:56 | <keith_miller> | shu: But yeah, I support item. Even if I didn't the powers on high have told me to support it :P |
18:56 | <Bakkot> | ljharb: that seems like one of those things you will should learn to live with |
18:56 | <Bakkot> | the name choice _has_ been made for us |
18:56 | <Bakkot> | it does already exist |
18:57 | <Bakkot> | you can't unmake it |
18:57 | <ljharb> | not on arrays etc |
18:57 | <shu> | yeah, i think this is the reality of working on the JS platform, which includes the web platform |
18:57 | <ljharb> | at times it is, yes. |
18:57 | <keith_miller> | I think the consequences of not having it on array is worse |
18:57 | <shu> | agreed |
18:57 | <drousso> | ^ ditto |
18:57 | <ljharb> | i hope to hear about that during the presentation |
18:57 | <keith_miller> | unfortunately |
18:57 | <drousso> | ^ ditto |
18:58 | <keith_miller> | I think item name was a poor choice fwiw but that ship has sailed for W3C |
18:58 | <shu> | ljharb: i don't get the sense you can be receptive to it if your starting point is "web platform is only part of the js ecosystem part of the time" |
18:58 | <ljharb> | i'm receptive to places where the spec needs to change to match web reality |
18:59 | <shu> | i won't be making any new arguments than what's already in tab's explainer |
18:59 | <ljharb> | i don't think that's the same scenario as being forced (in the general case) to broadly support design choices, good or bad, just because the web made them elsewhere |
18:59 | <ljharb> | like i said, i haven't fully formed an opinion, and def need to give the explainer a reread |
19:01 | <shu> | ljharb: also the presentation isn't "accept this name or proposal is withdrawn" |
19:02 | <shu> | ljharb: it's "there're actually some compat risk with naming it item, but everything would be better for the ecosystem if it _could_ be named item, so barring incompat data, strongly prefer 'item'" |
19:02 | <keith_miller> | shu: The upside of something like `item` over `at` is that it "nicely" extends to other container classes that have a single key |
19:02 | <shu> | keith_miller: ah i didn't think about that |
19:02 | <keith_miller> | since `at` strongly implies index whereas I don't see item in the same way |
19:02 | <shu> | i mean item is such a terrible java-ism name |
19:03 | <keith_miller> | it is *java*script! |
19:03 | <shu> | but it is generic like that |
19:03 | <shu> | one time at jsconf eu some german dude saw a bunch of us coming out of the event venue and asked us what it was about |
19:03 | <ljharb> | shu: the explainer says the name is a requirement; i'm sure i saw the wording i used somewhere but def not in the explainer, so ¯\_(ツ)_/¯ |
19:03 | <shu> | someone said javascript |
19:03 | <shu> | and the german dude was like "yahweh script? is it religious?" |
19:06 | <keith_miller> | shu: I mean based on the strength of some peoples opinions on JS it's comparable to a religion! :P |
19:11 | <Bakkot> | prettier's official policy is to add styling options only if means avoiding taking sides in a holy war |
19:12 | <Bakkot> | so: tabs vs spaces, semicolons |
19:13 | <drousso_> | 🤣🤣🤣🤣🤣 |
19:13 | <drousso_> | that is my new favorite thing ever |
19:27 | <devsnek> | the problem here is that the proper name for both maps and sets is insert |
19:48 | <drousso> | personally, i would've been fine with that since they both had the same name |
19:52 | <rkirsling> | oof I'm honestly more bugged by the keys/values/entries situation in Set |
19:52 | <drousso> | orly? |
19:52 | <drousso> | what about? |
19:53 | <rkirsling> | keys is values and thus entries is just intentionally duplicated |
19:53 | <drousso> | oh |
19:53 | <drousso> | ¯\_(ツ)_/¯ |
19:54 | <drousso> | personally i'm ok with that cause it means there's consistency with `Map` |
19:54 | <rkirsling> | that is the stated motivation but I really wonder whether it's useful |
19:56 | <rkirsling> | the thing is that `get` is the thing you do with a populated Map but there is no `get`-like operation for a Set, so that implies that Map will have a `set` but says nothing of Set |
19:57 | <ljharb> | get on a Set would be `s.has(k) ? k : undefined`, i suppose |
19:57 | <rkirsling> | yeah |
19:57 | <rkirsling> | yeah I mean tbf that could exist, it just doesn't |
19:58 | <rkirsling> | and I could see people disliking `new Set().set`, so it doesn't surprise me that a different word was chosen |
20:00 | <rkirsling> | hmm I guess Rust and C++ alike use `insert` as devsnek said |
20:00 | <rkirsling> | for both Map and Set |
20:01 | <devsnek> | i think some languages also use "put" |
20:07 | <ljharb> | to me "put" weakly implies creation tho |
20:12 | <rkirsling> | wait what we're doin' Teams this time? |
20:12 | <ljharb> | akirose: wait, we're using teams for this plenary? |
20:13 | <ljharb> | why? zoom works great |
20:13 | <devsnek> | yay not zoom |
20:13 | <ljharb> | teams' UX on ios is painful :-/ |
20:13 | <ljharb> | like, getting into the call, i mean |
20:14 | <akirose> | ? have you tried lately? bc i just hopped onto a call from my personal computer and it was fill in name, click join |
20:14 | <akirose> | Zoom "works great" but a whole lotta people won't touch it with a 10-foot pole |
20:14 | <akirose> | because they are a garbage company |
20:15 | <akirose> | and their product has both privacy and security issues |
20:15 | <ljharb> | i tried to get on a Teams call with daniel a month or two ago |
20:15 | <ljharb> | so far all the issues i'm aware of that are unique to zoom can be bypassed by using the web, or the ios app, instead of the native desktop app |
20:16 | <akirose> | ¯\_(ツ)_/¯ feel free to hop on to the tech check |
20:16 | <ljharb> | seems like a pretty big last minute change :-/ |
20:24 | <Bakkot> | I for one am excited to add a new entry to my menagerie of video chat clients |
20:25 | <devsnek> | how long until we do plenary over discord |
20:28 | <akirose> | does discord have video yet? |
20:29 | <ljharb> | eesh, nvm, i'll stop complaining about teams |
20:30 | <devsnek> | akirose: it's had video for a while :P |
20:30 | <devsnek> | (in my experience the highest quality video too) |
20:30 | <akirose> | lollll look i only use it for union organizing |
20:30 | <akirose> | uhh. |
20:30 | <akirose> | i mean. |
20:30 | <akirose> | NOTHING. |
20:31 | <devsnek> | haha |
20:31 | <akirose> | devsnek: in that case idk i wouldn't rule anything out completely. i don't see it happening any time soon but never say never. |
20:31 | <devsnek> | yeah i was mostly joking but its always good to have options |
20:31 | <devsnek> | each channel can be its own video session which makes breakouts super duper easy |
21:06 | <shu> | yeah what clients do i have now... webex, zoom (which had to be uninstalled per corp policy), now teams, i guess not too many |
21:09 | <akirose> | fwiw rkirsling just joined from the web client and it seemed to work perfectly fine. he didn't test presenting from the web client though. |
21:09 | <rkirsling> | :nod: |
21:10 | <devsnek> | linux version is a bit odd but it seems to work |
21:11 | <akirose> | one gotcha with the linux client: not 100% sure but it seems like there's no "share window" option, only "share entire desktop" |
21:12 | <devsnek> | i think that depends on your window system |
21:12 | <devsnek> | i can double check |
21:14 | <devsnek> | yeah i'm only getting desktop option weird |
22:09 | <leobalter> | mathiasbynens shu: do you know any historical bug for V8 setting extra own properties (non configurable) to function objects? Basically "arguments" and "caller" |
22:11 | <leobalter> | ljharb just pointed me to https://tc39.es/ecma262/#sec-addrestrictedfunctionproperties |
22:11 | <leobalter> | I don't get where this abstraction happens. I need to go deeper there |
22:11 | <ljharb> | looks like there's nothing that makes them be own properties, only prototype throwers |
22:12 | <leobalter> | IIRC this is something that happens historically on v8 and jsc, as we can observe still happens today |
22:13 | <leobalter> | I'd like to find a specific bug to point it out |
22:13 | <leobalter> | let's see what a google search gives me (not easy with these keywords) |
22:15 | <leobalter> | got it! the search on v8's bug tracker is great, one would wonder why. |
22:15 | <leobalter> | https://bugs.chromium.org/p/v8/issues/detail?id=5047&q=caller%20arguments%20own%20properties&can=2 |
22:15 | <leobalter> | also https://bugs.chromium.org/p/v8/issues/detail?id=6049 |
22:17 | <leobalter> | and we do have tests: https://github.com/tc39/test262/commit/a266cfa8cb8c17f5724298f2205c03c26c7c83e0 |
22:19 | <leobalter> | rkirsling anything related to this in jsc? |
22:20 | <leobalter> | https://test262.report/browse/built-ins/Object/internals/DefineOwnProperty/consistent-value-function-arguments.js |
22:22 | <rkirsling> | I mean I have no background on this but searching found https://bugs.webkit.org/show_bug.cgi?id=158116 |
22:39 | <Bakkot> | there is more background in https://github.com/tc39/ecma262/issues/562 |
22:39 | <Bakkot> | and https://github.com/tc39/ecma262/issues/877 |
22:39 | <Bakkot> | and https://github.com/claudepache/es-legacy-function-reflection/ |
22:40 | <Bakkot> | specifically https://github.com/claudepache/es-legacy-function-reflection/blob/master/analysis.md |
23:14 | <leobalter> | thanks for the links, Bakkot |
23:14 | <leobalter> | I'm afraid they focus more in arguments and caller inside the function rather than as properties of the function object |
23:15 | <leobalter> | but it's a very weird behavior that makes some mess in a quick switch from strict to sloppy mode |
23:18 | <leobalter> | Here is an example where this problem subtly affects other operations: https://gist.github.com/leobalter/0d67d314b66b14d34668d2d8308b9a6c |
23:39 | <shu> | what is the ask here? |