00:08 | <shu> | for the ResizableArrayBuffer rounding discussion, i filed two issues: https://github.com/tc39/proposal-resizablearraybuffer/issues/23 and https://github.com/tc39/proposal-resizablearraybuffer/issues/24 to separate the questions of rounding maxByteLength vs byteLength, please let me know of your thoughts in there |
00:14 | <devsnek> | shu: is there a chance the rounding could be used for fingerprinting? |
00:17 | <shu> | devsnek: yeah, i called that out in the presentation. depending on the degree of implementation latitude allowed |
00:18 | <shu> | devsnek: i'm not sure how much of a fingerprinting concern that is vs other vectors |
00:18 | <devsnek> | yeah, its nice to keep a handle on though |
00:19 | <shu> | it'll tell you the version(s) of the VM you're on, probably, but not much else |
00:19 | <shu> | that kind of fingerprinting is inherently built-in via other vectors as well |
01:58 | <shu> | rbuckton: do you happen to have any links to positive or negative sentiment expressed for match indices? |
01:58 | <shu> | a recent refinement of the blink shipping process is evidence supporting "developer signal" |
01:59 | <shu> | i thought we have captured in the notes somewhere that non-browser dev practitioners (e.g. ljharb) would use match indices if they were available, but i can't find it |
02:05 | <ljharb> | i don't have concrete use cases off hand, but i have clear memories of needing this functionality in the past |
02:06 | <ljharb> | shu: probably not, but does 304 votes on https://twitter.com/ljharb/status/1154100770985242624 help? |
02:09 | <shu> | ljharb: yes it does! |
02:09 | <ljharb> | yay |
02:09 | <shu> | well, at least obliquely |
02:09 | <ljharb> | it's not *no* signal, i guess |
02:09 | <shu> | the amount of votes show that a some devs in the wild care about it |
02:10 | <ljharb> | a few replies also |
02:10 | <shu> | and we can probably reasonably extrapolate that a portion of the 300 participants are non-browser devs |
02:10 | <shu> | yeah, the replies are good |
02:10 | <shu> | i am not happy about this new shipping process requirement, given that i think tc39 already represents practitioner constituents directly through delegates such as yourself |
02:11 | <shu> | but otoh, having evidence too show there's positive sentiment does seem fair |
02:11 | <ljharb> | sure |
02:11 | <ljharb> | but also, a tweet "do yall like this?" from a chromium account would probably answer that rapidly |
02:11 | <shu> | what am i, devrel? |
02:11 | <ljharb> | lol |
02:12 | <shu> | (no disparagement too devrel, but being that popular seems hard) |
02:12 | <shu> | stupid key sticking on the mba keyboard |
13:10 | <littledan> | I'm pretty unsympathetic to both the strong-pro and strong-con arguments on return |
13:11 | <littledan> | I don't think that we have to care so much about programmers suddenly generating an intuition that do expressions get their own return semantics |
13:11 | <littledan> | I mean, there's a completely unbounded amount of possible intuitions people could get. It just isn't possible to control for these. |
13:12 | <littledan> | On the other hand, I don't mind restricting the "power" of do expressions to not let them do control flow that jumps over their boundaries; that feels reasonable |
18:00 | <robpalme> | anyone having trouble getting into the meeting? |
18:00 | <robpalme> | we have 16 folk in |
18:09 | <rkirsling> | littledan: I don't think I understand what position you're expressing (aside from the last sentence which makes sense) |
18:09 | <littledan> | rkirsling: That, I'd be OK with return being permitted or prohibited from do expressions |
18:10 | <littledan> | what I disagree with is the strong arguments that it must be included or excluded |
18:10 | <rkirsling> | ah yeah. I agree with that |
18:12 | <michaelficarra> | haxjs: are you currently available for your presentation? |
18:15 | <michaelficarra> | is the transcription bot dead? |
18:15 | <michaelficarra> | never mind, it just got congested |
18:17 | <ryzokuken> | is IRCCloud okay? |
18:17 | <rickbutton> | works for me |
18:18 | <ljharb> | given that it wouldn't make any sense at all to allow `return` in `async do`, it seems like thats a consistency argument to forbid `return` in `do`. |
18:18 | <ryzokuken> | rickbutton: do you see the netsplits? |
18:18 | <ryzokuken> | or is it something on my end? |
18:18 | <ljharb> | what is graalix (sp) ? |
18:18 | <rickbutton> | only if the return returns from the surrounding function, not the do ljharb, but yes i agree with the consistency argument |
18:19 | <rkirsling> | oh phew it's back |
18:19 | <ljharb> | rickbutton: true. if it returns just from the `do` it could work in both |
18:19 | <rkirsling> | supposedly unstable more than completely out: https://twitter.com/IRCCloud/status/1354490157563572228 |
18:23 | <gibson042> | ljharb: I've seen it as "grawlix" |
18:23 | <gibson042> | https://en.wiktionary.org/wiki/grawlix |
18:23 | <ljharb> | gibson042: ty |
18:24 | <ljharb> | rkirsling: i must be on ipv4, i didn't notice any issues |
18:24 | <TabAtkins> | ljharb: I dont' understand - why wouldn't it make sense to `return` in `async do`? |
18:24 | <TabAtkins> | It seems to make exactly as much sense as returning in a sync do. |
18:24 | <ljharb> | TabAtkins: kevin explained, because the containing function has already returned |
18:25 | <TabAtkins> | OH WAIT |
18:25 | <TabAtkins> | I'm being dumb, ignore me |
18:25 | <TabAtkins> | Yeah, the async context would prevent a `return` from escaping |
18:25 | <ljharb> | right |
18:25 | <ljharb> | "early exiting the `do` with an explicit value" makes sense in both |
18:25 | <ljharb> | but "early returning the containing function" can only work in sync do |
18:25 | <ystartsev> | I had the same comment as shu, but yep that is our concern as well |
18:26 | <TabAtkins> | Yes. So I agree, given that I think `async do` is a must-have on top of sync-do, and `return` would *necessarily* do something local in async-do, *and* `return` in sync-do has two different obvious things it could do, we should just ban `return` in sync-do. |
18:27 | <rickbutton> | i still argue that only one of those obvious things is obvious |
18:27 | <rickbutton> | (to me, a return inside a do does not imply return from outer function) |
18:28 | <ljharb> | TabAtkins: that is my conclusion as well |
18:28 | <TabAtkins> | i popped a comment on the queue to state it on record |
18:28 | <ljharb> | sweet |
18:29 | <TabAtkins> | rickbutton: It was perfectly obvious to me that it would return from outer function, so my statement was correct that there are two obvious things. ^_^ |
18:29 | <rickbutton> | yeah i understand i just really want to be able to early return from these |
18:30 | <ljharb> | make a follow-on for a new keyword to do it :-p |
18:30 | <TabAtkins> | yup |
18:30 | <rickbutton> | gross |
18:30 | <ljharb> | `return.from.do.expression value` |
18:30 | <rickbutton> | early_exit |
18:30 | <ljharb> | `return.{} value` |
18:30 | <rickbutton> | do.return |
18:30 | <ljharb> | ha, nice |
18:30 | <rickbutton> | ugh, they keep getting worse |
18:31 | <TabAtkins> | meta properties are real :millie-bobby-brown-mind-blown-gif: |
18:31 | <ljharb> | `do.yield` |
18:31 | <rickbutton> | gotta get do generators first |
18:31 | <ljharb> | oh_no.jpg |
18:32 | <rickbutton> | I'm gonna keep playing devils advocate and say that you could say the opposite, that the fact that async-do return can only work one way, that sync should just also work that way |
18:32 | <rickbutton> | troll.png |
18:33 | <ljharb> | ban it from both, yes |
18:33 | <ljharb> | (i don't actually care about yield either way) |
18:34 | <ljharb> | wsdferdksl: what's the confusion about `this`? |
18:34 | <ljharb> | littledan: jinx, you owe me a coke |
18:34 | <littledan> | haha |
18:36 | <littledan> | I guess Waldemar was doing a kind of reductio ad absurdum and wasn't actually arguing to ban `this` |
18:36 | <littledan> | so, I don't think I'll follow up with it in the issues |
18:37 | <michaelficarra> | maybe we disable transcription for this topic? |
18:38 | <ryzokuken> | michaelficarra: I guess it would be best to manually transcribe? |
18:38 | <TabAtkins> | I also don't understand what the `this` confusion could even possibly be. Where would you get the `this` binding other than from the outer context? |
18:39 | <michaelficarra> | ryzokuken: I think so, yes |
18:47 | <ystartsev> | huh.. is that the right understanding ljharb? i was thinking that the brand check would be from the class, and you wouldn't need to check each one? |
18:48 | <ljharb> | ystartsev: it depends how rigorous you need to be; technically you can have one private field installed on a number of objects, and other private fields on other objects |
18:48 | <TabAtkins> | rickbutton: I'm curious why your intuition says that `return` in sync-do should be block-local, but `await` and `yield` escape the block. |
18:48 | <ljharb> | ystartsev: but it's pretty obscure. in the common case, the checks are basically the same - whether "has one field", "has all fields", or hax's "is class C" |
18:49 | <rickbutton> | TabAtkins: I don't think await and yield should escape the block, if return doesn't either |
18:49 | <ystartsev> | cool, thanks for clarifying |
18:49 | <ljharb> | ystartsev: so for the common case, it's just about which is clearer to understand. my argument is that both are needed for that, and mine is the lower-level one that the higher-level one can be built with; hax's can add the higher-level one on top. |
18:49 | <TabAtkins> | Ah, k. So that makes sync-do much less useful in async contexts. (yield is definitely of marginal utility either way) |
18:50 | <TabAtkins> | Hmmmm I can feel my intuition reconfiguring, I'll have to write an issue. |
18:50 | <rickbutton> | yeah, you would instead use an async do in an async context |
18:51 | <rickbutton> | yeah plz do, ill comment my thoughts too. im not an objector either way, do/async do will have great utility either way |
18:51 | <TabAtkins> | Ehhh that's just more keywords scattered about. Would mean that if your do-expr needs to await something, you have to prefix it with `await async` |
18:51 | <rickbutton> | further down the rabbit hole, do inside async is implicitly an async do |
18:51 | <rickbutton> | feels gross |
18:52 | <rickbutton> | actually nvm |
18:52 | <littledan> | I'm kinda confused by examples. None of them field initializers, so instances will either have all fields or none, so I don't understand this point about checking all of the fields. You should only ever check one. |
18:52 | <rkirsling> | rickbutton: no that distinction was addressed |
18:53 | <ystartsev> | wsdferdksl: do you want to ask that clarifying question now or is it ok to wait until he finishs? |
18:53 | <rickbutton> | yes, sorry missing words from that sentence, i mean to suggest that as an alternative to requiring an async do inside async ctx in order to await inside do, not that async/sync do inside async ctx are the same |
18:53 | <rickbutton> | but either way bad idea ignore it |
18:59 | <robpalme> | it sounds like, if the class uses class.hasInstance, we expect the implementation to tag the instances somehow so that the check can occur later. and the reason for the "if" is that this tagging may have a memory overhead. |
19:04 | <ljharb> | ystartsev: 3 replies,. waldemar's is first |
19:05 | <ystartsev> | whoops, it jumped ahead |
19:08 | <ljharb> | ooh, very good question |
19:12 | <littledan> | to be concrete, it sounds like Hax is proposing that this get added in the same way as methods (at the beginning of the fields). Is that accurate? |
19:13 | <ljharb> | it's not clear if it would install a new field and check for that, or if it would check for "all expected private fields" |
19:14 | <littledan> | OK, it sounds like the idea is to leave this as an open question for later |
19:17 | <ljharb> | ystartsev: these are stage 2 concerns, can we maybe defer them? |
19:18 | <jridgewell> | just now joining. How does `hasInstance` work with subclasses? |
19:19 | <ljharb> | jridgewell: it'd return true as long as the subclass called super, i assume |
19:19 | <ljharb> | just like `#x in o` would |
19:19 | <jridgewell> | Ok |
19:22 | <littledan> | I support Stage 3 |
19:32 | <michaelficarra> | I am deeply appreciative of the unique perspective that Bradley brings to committee :-) |
19:32 | <akirose> | me too! |
19:33 | <wsdferdksl> | Agree |
19:34 | <akirose> | also something i was thinking about is how much i respect how a handful of y'all are super comfortable saying "i don't know" (Bradley included) when relevant. the committee does better work because of it. |
19:40 | <shu> | ystartsev: request for facilitator to keep discussion on GC short |
19:40 | <shu> | it's not that material imo |
19:40 | <gibson042> | haxjs: given `class C extends class{constructor(v){return v}} { constructor(){super(...arguments)} #a; #x = (()=>{throw new Error()})(); #b; }`, evaluating `new C({})` will add private field #a but *not* #b |
19:40 | <ystartsev> | ok |
19:42 | <haxjs> | @gibson042 , I understand that. The issue is whether such edge case is strong enough to support another individual syntax feature for that. |
19:42 | <gibson042> | what do you mean by "another" individual syntax? |
19:42 | <littledan> | maybe we can ask for acknowledgement? |
19:44 | <bradleymeck> | forgot i had to connect, sorry |
19:44 | <bradleymeck> | littledan: to my knowledge per my reading, a finalizer never *must* fire, but it appeared it cannot fire if its target is stored in a private field? |
19:45 | bradleymeck | goes back rereading weakrefs |
19:46 | <haxjs> | @gibson042 I mean use `#x in o` to test these edge cases. |
19:47 | <gibson042> | yes, the point of this proposal is to make it more ergonomic to detect the presence vs. absence of a private field |
19:47 | <gibson042> | it adds no new capability, just syntax sugar |
19:48 | <shu> | what is going on |
19:48 | <ystartsev> | we want to make sure we don't go ahead without a soun check |
19:49 | <ljharb> | we don't want technical difficulties or language barriers to cause someone's voice to go unheard. |
19:49 | <shu> | ah okay, sg |
19:51 | <wsdferdksl> | ystartsev: Thank you for herding cats this morning! |
19:51 | <ystartsev> | that was one of the harder ones! |
19:51 | <littledan> | well-done ystartsev ! |
19:51 | <rickbutton> | fantastic job |
19:52 | <wsdferdksl> | I agree |
19:53 | <ljharb> | ystartsev: +1, thank you very much for chairing a contentious topic so calmly |
19:54 | <shu> | +2 |
19:57 | <robpalme> | can the google folk make sure Frank Tang is around to present next |
19:58 | <shu> | i will ping him |
19:58 | <shu> | first up after lunch? |
19:58 | <robpalme> | it's ok - he is here on the call |
20:01 | <Bakkot> | if anyone is in touch with the person who was on the call as "Zelda Jay", can you ask them to add their preferred abbreviation to https://github.com/tc39/notes/blob/master/delegates.txt ? |
20:02 | <Bakkot> | (or tell me which one it is, if they're already on it) |
20:11 | <ljharb> | i believe it's LZU |
20:12 | <ljharb> | haxjs ^ can you confirm? |
20:12 | <haxjs> | confirm what? |
20:13 | <ljharb> | haxjs: that zeldajay is limin zhu |
20:13 | <haxjs> | Ok I will check that |
20:14 | <ljharb> | thanks! |
20:14 | <ljharb> | (if not, then "which abbreviation in delegates.txt is zeldajay") |
20:14 | <haxjs> | It should be LZJ |
20:15 | <ljharb> | aha ty |
20:15 | <haxjs> | zeldjay is Zhi Jie Li (LZJ) I believe |
20:15 | <ljharb> | https://github.com/tc39/notes/blob/master/delegates.txt#L372, perfect |
20:15 | <ljharb> | Bakkot: ^ |
20:15 | <ljharb> | i remembered an L and a Z but wasn't sure which :-) |
20:15 | <Bakkot> | thanks! |
20:15 | <haxjs> | he is not online now, i will update if i make it wrong. |
20:15 | <ljharb> | perfect |
20:23 | <Bakkot> | I made a survey about do-expressions. I'd highly appreciate if delegates could fill it out; it should only take a second: https://docs.google.com/forms/d/e/1FAIpQLScyNcGNfjoJXMTmfBkLRMREKCP2TihiFGqc26HhjL4710qdiA/viewform?usp=sf_link |
20:24 | <Bakkot> | akirose / other chairs: if we have a spare minute or two today, I'd like to speak on the VC to ask people to fill it out |
20:27 | <akirose> | robpalme: heads up ☝🏻 would you like me to explicitly put it on the schedule? |
20:28 | <robpalme> | plz |
20:29 | <ystartsev> | Bakkot: can i share it with my team? |
20:29 | <Bakkot> | ystartsev sure! |
20:29 | <ystartsev> | sweet |
20:30 | <Bakkot> | ask them to put "(mozilla)" in their "who are you", maybe, so I know who they are? |
20:30 | <robpalme> | *** we restart at 12:50 PT *** i.e. 10 mins earlier than usual |
20:31 | <ystartsev> | Bakkot: will do -- if any get missed and you aren't sure you can run the names by me and i will confirm if they are from my team |
20:31 | <Bakkot> | √ |
20:49 | <robpalme> | *** we are starting in 1 minute *** |
20:51 | <robpalme> | bakkot - are you good with notes? |
20:52 | <Bakkot> | robpalme yup |
20:52 | <robpalme> | thank you (i forgot to ask) |
21:00 | <sffc> | I'm prepared to give eraDisplay for Stage 1 today if there's time |
21:00 | <sffc> | it's currently scheduled for tomorrow |
21:01 | <robpalme> | thank you, sffc, I think we will take you up on that |
21:25 | <michaelficarra> | since all these functions are going to have different names, should we have a `Symbol.brandChecker` that is a getter for the brand checking function for that particular built-in? |
21:25 | <Bakkot> | not sure if seroius |
21:25 | <Bakkot> | but |
21:25 | <Bakkot> | no |
21:25 | <ljharb> | michaelficarra: on the constructor or the instance? |
21:25 | <michaelficarra> | the contructor |
21:26 | <ljharb> | either way, if we had a symbol, it wouldn't be robust unless that property was nonconfigurable/nonwritable |
21:26 | <michaelficarra> | Array.isArray is nonconfigurable? |
21:26 | <ljharb> | oh i see what you mean |
21:26 | <rickbutton> | suggestion: put a [[Brand]] Symbol on Map, make Object.hasBrand(myMap, Map) |
21:27 | <michaelficarra> | these things are robust only when you already have a pointer to them |
21:27 | <ljharb> | so not Map.isMap(), but just Map[Symbol.brandChecker]? |
21:27 | <michaelficarra> | rickbutton: that also works |
21:27 | <ljharb> | rickbutton: right, a single global method that looks up a symbol would be one approach |
21:27 | <michaelficarra> | ljharb: or both |
21:27 | <ljharb> | sure |
21:27 | <ljharb> | i'm fine with that, especially if the thing behind the symbol is a cacheable function |
21:27 | <michaelficarra> | yeah, it can be the same value |
21:30 | <bradleymeck> | littledan: per my comment; I'm curious if reliable check exists how/why it would differ from a public API for class.hasInstance |
21:31 | <ljharb> | bradleymeck: because regular classes wouldn't need to have anything by default more than `instanceof` |
21:31 | <ljharb> | bradleymeck: however if there's a symbol protocol, a user class could choose to make it more robust than that |
21:33 | <bradleymeck> | ljharb: if I install a Symbol.hasInstance on a 3rd party it wouldn't actually check that class has the internal slots |
21:33 | <ystartsev> | littledan ljharb can we write down the context that came to light regarding the thinking around brand checks? I can bug you next week. |
21:33 | <ljharb> | bradleymeck: right - but if that class author did so then it could check that |
21:33 | <ystartsev> | also, if anyone is curious, at() is not currently shipping. i believe we only had it behind a flag and that has not changed: https://bugzilla.mozilla.org/show_bug.cgi?id=1681371 |
21:33 | <ystartsev> | we almost turned it on |
21:33 | <ystartsev> | but the web compat issue came up just before we did |
21:33 | <bradleymeck> | ljharb: if it makes it non-configurable/writable yes, but this seems extremely uncommoon |
21:33 | <ljharb> | ystartsev: i don't know if anything "came to light", i think it's just that my request for module blocks made dan realize this was a problem worth solving holistically |
21:34 | <ljharb> | whereas i've always thought this, but thought it was a nonstarter given previous committee reaction to it |
21:34 | <ystartsev> | ljharb: i mean around the reasoning for the invariant |
21:34 | <ystartsev> | sorry, if that wasn't clear |
21:34 | <ystartsev> | because iiuc the context might be worth writing down? |
21:34 | <ljharb> | oh. i'm not sure there's any new reasoning? it's basically "make sure the thing i'm given is the thing i'm expecting" |
21:34 | <ljharb> | is, not "has the same interface as" |
21:36 | <ljharb> | shu: tbh the easiest fix for them is to add `'$' +` to the assignment/lookup of the key |
21:37 | <littledan> | which library was that? |
21:37 | <michaelficarra> | I thought the SugarJS usage was compatible though |
21:37 | <littledan> | these compatibility issues often have to do with how the methods are installed |
21:37 | <littledan> | like, if they are installed unconditionally, it's fine |
21:37 | <michaelficarra> | exactly, which Is why I think it was okay |
21:38 | <jridgewell> | I think they are using it as a map |
21:38 | <jridgewell> | Eg, random setting/lookup of keys |
21:38 | <jridgewell> | And `at` is a valid key for them |
21:39 | <rkirsling> | yeah 'at' is key from a query string of theirs |
21:39 | <littledan> | haxjs: Can we make sure that the version numbers are written in the notes so it can be followed up on later? |
21:40 | <haxjs> | sugarjs first version to 1.3.9 |
21:40 | <haxjs> | corejs 0.2.0 to the version they released 2 month ago |
21:41 | <ljharb> | wait, core-js 3 had string.prototype.at? |
21:41 | <haxjs> | yes |
21:41 | <ljharb> | i thought core-js 3 stopped shipping pre-stage-3 proposals by default, hm |
21:41 | <haxjs> | they always have. |
21:41 | <haxjs> | no, if u import 'core-js' u will have everything. |
21:41 | <haxjs> | include pre-stage-3 |
21:41 | <ljharb> | ouch, ok |
21:41 | <shu> | ljharb: i'm just waiting for them to respond; yes, i imagine there're a variety of ways to do a quick fix |
21:42 | <ljharb> | core-js has almost disrupted as much as mootools by now :-( |
21:42 | <haxjs> | the good news is babel-runtime will not take these polyfills. |
21:43 | <haxjs> | but still very dangerous |
21:43 | <haxjs> | especially string case is very subtle. |
21:52 | <Bakkot> | survey: https://docs.google.com/forms/d/e/1FAIpQLScyNcGNfjoJXMTmfBkLRMREKCP2TihiFGqc26HhjL4710qdiA/viewform?usp=sf_link |
21:53 | <Bakkot> | https://docs.google.com/forms/d/e/1FAIpQLScyNcGNfjoJXMTmfBkLRMREKCP2TihiFGqc26HhjL4710qdiA/viewform?usp=sf_link |
21:55 | <haxjs> | There are some questions all options can't match my opinion precisely :) |
22:02 | <Bakkot> | haxjs feel free to use the "other concerns" box to explain in more depth! |
22:04 | <haxjs> | Yes, already submit. |
22:11 | <michaelficarra> | "at least as useful as an existing feature" seems like a high/arbitrary bar IMO |
22:19 | <akirose> | so we're all clear, and I _think_ this is a theme of the comments but also i seem to be struggling to follow complex thoughts this afternoon, nothing we do will eliminate the fact that humans are making these decisions and humans are fallible |
22:20 | <littledan> | server-side apps have resource limitations as well |
22:20 | <akirose> | we're not trying to pretend that we can magically objective (yes i'm using that as a verb) our decisions, right? |
22:20 | <littledan> | but, yeah, I agree, we should consider all of these things |
22:24 | <wsdferdksl> | Agenda for tomorrow afternoon is rapidly shrinking… |
22:26 | <brad4d> | re: .at() I was surprised that a single website was sufficient to force unshipping. Is bricklink especially important? |
22:27 | <brad4d> | It's a LEGO marketplace. :) |
22:28 | <robpalme> | so... yes? |
22:29 | <brad4d> | I guess I'm kind of amazed that we ever manage to ship anything - not trying to be mean if that how it sounded |
22:29 | <akirose> | we take "don't break the web" very seriously |
22:29 | <rkirsling> | the sins of the past have certainly made adding methods to builtins difficult |
22:29 | <ljharb> | space jam website 4 eva |
22:29 | <michaelficarra> | someone needs a space jam link |
22:30 | <michaelficarra> | ljharb: lol beat me to it |
22:30 | <akirose> | lolol |
22:30 | <rkirsling> | https://spacejam.com |
22:31 | <brad4d> | in this case it's clearly a business that would be harmed - if it were, say, my personal website, that wouldn't have forced unshipping would it? |
22:31 | <ystartsev> | this is starting to sound all very familiar |
22:32 | <ljharb> | brad4d: there's no hard rule, but it tends to depend on popularity and cultural relevance a bit |
22:32 | <ljharb> | brad4d: iow, would web users switch browsers if that was what it took to make your website work? |
22:32 | <michaelficarra> | brad4d: I think it's much more about popularity than "does someone's livelihood depend on this?" |
22:32 | <ljharb> | if the answer is "my mom would" then i doubt it'd obstruct anything |
22:32 | <rkirsling> | data is collected by the browser vendors to see whether stuff seems to have broken |
22:33 | <ljharb> | but if the answer is "tens of thousands of people would" it might matter |
22:33 | <rkirsling> | that data is extremely important wrt stage 4 advancement |
22:34 | <ystartsev> | I feel like something like a framework would work reallywewll here |
22:34 | <ystartsev> | for designing studies |
22:35 | <rickbutton> | re: bricklink, imo it would be harmful to use any other metric than traffic/browser usage, tc39 shouldn't take an opinion on the usefulness of a website to the greater web |
22:35 | <rkirsling> | ^ |
22:35 | <Bakkot> | well, and how broken the page was |
22:36 | <ljharb> | agreed |
22:36 | <Bakkot> | "can't spin your 3d objects" is less serious than "can't log in", or whatever |
22:36 | <rickbutton> | sure |
22:36 | <rickbutton> | also depends on actual impact to said site |
22:36 | <ljharb> | rickbutton: well. i think it's reasonable when there's small usage, if the site is still particularly important for some other reason, that we protect it |
22:36 | <akirose> | historical significance ain't nuthin. (though the manner in which we introduce our own biases is a whole other conversation) |
22:36 | <rickbutton> | sure ljharb, would be real unfortunate if we shipped a proposal that broke tc39.es, even it if doesn't get much traffic :) |
22:37 | <ljharb> | ha, yes |
22:37 | <ljharb> | altho i'd hope evangelism would help us there |
22:37 | <rickbutton> | or maybe broke the website that hawaii used to send nuclear bomb alerts, for example |
22:37 | <rickbutton> | (wasn't a browser break that caused that, was a misclick) |
22:38 | <shu> | brad4d: to be clear, that was not a TC39 decision to unship |
22:39 | <shu> | brad4d: that is a product decision i made for v8 and chrome, and someone else made for safari |
22:39 | <rkirsling> | that too |
22:39 | <brad4d> | also related to .at(): even if unshipping hadn't occurred, wouldn't it have been too soon to ask for stage 4? |
22:39 | <rkirsling> | tc39's decision is really based on "are browser vendors willing to ship this" |
22:39 | <shu> | brad4d: it would've had 3 shipping implementations, so no, seems fine? |
22:39 | <rickbutton> | it would have landed in chrome and safari if not for the unship |
22:39 | <brad4d> | https://github.com/tc39/how-we-work/blob/master/champion.md |
22:39 | <rkirsling> | no it would have been the perfect time to ask for Stage 4 |
22:39 | <brad4d> | "significant in-the-field experience" |
22:39 | <rkirsling> | the problem was detected in the nick of time |
22:40 | <brad4d> | doesn't that mean it has to have been out there and being used by developers for some reasonable period of time? |
22:40 | <ystartsev> | shu: sorry i think i came across as overly negative there |
22:40 | <shu> | brad4d: canary was shipping for whole release cycle, almost |
22:40 | <shu> | brad4d: we don't have a quantified "reasonable period of time" |
22:40 | <shu> | ystartsev: oh i didn't take that tone at all |
22:40 | <ystartsev> | i actually agree with what you were saying, i mostly wanted to add that -- hopefully there are tools and we are sort of trying to do that |
22:40 | <ystartsev> | with limited success so far, but hey |
22:41 | <shu> | ystartsev: i think it's really great you're doing the research group and it is a strict improvement where applicable |
22:41 | <ljharb> | brad4d: anyone using it would have to still work when it's absent |
22:41 | <shu> | ystartsev: in a way i was calling for more staffing investment in standards work |
22:41 | <ljharb> | brad4d: we don't worry about websites that are already broken on multiple browsers |
22:41 | <ystartsev> | shu: i totally support that |
22:42 | <brad4d> | shu: I thought you'd need your monitoring data to show a signifcant usage existed of `.at()` in real websites before you could move to stage 4 |
22:43 | <shu> | brad4d: oh, certainly not |
22:43 | <shu> | brad4d: popularity is not a requirement |
22:44 | <brad4d> | hmmm, I thought lack of sufficient usage was one reason why the various "field" proposals haven't moved to stage 4 |
22:44 | <shu> | ystartsev: cf how product features are aggressively (overly so!) a/b tested with data that may get abused etc |
22:44 | <shu> | ystartsev: we operate almost on the other end of the spectrum, and as such much of our debate is about how we feel, and how we think others would feel, about these proposals |
22:44 | <ystartsev> | yes, thats something that we need to be careful about -- that is where qualitative or mixed methods can help |
22:45 | <shu> | we of course _cannot_ a/b test feature proposals, because the output is interoperability |
22:45 | <shu> | yes, agree |
22:45 | <ljharb> | brad4d: not usage, just shipping |
22:45 | <ystartsev> | It also depends on the kind of question we want to answer (or if we know what the question really is) |
22:45 | <ystartsev> | This is something I've been thinking about in terms of our problem statements |
22:46 | <ljharb> | brad4d: afaik the combined class fields proposal was waiting on editor reviews of the updated PR, as well as more unflagged browser implementations |
22:47 | <rkirsling> | yeah JSC has been very behind on shipping those |
22:47 | <shu> | i thought igalia was helping out with implementation |
22:49 | <ystartsev> | Bakkot: halp |
22:49 | <Bakkot> | w? |
22:49 | <ystartsev> | i think the bot can be stopped? |
22:49 | <Bakkot> | ah, was gonna capture this bit too |
22:49 | <ystartsev> | never mind |
22:49 | <Bakkot> | will do the notes msyelf |
22:49 | <ystartsev> | spoke too soon |
22:51 | <rickbutton> | cant imagine a situation where we want to ship a proposal that has -no- support |
22:53 | <ystartsev> | 🤔 |
22:54 | <littledan> | I don't really see why we'd need a process change to note committee members' comments in the conclusion section of the notes for Stage 3 advancement, since the notes format is not described in the process document |
22:55 | <ljharb> | agreed |
22:58 | <Bakkot> | btw a feature of the notes bot is that it fixes some of the common substitutions the speech-to-text API makes: https://github.com/bakkot/transcribe-to-gdocs/blob/master/replacements.js#L5-L56 |
22:58 | <Bakkot> | which grows as I notice more |
22:59 | <Bakkot> | and when other people volunteer to take notes I can add them more readily and improve the experience for all future note takers |
22:59 | <Bakkot> | (hint hint) |
22:59 | <michaelficarra> | hahaha I didn't notice tempura |
22:59 | <shu> | copying over from my clarifications in tdz to here for more visibility |
22:59 | <shu> | what i'm asking is, concretely: |
23:00 | <shu> | so nothing formal, but that if you have direct anecdotal evidence of developer sentiment |
23:00 | <shu> | 14:55:52 it would be good to either relay that in committee discussion for it to be recorded in the notes, or, |
23:00 | <shu> | 14:56:14 if you are yourself a non-browser developer, put that hat on and speak to your own sentiment for whether you would use that or not |
23:00 | <shu> | 14:56:20 we already do this, but it's often implicit |
23:00 | <shu> | 14:56:36 some of us are very explicit, like yehuda |
23:00 | <shu> | 14:56:42 who often says "i would use this in ember today" |
23:00 | <shu> | 14:56:53 but if it were reflected in the notes that makes my life a lot easier |
23:01 | <ystartsev> | ok, thats clear, thanks |
23:04 | <shu> | ystartsev: from chrome's pov there's no work from other browser vendors |
23:04 | <shu> | "developer" here means non-web browser developer |
23:06 | <littledan> | I think we can simply call for folks to make statements about how they feel about this as a web developer, and write these in the minutes in the conclusion |
23:07 | <littledan> | (or, as JS developers in general) |
23:07 | <littledan> | we also have the frameworks and tools calls as a data source (though recent attendance of framework calls has been poor). The notes are public. |
23:16 | <shu> | littledan: +1 sgtm |
23:17 | <shu> | littledan: yes, i was already planning to use the minutes of the frameworks calls, thanks for calling that out |
23:19 | <jridgewell> | I see that _30m Revisiting RegExp.escape, Jordan Harband_ got moved to the end of the third day, which is now done? |
23:19 | <jridgewell> | But I don’t see it discussed in the notes |
23:20 | <jridgewell> | Should this on the agenda for day 4? |
23:20 | <ljharb> | jridgewell: we didn't have time |
23:20 | <ljharb> | the draft schedule will surely be updated for day 4, not sure when it'll be |
23:24 | <Bakkot> | can I get an admin of the tc39 org to make me an admin of the do-expressions repo? https://github.com/tc39/proposal-do-expressions/ |
23:24 | <Bakkot> | dave is fine with this but he's not an admin and so can't do it himself |
23:24 | <Bakkot> | (not sure who admins are, so not sure who to ping) |
23:25 | <ljharb> | Bakkot: chairs |
23:30 | <ljharb> | haxjs: don't forget to transfer your class brand checks repo into tc39-transfer |