00:19 | <rkirsling> | the most hilarious thing |
00:19 | <rkirsling> | is that it is a national holiday in Japan |
00:20 | <rkirsling> | I'm not sure how we didn't notice this...lol >_< |
00:21 | <leobalter> | I underestimated myself working on a Sunday night, after a weekend full of parenting duties. |
00:29 | <rkirsling> | yeah, today is 敬老の日 (Respect for the Aged Day) and tomorrow is 秋分の日 (Autumnal Equinox Day) |
00:30 | <rkirsling> | so my Japanese colleagues are all off...oops |
00:37 | <ryzokuken> | Guten Morgen, fellow delegates. |
00:38 | <ryzokuken> | leobalter: early Monday morning here, and I'd be _so_ much happier if it were Sunday evening lol |
00:38 | <ryzokuken> | 5 AM on monday morning is the worst, I wouldn't wish it on my worst enemies :D |
00:39 | <leobalter> | the last GA meeting started at 4AM in my time zone :) |
00:39 | <leobalter> | it was me held by a cup of coffee |
00:39 | <ryzokuken> | leobalter: talking of coffee... :) |
00:39 | <rickbutton> | yeah time to make a 8:40PM cup of coffee |
00:39 | <ryzokuken> | lol |
00:43 | <ryzokuken> | are we using hubs again this time? |
00:43 | <ryzokuken> | anyone on it yet? |
00:52 | <rkirsling> | tomoki_imai: 👋 |
00:53 | <devsnek> | of course my laptop picks this time for the gpu drivers to break |
00:53 | <rickbutton> | oh no |
00:55 | <littledan> | FWIW from Android, it only let me set my name once, and when I disconnected and reconnected, it remembered my name |
00:55 | <littledan> | so that's why I'm set to "Daniel", apologies |
00:57 | <devsnek> | am i supposed to do something here https://gc.gy/68354869.png |
01:12 | <devsnek> | can someone update the MOTD |
01:14 | <devsnek> | lol |
01:14 | <ljharb> | jinx |
01:14 | <ljharb> | i guess technically you beat me by 2s :-( |
01:14 | <devsnek> | oh wait i can set the motd |
01:14 | <devsnek> | neat |
01:21 | <michaelficarra> | omg nothing works :-( |
01:21 | <michaelficarra> | teams is so bad |
01:22 | <akirose> | I HAD SO FEW COMPLAINTS ABOUT MICROSOFT COLLABORATION PRODUCTS UNTIL TWO WEEKS AGO AND NOW I ONLY TYPE IN CAPS |
01:22 | <rickbutton> | we should just standardize on a single tool for meetings |
01:22 | <ryzokuken> | is it just me or do we see Aki's slides? |
01:22 | <shu> | what have we used so far? zoom and teams? |
01:23 | <ryzokuken> | apparently we could just take control |
01:23 | <rkirsling> | yeah. zoom worked well except for the privacy worries :-/ |
01:23 | <rickbutton> | google meet? |
01:23 | <shu> | i don't think we actually used meet |
01:23 | <ryzokuken> | jitsi 🙈 |
01:23 | <devsnek> | discord :D |
01:23 | <rkirsling> | meet would seem fine; I just never had a huge meeting in it |
01:23 | <shu> | don't even know what that is |
01:23 | <devsnek> | imagine, all our chat and video in one place |
01:24 | <devsnek> | jitsi == oss zoom |
01:24 | <rbuckton> | MylesBorins: Its possible to upload a PowerPoint to Teams for a meeting which lets anyone move around within the slides without affecting everyone else, and I think that's what akirose was trying earlier. For some reason it took over sharing from Istvan. |
01:25 | <MylesBorins> | super strange |
01:25 | <MylesBorins> | ¯\_(ツ)_/¯ |
01:25 | <akirose> | yeah it's what i was doing earlier and long long after i had given up and no longer had the sharing view, it apparently came back for everyone but me |
01:25 | <rickbutton> | that feature was broken last time we used teams too |
01:25 | <ljharb> | rbuckton: unfortunately with that feature, it seems like it's really easy to lose "the presenter advances the slides" sync |
01:25 | <ljharb> | rbuckton: iow i've found i have to constantly manually advance a slide and hit "to presenter" to sync it up |
01:26 | <shu> | there's a chrome extension internally that lets meeting participants control Slides sharing, and it is always chaos |
01:26 | <shu> | a nice idea in theory |
01:27 | <Bakkot> | zoom is the only one of these which seems to consistently actually work |
01:27 | <Bakkot> | petition to only use zoom in the future |
01:28 | <Bakkot> | F5 has an account, we might be able to "host" |
01:28 | <michaelficarra> | seconded |
01:28 | <rkirsling> | I would support that |
01:28 | <devsnek> | petition to try discord once first |
01:28 | <akirose> | banned from paypal computers i think |
01:28 | <rkirsling> | orz |
01:30 | <shu> | Bakkot: googlers are still discouraged from using the Zoom desktop client; requires an exception |
01:30 | <shu> | i've never used the web version, does that also work well |
01:31 | <devsnek> | i use the web version for things that require it, seems to be functional |
01:31 | <Bakkot> | shu is "I need it to participate in the standards body of which I am editor, which uses it because it is the only functional video client" a valid exception |
01:32 | <shu> | Bakkot: they would take exception to the second phrase but it's certainly a valid exception |
01:32 | <shu> | but i am not the only googler, just saying it's not zero-friction |
01:33 | <rickbutton> | Bakkot or ljharb can you give me a slides link for the notes when you have a sec |
01:34 | <Bakkot> | yeah, just seems like there's a bunch of friction with every client, except that the end result with Zoomo is that you have a functional meeting |
01:34 | <shu> | we could give meet a try, but i |
01:34 | <shu> | err |
01:34 | <shu> | but i've also never had a meeting of this size on Meet |
01:34 | <rickbutton> | I've had meetings with 100+ people in a room and it works |
01:35 | <shu> | no no, #2086 is a small PR! |
01:36 | <bterlson> | Bakkot: can you say how the meeting is not working? |
01:36 | <bterlson> | how can I help |
01:37 | <ljharb> | rickbutton: https://j.mp/262editor202009 - i'll add them to the agenda shortly |
01:37 | <rickbutton> | thx :) |
01:38 | <Bakkot> | bterlson I'm mostly referring to the thing where Aki struggled to present, but I'm also salty about a.) when presenting I can't see anyone's faces and b.) when not presenting I can only see at most 9 people |
01:38 | <akirose> | how was i meant to present in presenter view? I HAD NOTES |
01:39 | <bterlson> | Bakkot: ok got it |
01:46 | <ljharb> | bterlson: hm, i didn't see anything on TCQ |
01:46 | <bterlson> | https://tcq.app/meeting/BSXq ? |
01:46 | <bterlson> | oh whoops |
01:46 | <ljharb> | ahhh the draft schedule has KfmX |
01:47 | <devsnek> | yeah that's last month |
01:47 | <bterlson> | will tell aki to update |
01:47 | <rkirsling> | is it a problem that that just got exposed? |
01:47 | <ljharb> | kk ty |
01:47 | <bterlson> | not really |
01:48 | <devsnek> | some random person could spam us with POO but that is unlikely |
01:48 | <bterlson> | if we had sensitive issues on the agenda it would be a concern |
01:48 | <rickbutton> | needs a github login so isn't anonymous |
01:48 | <littledan> | I'm very happy about this SDO restructuring |
01:48 | <littledan> | we're switching from object oriented to pattern matching! |
01:49 | <littledan> | it's just so hard to read the current spec layout |
01:49 | <rkirsling> | ooh |
01:49 | <devsnek> | pattern matching O.o |
01:49 | <rkirsling> | I hadn't followed that work |
01:49 | <devsnek> | which one is that again |
01:50 | <Bakkot> | devsnek https://github.com/tc39/ecma262/issues/1950 |
01:50 | <Bakkot> | assuming I understand the question |
01:50 | <devsnek> | oh i thought there was a pr |
01:50 | <devsnek> | curious what "pattern matching" means in this context |
01:50 | <rkirsling> | lol I love devsnek's `yes yes so much yes` |
01:51 | <Bakkot> | no, not yet |
01:51 | <devsnek> | rkirsling: i have spent too much of my life jumping around the spec looking for early errors |
01:51 | <Bakkot> | no point in making the PR until we're ready, since it will merge-conflict with everything |
01:52 | <rkirsling> | `this style ... was chosen ... on the basis that it was written in Word and Ecma liked Word` |
01:52 | <rkirsling> | oof |
01:52 | <Bakkot> | "pattern matching" means that it is defined like `SDO = match (node.type){ Expression => whatever, Statement => whatever}` instead of being defined like `Expression.SDO = whatever [...] Statement.SDO = whatever` |
01:52 | <Bakkot> | if that makes sense |
01:52 | <littledan> | Was it Ross rkirsling ? |
01:52 | <littledan> | who did Intl.Segmenter |
01:53 | <rkirsling> | littledan: I reviewed the patch but Yusuke implemented it |
01:56 | <michaelficarra> | Yusuke Suzuki is amazing! |
01:56 | <Bakkot> | +1 |
01:56 | <rkirsling> | he literally is |
02:01 | <shu> | that's interesting. if interop is not an aspiration of the standard, what is the value of the standard? similar general shapes? |
02:02 | <devsnek> | i had a similar line of questioning the other day on twitter |
02:02 | <devsnek> | in that case annex b but same idea |
02:03 | <shu> | devsnek: what's the relation to annex b? |
02:03 | <devsnek> | people thinking annex b == don't need to impl and then learning some of it is ecosystem reality |
02:04 | <rkirsling> | in ambulances?! 😱 |
02:04 | <devsnek> | or i guess, people saying it should remain annex b even though it is ecosystem reality |
02:04 | <shu> | devsnek: i don't think any implementers of web engines i know actually think that |
02:04 | <devsnek> | well people who make not-web-engines tend to dislike annex b |
02:04 | <shu> | i suppose XS had to learn the hard way |
02:04 | <devsnek> | but they still have to implement substr |
02:05 | <wsdferdksl> | Not all |
02:05 | <wsdferdksl> | C++ uses ECMAScript regular expressions. Merging in annex b would change how C++ regexps work. |
02:05 | <devsnek> | yeah there's definitely stuff that needs a closer look |
02:06 | <rkirsling> | holy crap |
02:06 | <shu> | devsnek: but annex b is still very much all about interop, the problem with annex b is that the subset of implementations it's intended to apply to doesn't match up with reality |
02:06 | <rkirsling> | I didn't know that particular detail |
02:07 | <Bakkot> | wsdferdksl do you know offhand if it specifies a particular version? |
02:07 | <Bakkot> | I don't have my copy of the C++ standard on hand |
02:08 | <Bakkot> | a particular version of ECMA-262, that is |
02:08 | <wsdferdksl> | It does. I'm not sure how often they update it. |
02:09 | <wsdferdksl> | It's kinda hard to get a hold of the official C++ standard |
02:09 | <devsnek> | reading through the latex on the draft repo |
02:09 | <devsnek> | it appears to be the third edition |
02:09 | <Bakkot> | looks like it's on ES3, yeah: https://github.com/cplusplus/draft/blob/78534e3883c9f296ecec6a26c51e55f6cb1bb395/source/intro.tex#L42 |
02:10 | <shu> | oh boy |
02:12 | <rkirsling> | wow, I can't imagine dealing with test262 before jsvu / eshost |
02:12 | <rkirsling> | I'm glad to have missed that era |
02:20 | <rickbutton> | leobalter: plz link slides link when you have a chance |
02:20 | <leobalter> | rickbutton: I'm not sure if I want to share the slides. I'll let you know. |
02:21 | <rickbutton> | ah yes of course |
02:21 | <rickbutton> | if you decide that you want to just drop them in the notes |
02:23 | <michaelficarra> | JSC date stuff is suuuuuper broken, take their result with a grain of salt |
02:23 | <rkirsling> | 😢 |
02:24 | <michaelficarra> | yeah JSC seems to implement everything in dates with signed 32-bit integers |
02:24 | <michaelficarra> | and that leaks all over the place |
02:38 | <littledan> | +100 on separating "normative optional" from "deprecated and discouraged" |
02:39 | <ljharb> | same |
02:39 | <littledan> | I would be fine with adding more deprecated things over time, whereas I'm very skeptical of adding more optional things |
02:40 | <rkirsling> | yeah I think one way or another we should increase clarity around that delineation |
02:43 | <michaelficarra> | when talking about __proto__ can we be clear about when we're talking about the syntax and when we're talking about the Object.prototype accessor |
02:43 | <Bakkot> | for clarity, what exactly are we asking for here? making the __proto__ getter/setter in the main spec but marked as normative optional? making __proto__ syntax normative non-optional? |
02:43 | <Bakkot> | yeah same question as michaelficarra |
02:44 | <bradleymeck> | i believe this doesn't change syntax |
02:44 | <ljharb> | accesor |
02:44 | <michaelficarra> | when people are making statements, I don't know which they're talking about |
02:44 | <michaelficarra> | if not both |
02:46 | <Bakkot> | fwiw I want `__proto__` syntax not to be marked as icky |
02:46 | <Bakkot> | it's the only way to do the thing it does |
02:46 | <michaelficarra> | same, __proto__ syntax is not bad |
02:47 | <michaelficarra> | that's not to say it couldn't have been better with its own syntactic form, but it's not bad |
02:48 | <shu> | it doesn't seem like to me we have consensus on this current proposal because there seems to be desire to have the discouragement note, which this PR doesn't have, and moreover, we don't have consensus that all things in the PR should be discouraged |
02:48 | <Bakkot> | yeah also we have only briefly mentioned exactly which things are included and in exactly which forms |
02:48 | <Bakkot> | I want to ask for consensus for the smaller question of, make the `__proto__` syntax required, and not marked as icky |
02:49 | <shu> | yes, there needs to be a condensed list of the asks |
02:49 | <michaelficarra> | I thought Gus's description was clear FWIW |
02:49 | <ljharb> | Bakkot: fwiw i don't personally consider the syntax icky (just aesthetically displeasing, but that's not sufficient imo) |
02:50 | <Bakkot> | michaelficarra the problem is that this is framed as moving "__proto__" but it covers a bunch of other stuff |
02:50 | <michaelficarra> | move __define{G,S}etter__ out of Annex B and make it mandatory; move __proto__ accessor out of Annex B and make it optional; move __proto__ syntax out of Annex B and make it mandatory |
02:50 | <michaelficarra> | am I missing anything? that's all Gus listed |
02:51 | <ljharb> | michaelficarra: ftr personally, i'd like the define's marked icky, and perhaps the proto accessor i guess; otherwise no additional asks from me. |
02:51 | <Bakkot> | michaelficarra also `__lookupGetter__` |
02:52 | <ljharb> | (ah yes ty, i want all the non-proto dunders marked icky) |
02:52 | <michaelficarra> | ljharb: okay so you're just asking that they are marked as icky before being put in the main spec |
02:52 | <ljharb> | michaelficarra: before/while, yes |
02:58 | <littledan> | I do prefer things to be required |
02:58 | <littledan> | was having troulbe unmuting |
03:00 | <devsnek> | littledan: do you object to it being optional |
03:00 | <devsnek> | oh nvm |
03:01 | <leobalter> | FWIW I support littledan's comment |
03:02 | <ljharb> | it's worth noting that inlining it in this way makes it easier to remove optionality in a future PR |
03:02 | <littledan> | I'm definitely happy with devsnek 's work overall. Inline normative optional in the main spec!!! |
03:02 | <haxjs> | What "icky" means? |
03:02 | <leobalter> | haxjs: discouraged / not recommended, I guess |
03:02 | <littledan> | btw bterlson earlier noted possible accessibility issues in the normative optional CSS I wrote |
03:03 | <littledan> | I think it'd be good for the editors to talk to a skilled a11y person to figure this out; I don't have the expertise myself :) |
03:03 | <Bakkot> | haxjs: it means roughly "discouraged" |
03:03 | <littledan> | haxjs: https://www.merriam-webster.com/dictionary/icky |
03:03 | <Bakkot> | yeah |
03:03 | <akirose> | haxjs: it's a slang word little kids use to describe something they don't like, especially messy things |
03:03 | <littledan> | ": offensive to the senses or sensibilities : distasteful " |
03:03 | <Bakkot> | littledan we've actually just come across this ourselves! |
03:03 | <littledan> | I feel like this definition makes a lot of sense |
03:03 | <Bakkot> | was talking to michaelficarra about fixing it |
03:03 | <haxjs> | So let's use "discouraged", not "icky" which is a slang. |
03:03 | <Bakkot> | (the accessibility thing) |
03:03 | <littledan> | haxjs: I believe the term "icky" has been used in this conversation as a placeholder, for something that we would definitely not really use |
03:04 | <akirose> | ++ |
03:04 | <rkirsling> | ^ |
03:04 | <littledan> | since it's "obviously" too informal |
03:04 | <haxjs> | I would like to say "icky" is "icky" :-) |
03:04 | <rkirsling> | I think it's like 讨厌 |
03:06 | <shu> | ljharb: what the current annex b wording is missing the thing i'd like to add: *even if* a thing is deprecated, i want to call out that that doesn't imply discouragement in engines if that engine's goal is interop with the existing ecosystem |
03:07 | <shu> | that nuance is something we don't have with the current wording |
03:07 | <ljharb> | that's totally fair |
03:07 | <shu> | and, engines whose goals are greenfield ecosystems are rare, like moddable |
03:07 | <ljharb> | ie separating out "discouraged to implement" vs "discouraged to use" |
03:07 | <shu> | not quite, it's discouraged to implement given an engine's goals |
03:07 | <ljharb> | gotcha, agreed |
03:07 | <shu> | web engines sure as hell won't be discouraged to implement |
03:08 | <shu> | and maybe, hermes too, even if it's not web |
03:09 | <haxjs> | It's not easy for outside (especially the non-native speakers) to understand the slangs. for example i still remember first time i see "sloppy" about ten years ago, i didn't know what that mean, and it cost me long time to figure out it just means "non-strict" :-) |
03:11 | <rkirsling> | sloppy is an interesting one, because when I started with TC39 I always wanted to call it "loose" mode |
03:11 | <rkirsling> | but our use of "icky" here was the same idea as our use of "smooth" |
03:11 | <rkirsling> | *smoosh |
03:11 | <avp> | shu: i'm not sure i understand your point, but as a reference, Hermes deliberately avoids implementing plenty of stuff in Annex B because we don't need web compatibility - we've had to add parts of it due to feature requests, but mostly it's been ok for us |
03:12 | <devsnek> | avp: i think our point is the "we've had to add parts of it due to feature requests" part |
03:13 | <rkirsling> | i.e. it was intended to be "obviously non-technical" in order to postpone bikeshedding about names/terms. I can see how that obviousness may be assuming a certain level of English intuition 🤔 but I'm also not sure how to fix that... |
03:13 | <shu> | avp: ah cool, okay. my point was that the "discouragement" isn't binary for implementers. we do a disservice to implementer readers of the spec if we don't add nuanced notes like "if you're an implementation that cares about maximal interop, you are actually encouraged to implement this optional feature, even if it's discouraged from being used" |
03:14 | <shu> | avp: and i'd like the editorial leeway to do that as editor, without seeking consensus for it |
03:14 | <devsnek> | does hermes target past es5 now |
03:15 | <avp> | devsnek: we're actively working on it - we've got a significant number of newer features implemented, but are still working our way through block scoping (variable resolution requires significant design changes in the compiler) |
03:16 | <avp> | but we do support generators, all the JS library functions up to ES2020, as well as some minor features like `?.` and `??` |
03:17 | <shu> | avp: oh boy, the amount of work each browser engine had to do to support block scoping... |
03:17 | <shu> | especially parameter scopes, though thankfully that got simplified a few years after the fact... |
03:18 | <rkirsling> | even now JSC has outstanding work to do to ensure that TDZ checks don't add up to a significant perf hit |
03:18 | <avp> | shu: we've had a fun time reasoning about function declaration hoisting in the presence of `let`/`const` as well as `catch` vars |
03:18 | <devsnek> | block scope was pretty easy in engine262 :^) |
03:20 | <shu> | avp: reasoning to elide TDZ checks? |
03:20 | <shu> | or correctness? |
03:20 | <Bakkot> | b.3.3, lol |
03:21 | <Bakkot> | the worst part |
03:21 | <devsnek> | proposal to move that to annex z |
03:21 | <Bakkot> | https://dev.to/rkirsling/tales-from-ecma-s-crypt-annex-b-3-3-56go |
03:21 | <avp> | yep that's the section |
03:22 | <Bakkot> | there's still outstanding issues with it too |
03:22 | <Bakkot> | https://github.com/tc39/ecma262/issues/913 |
03:22 | <devsnek> | scoping gave me some grief in the parser |
03:23 | <devsnek> | i wish all of js was like modules |
03:23 | <shu> | oh you're implementing b.3.3? why, if web compat isn't needed? |
03:23 | <avp> | comparing with other engines yielded behavior that we just couldn't reconcile with our mental model of the spec for a while - eventually we kind of understood it but we're still working on implementing all the variable resolution stuff in a way that works with our "lazy mode" compilation and our debugger information |
03:23 | <shu> | i mean like, out of all things in annex b to not implement, b.3.3 is it |
03:23 | <rkirsling> | ^ big true |
03:24 | <devsnek> | html comments |
03:25 | <rkirsling> | ^ medium true |
03:27 | <avp> | that seemed like the sort of section we might really want to implement because lots of people using our code run third party npm modules which we want to try and be compatible with |
03:29 | <avp> | plus, we really do want to support as much of the spec as we can without incurring significant size and/or perf costs, it's just that for chunks of Annex B it seems that the tradeoff would be bad (hence no `String.prototype.big`, etc) |
03:30 | <shu> | hm, getting mixed signals about the web compat part |
03:32 | <avp> | yeah i'll clarify - there's certain feature requests that fall into "compat" which come from Annex B that we were explicitly asked to implement by users - `String.prototype.substr` comes to mind because it was actually used in code running on Hermes. HTML stuff like `String.prototype.big` was not because we're intended to be used in React Native which doesn't use traditional HTML. |
03:33 | <devsnek> | substr ❤️ |
03:34 | <shu> | avp: ah, okay, and npm usage of things like `String#big` for packages react native codebases pull in is close to nil, i guess? |
03:34 | <jridgewell> | I don't understand why `substr` is Annex B. |
03:34 | <avp> | shu: correct |
03:34 | <jridgewell> | It's genuinely useful. |
03:35 | <jridgewell> | Put `substring` in Annex B instead, it's basicall `slice`. |
03:35 | <devsnek> | i'm guilty of using substr |
03:40 | <ljharb> | jridgewell: how is it useful to you? |
03:40 | <ljharb> | (substring is indeed terrible, it sorts its arguments which is bizarre) |
03:40 | <Bakkot> | sometimes the thing you have on hand is an start index and a length, not a start index and an end index |
03:41 | <devsnek> | we need `trimNull([startIndex])` that reads to the first occurrence of \0 :P |
03:48 | <Bakkot> | I don't know that I've ever had to find a null byte in a JS string |
03:48 | <Bakkot> | I guess for encoding to bytes sometimes |
03:51 | <jridgewell> | Using `length` as the second param is useful |
03:51 | <jridgewell> | I don't always know the end index, or want to add the current index to my already known length. |
04:14 | <haxjs> | jridgewell `substring` is not `slice`, substring may swap the index if i remember correctly |
04:15 | <jridgewell> | Hence the "basically" |
04:15 | <jridgewell> | The common features are the same |
04:15 | <jridgewell> | But there are edge cases that are different |
04:15 | <ljharb> | haxjs: substring sorts its arguments |
04:15 | <haxjs> | The problem is `substring` may be also used as freqently as `substr` ... I'm not sure |
04:16 | <ljharb> | (so `s.substring(a, b)` is identical to `s.substring(b, a)`) |
04:16 | <haxjs> | I really curious why these methods come from. It seems ES1 only have substring? |
04:17 | <devsnek> | i still feel like "i'm building a whole new separate ecosystem" is "i don't need 100% compat" not "the spec needs to cater to my case" |
04:18 | <Bakkot> | haxjs usually it's that either Netscape or Internet Explorer shipped it without worrying about whether it was in the standard |
04:20 | <haxjs> | consider there are some complains about codeunit vs codepoint, it seems "string.p.slice" would also "icky" for those people :-) |
04:20 | <Bakkot> | yup it's bad |
04:21 | <Bakkot> | shoulda been sliceCodeUnits or something |
04:21 | <ljharb> | slice is great. strings defaulting to code units is icky. |
04:22 | <haxjs> | do we have chance to introduce any encoding-neutral string ? |
04:22 | <devsnek> | i'm regretting being amenable on define/lookup getter/setter being optional now |
04:22 | <haxjs> | why regreting that? |
04:22 | <devsnek> | haxjs: you can already put whatever bytes you want into js strings |
04:23 | <shu> | yay, awesome, thanks rkirsling |
04:23 | <rkirsling> | thanks for the backup :D |
04:23 | <rkirsling> | (Bakkot too) |
04:25 | <haxjs> | devsnek: I mean dev need to remember codeunit/codepoint when they use string api. and when they use it, it also make the engine have to convert a utf8 encoding to utf16 encoding |
04:29 | <Bakkot> | engines don't always use utf8 internally |
04:29 | <michaelficarra> | I am very happy to see that this proposal restricts the exports to valid Unicode |
04:29 | <Bakkot> | v8 uses both |
04:29 | <Bakkot> | (IIRC) |
04:29 | <devsnek> | v8 has one and two byte representations |
04:30 | <devsnek> | they are not called utf8 and utf16 because they don't have to be valid unicode |
04:31 | <shu> | i don't think anybody uses utf8 internally |
04:31 | <shu> | but everybody does have a 1byte vs 2byte distinction |
04:31 | <michaelficarra> | FYI you can uncheck "show comments" in the upper right hamburger menu if you're trying to show off a diff |
04:31 | <devsnek> | saves a lot of memory |
04:32 | <mmarchini> | Tcq agenda item is still on the previous topic |
04:32 | <mmarchini> | (I think) |
04:32 | <rickbutton> | ^ cc robpalme |
04:34 | <haxjs> | shu: yeah, 1byte vs 2byte, because if u want efficiency for current api, u can only have such presentation. what i ask is whether it's possible to add a encoding-neutal apis so allow engine use real utf8/utf16 which save the encoding/decoding for io. |
04:34 | <littledan> | oh I forgot to mention, on the detached arraybuffer semantics PR: if this doesn't already match shipping web reality, can I ask that we have 1-2 implementations to prove it out, and test262 tests, before landing? |
04:34 | <robpalme> | thanks rick - fixed |
04:34 | <Bakkot> | wait is this actually true? |
04:34 | <michaelficarra> | I don't think so |
04:35 | <Bakkot> | is BOM not legal at the start of a unicode-16 string? |
04:35 | <shu> | littledan: the PR matches SM and V8 behavior |
04:35 | <shu> | littledan: JSC disagrees with subparts of the PR |
04:35 | <littledan> | Oh, I see, carry on |
04:35 | <littledan> | but, test262? |
04:35 | <devsnek> | Bakkot: it's only valid in 16 and 32 |
04:35 | <shu> | disagrees meaning mismatches, not active disagreement |
04:35 | <shu> | test262 i don't actually know, rkirsling? |
04:35 | <littledan> | (sorry, it's 6:30 AM here, and I haven't slept tonight yet) |
04:36 | <devsnek> | well i guess it's valid in 8, but it isn't used |
04:36 | <rkirsling> | rwaldron was suggesting he was going to follow along with the PR and help with the tests |
04:36 | <rkirsling> | if that's not the case then I can contribute there |
04:36 | <michaelficarra> | lol this isn't true either, ugh |
04:37 | <Bakkot> | need mathiasbynens here |
04:37 | <michaelficarra> | https://tc39.es/ecma262/#sec-encodeuricomponent-uricomponent |
04:38 | <littledan> | the answer is yes; it's been stated several times. I think we can iterate on the wording on the issue |
04:38 | <rkirsling> | Bakkot: +1 |
04:39 | <rkirsling> | wait but shu there is the `configurable` bit |
04:39 | <shu> | Bakkot: why can't we volunteer michaelficarra as the new utf abyss gazer |
04:39 | <shu> | littledan: rkirsling: oops, ross's right about the [[Configurable]] change, that's not in anyone's implementation |
04:39 | <shu> | littledan: i'll ship that soon and be on the lookout for bugs |
04:39 | <rkirsling> | <3 |
04:39 | <shu> | i see no way to actually usecounter that |
04:39 | <littledan> | OK, let's wait to land this until we get 1-2 shipping implementations |
04:40 | <littledan> | any concerns with that? |
04:40 | <rkirsling> | fine by me |
04:40 | <shu> | sure, that should be fine |
04:40 | <shu> | could someone note that on the PR? |
04:40 | <shu> | i will probably forget |
04:41 | <keith_miller> | Bakkot: Is there any order for prototype methods generally in the spec? Is it the same as the order they are listed? |
04:41 | <Bakkot> | keith_miller nope |
04:41 | <keith_miller> | hmm, ok |
04:41 | <rkirsling> | littledan: would you like to add a comment to that end? |
04:41 | <Bakkot> | people have proposed changing that |
04:41 | <Bakkot> | "nope" as in "there is no order", to be clear |
04:41 | <littledan> | rkirsling: I'll do that |
04:41 | <keith_miller> | Bakkot: As long as its whatever the current JSC order is I'm happy :P |
04:42 | <Bakkot> | keith_miller to be clear, my length/name PR requires a change from JSC and not from anyone else |
04:42 | <Bakkot> | I hope that was clear |
04:42 | <keith_miller> | Oh, I know |
04:42 | <Bakkot> | ok good good |
04:42 | <keith_miller> | I'm doing it now |
04:43 | <keith_miller> | Bakkot: I'm just lazy :P |
04:46 | <Bakkot> | ain't we all |
04:46 | <Bakkot> | I try to phrase these PRs in a way which allows the most people to be lazy, as a rule |
04:46 | <Bakkot> | re: "valid unicode", I guess the pedantic thing is "is valid unicode if interpreted as a UTF-16BE string" |
04:46 | <michaelficarra> | Bakkot: pretty sure all your PRs from this meeting only require JSC changes |
04:46 | <shu> | i'm not so much lazy as anxious |
04:47 | <Bakkot> | or, that's true at least wrt the BOM |
04:48 | <haxjs> | does that mean we can't have 1cm 1deg , etc? |
04:48 | <rkirsling> | michaelficarra: womp womp |
04:48 | <keith_miller> | haxjs: Yeah, seems like it. |
04:49 | <haxjs> | or is that mean 1cm is allowed but 0x1cm is not? |
04:49 | <keith_miller> | Oh maybe you're right |
04:49 | <keith_miller> | Worth a questino |
04:50 | <haxjs> | push a question in the queue |
04:52 | <michaelficarra> | I don't like that an _ would be mandatory whereas people are learning today that you can pretend they aren't there |
04:53 | <devsnek> | i think it should be `@` |
04:53 | <devsnek> | applies to the decorator idea and discourages people from using asi |
04:53 | <ljharb> | i'm pretty confident there's web code that depends on bigint literal keys in object literals |
04:54 | <Bakkot> | that is a remarkable claim |
04:54 | <ljharb> | you think? |
04:54 | <ljharb> | i mean, bigints are new |
04:54 | <rkirsling> | michaelficarra: can you expand upon "pretend they aren't there"? |
04:54 | <haxjs> | we have bigint landed not very long, so maybe not a big problem? |
04:54 | <michaelficarra> | rkirsling: 1_2_3 === 123 |
04:54 | <ljharb> | but there was a bunch of discussion about bigint's toString not having the "n" for this exact reason so i'm very skeptical that this was a surprise |
04:54 | <rkirsling> | ohhh |
04:55 | <gibson042> | `{ 9007199254740993n: "precise" }` |
04:55 | <rkirsling> | yeah true, C++ uses ' as a separator so there's no clash with _ for custom literals |
04:55 | <Bakkot> | ljharb I just don't expect anyone to have wanted this |
04:55 | <Bakkot> | I thought the toString thing was for access, not definition |
04:56 | <Bakkot> | as in `x[0n] === x[0]` |
04:56 | <Bakkot> | not `{ 0n: 'foo' }`, which is a very strange thing to write |
04:56 | <ljharb> | iirc it came up in both contexts. the access reason was surely more pressing tho |
04:56 | <ljharb> | certainly not making the claim that people *want* this but i'd be surprised if nobody shipped it by now |
04:56 | <michaelficarra> | Bakkot: same |
04:56 | <Bakkot> | I would be surprised if people shipped it |
04:57 | <michaelficarra> | yeah a lot of people use compilers |
04:57 | <Bakkot> | (to a website with nontrivial usage, anyway, where nontrivial is > 10 humans / week) |
05:00 | <rkirsling> | michaelficarra: ahh your tagged template point is a good one |
05:01 | <michaelficarra> | they were called quasis in the beginning for a reason |
05:02 | <michaelficarra> | (quasi as in quasi-literal) |
05:04 | <shu> | michaelficarra: is your concern that some suffixes are builtin and thus have a completely different analyzability / performance reasons? |
05:04 | <keith_miller> | devsnek: woah!!! with is fast in JSC |
05:05 | <keith_miller> | You get all the optimizations |
05:05 | <shu> | michaelficarra: err, s/reasons/profile, dunno why i typed out reasons |
05:05 | <devsnek> | keith_miller: not a problem for numeric suffixes then :P |
05:05 | <rkirsling> | keith_miller: does that mean it's no longer evil |
05:05 | <rkirsling> | :p |
05:05 | <michaelficarra> | shu: no, my concern has nothing to do with performance and is all about language design and syntax budget |
05:06 | <shu> | michaelficarra: well, i threw in analyzability in there |
05:06 | <shu> | i'll wait to hear it when we get to it |
05:06 | <michaelficarra> | not that either, no |
05:06 | <devsnek> | but i do think separate namespace is an actively more confusing/worse dev experience |
05:06 | <haxjs> | I think dan's motivation of separate namespace is good. |
05:06 | <Bakkot> | we should just use template literals |
05:06 | <Bakkot> | tagged templates, that is |
05:07 | <Bakkot> | they work fine for this use case |
05:07 | <Bakkot> | people are even starting to have their editors lint them |
05:07 | <devsnek> | cm`123` |
05:07 | <Bakkot> | https://marketplace.visualstudio.com/items?itemName=frigus02.vscode-sql-tagged-template-literals |
05:07 | <Bakkot> | devsnek right |
05:07 | <Bakkot> | that's perfect |
05:07 | <devsnek> | sure why not |
05:07 | <devsnek> | you should bring it up |
05:07 | <Bakkot> | michaelficarra's already on the queue |
05:07 | <Bakkot> | gonna let him say it |
05:07 | <keith_miller> | devsnek: I wasn't actually following the context. I just wanted to call that out :P |
05:08 | <haxjs> | consider someone write code `var x = 1m;` it's possible someone will add code like `let m = ...` and din't notice the `m` because it's suffix. |
05:08 | <devsnek> | keith_miller: wasn't saying they must be slow, more that if they are slow, what's the point in making the `1px` inside them fast |
05:08 | <devsnek> | (at the cost of dev exp) |
05:08 | <keith_miller> | oh, I mean I hope we aren't making it harder than anything else |
05:08 | <keith_miller> | in a with scope |
05:08 | <haxjs> | template literals like ``px`1``` ??? |
05:09 | <devsnek> | keith_miller: it seems like a function call so |
05:09 | <devsnek> | if you can optimize those |
05:09 | <Bakkot> | hax yup |
05:09 | <haxjs> | I think dan want number from parse time |
05:10 | <haxjs> | template string need runtime cost |
05:10 | <keith_miller> | Yeah, I don't really care for inside a with scope as long as it's lexically obvious |
05:10 | <shu> | this proposal definitely has runtime cost |
05:11 | <haxjs> | yeah it have runtime cost, but i think dan don't want the extra cost of `parseInt(s)` |
05:11 | <Bakkot> | don't think that cost warrants a new syntactic feature |
05:11 | <haxjs> | it not to save such cost , the proposal itself is for dev experience. |
05:13 | <shu> | the weak link for me here is the constraint that "decimal ought to be polyfillable" |
05:13 | <rickbutton> | anecdotally I just moved an entire codebase off of tagged template literals for GraphQL queries, we found that editor support was less than ideal and was brittle |
05:13 | <shu> | not having this doesn't imply decimal can't use a suffix, but that it can't be polyfilled with the same syntax |
05:13 | <haxjs> | i understand we may worry about the syntax budget here again, so maybe we could try to find some more general solution. For example old bind op allow u write `1::px()` |
05:14 | <devsnek> | haxjs: the `px` function needs the source text of the numeric literal |
05:14 | <haxjs> | devsnek: current CSS.px do not need raw literal. |
05:14 | <devsnek> | right but other things do |
05:14 | <devsnek> | like a decimal type |
05:14 | <Bakkot> | we already found a more general solution: it's tagged templates. that's what they're for |
05:14 | <haxjs> | even we need it, we could consider add such ability to bind op! |
05:15 | <devsnek> | Bakkot: inverted tagged templates though :P |
05:15 | <rickbutton> | yeah template literal suffixes |
05:15 | <devsnek> | what happens if you prefix and suffix it |
05:15 | <haxjs> | tagged template have the bad order (prefix vs suffix) and only have raw string not parsed value. |
05:16 | <devsnek> | templates can afford to call parseInt because they can cache it |
05:16 | <Bakkot> | parsing small integers is not slow, I don't think that's an actual problem |
05:16 | <ljharb> | if the parsed value isn't needed tho, then that seems like it's more efficient for most cases? |
05:16 | <rickbutton> | devsnek: pre``string``post => `post(pre("string")` |
05:16 | <Bakkot> | I don't hate tagged template suffixes, tbh |
05:16 | <devsnek> | i slightly dislike them |
05:16 | <rickbutton> | I would love tagged template suffixes |
05:16 | <rkirsling> | is suffix viable to add? it is, right? |
05:16 | <rickbutton> | y devsnek |
05:16 | <rkirsling> | I don't hate that |
05:16 | <devsnek> | rkirsling: ASI |
05:16 | <ljharb> | ``` `3`px ``` ? |
05:16 | <rkirsling> | yeah |
05:17 | <devsnek> | rickbutton: no objective reasons |
05:17 | <rbuckton> | There was a suggestion on the issue tracker to use `'` as a separator, as in `3'px`: https://github.com/tc39/proposal-extended-numeric-literals/issues/8#issuecomment-361714521 |
05:17 | <rkirsling> | devsnek: yeah but like whitespace wouldn't be allowed, right? |
05:17 | <rickbutton> | devsnek: I read "slightly" as "strongly" whoops |
05:17 | <shu> | the numeric suffixes proposal was an update, not asking for any advancement, right? |
05:17 | <devsnek> | yes |
05:17 | <rickbutton> | no advancement |
05:18 | <shu> | thanks |
05:18 | <rickbutton> | rkirsling: String.raw\nfoo is allowed, would be weird if you couldn't do it on the rhs i guess |
05:19 | <rkirsling> | oh |
05:19 | <devsnek> | :D |
05:19 | <Bakkot> | weird but not fatal, I think |
05:19 | <rickbutton> | agree |
05:19 | <devsnek> | js's motto |
05:19 | <rkirsling> | wow that is so strange to me |
05:20 | <ljharb> | seems a bit weird to me to write that code on the lhs in the first place |
05:20 | <rkirsling> | I did not realize you didn't need the `` |
05:20 | <ljharb> | (with the \n) |
05:20 | <devsnek> | wait until you learn about all the places you can put subscript operators |
05:20 | <Bakkot> | rkirsling oh, you do need that |
05:20 | <Bakkot> | the `` is necessary, it just can have a newline before it |
05:20 | <Bakkot> | " String.raw\n` foo ` " works |
05:20 | <devsnek> | there are people who do `a.\nb.\nc` |
05:20 | <rickbutton> | yeah sorry bad escaping, you still need the backticks |
05:21 | <rkirsling> | ohh what rickbutton works as-is but it's *because* of ASI, I see |
05:21 | <rkirsling> | "works" as in, doesn't thro |
05:21 | <rkirsling> | w |
05:21 | <devsnek> | unless foo is undefined |
05:21 | <rkirsling> | right |
05:22 | <ljharb> | devsnek: trailing dot, ick |
05:22 | <ljharb> | devsnek: i've seen that pattern in ruby, is it common in other langs? |
05:22 | <devsnek> | i've seen it in js |
05:22 | <Bakkot> | people write it in JS |
05:22 | <devsnek> | dunno about "common" |
05:22 | <Bakkot> | sometimes they complain in prettier's tracker / social media |
05:22 | <Bakkot> | they get shut down 'cause it's rare enough |
05:22 | <rickbutton> | gross |
05:22 | <devsnek> | what you really have to worry about is the people who put each lexical token on its own line |
05:29 | <rkirsling> | keith_miller: that's good to confirm, I wondered if this was a watchpoint-y sorta thing |
05:29 | <keith_miller> | I think it's just a named property |
05:29 | <keith_miller> | Sometimes a custom property until you set it |
05:30 | <devsnek> | just did a test in v8 |
05:30 | <haxjs> | what' function.length be infinity mean? is it affect any other things? |
05:30 | <devsnek> | setting length to infinity makes accessing `call` slower |
05:30 | <ljharb> | does it? |
05:30 | <ljharb> | i'd think it means the same as if you set the function's length to `'foo'` |
05:30 | <haxjs> | why it would be slow? |
05:31 | <keith_miller> | Yeah, that's surprising |
05:31 | <rkirsling> | oh nice, Alexey is like Yusuke #2 |
05:31 | <keith_miller> | but I don't V8 so.. lol |
05:31 | <rkirsling> | I guess I overlooked that patch |
05:32 | <devsnek> | looks like it completely destroys the IC |
05:32 | <devsnek> | keith_miller: https://gc.gy/68371336.png |
05:34 | <haxjs> | so the conclusion is infinity? |
05:34 | <Bakkot> | haxjs yup |
05:34 | <haxjs> | interesting :-) |
05:34 | <michaelficarra> | devsnek: why f.call() and not f()? |
05:34 | <Bakkot> | as to "what does it mean", it doesn't really mean anything, and it doesn't affect anything else to my knowledge |
05:35 | <devsnek> | michaelficarra: it affects the property access, not the call |
05:35 | <shu> | jridgewell: devsnek: so this change has no new performance implication |
05:35 | <devsnek> | i included the call itself because idk the specifics of v8's DCE |
05:35 | <jridgewell> | 👍 |
05:35 | <shu> | if i'm reading correctly as devsnek noted, setting/defining .length on JSFunctions will transition the map |
05:35 | <shu> | but that's true today |
05:35 | <jridgewell> | As long as this isn't going to cause some weird cascade to other functions |
05:36 | <Bakkot> | this doesn't require the major engines to change |
05:36 | <shu> | yeah, it should transition the map of that function, not all functions |
05:37 | <devsnek> | you could deopt all functions by changing F.p.length :P |
05:37 | <shu> | what happens is that .length is implemented in V8 as a getter/setter pair (even though at the language level it is not), except the setter is a magical engine thing that transitions the .length to a normal data property |
05:38 | <jridgewell> | Does anyone see slides? |
05:38 | <devsnek> | magic accessors are a theme in implementations |
05:38 | <devsnek> | jridgewell: yes |
05:38 | <shu> | devsnek: i'm not sure you can |
05:39 | <shu> | how does that work? |
05:39 | <devsnek> | shu: changing f.p.length? |
05:39 | <shu> | yeah, how would that deopt all functions? |
05:39 | <devsnek> | hm it might only be anonymous ones |
05:39 | <devsnek> | i would have to actually check |
05:40 | <shu> | i thought all functions have a their own length property on their maps |
05:40 | <ljharb> | they should |
05:40 | <devsnek> | yeah but i don't remember what happens when the prototype map changes |
05:40 | <devsnek> | in terms of IC |
05:40 | <devsnek> | not 100% sure if it actually deopts all functions, was going for a joke more than anything else |
05:43 | <devsnek> | wow it deoptimized property access off a named function |
05:45 | <ljharb> | sffc: quickjs |
05:46 | <littledan> | I'm pretty sure people do use QuickJS for stuff actually |
05:47 | <devsnek> | it gets use in wasm |
05:48 | <sffc> | 👍 |
05:48 | <haxjs> | I know some people use quickjs heavily |
05:52 | <ljharb> | littledan: there is no such clause. you certainly can (and have) withhold consensus, but there's no deadline for anything but proposals. normative changes aren't all proposals. |
05:52 | <ljharb> | needing more time to review something is ofc a legit reason not to provide consensus |
05:53 | <littledan> | OK, so that's what I'm saying |
05:53 | <ljharb> | alrighty. you could say that even if it'd been on the agenda for 2 months, ftr. |
05:53 | <akirose> | ryzokuken: if you're talking we can't hear you |
05:53 | <littledan> | I like to review everything ahead of the meetings in written format |
05:54 | <littledan> | even if not all TC39 delegates do these reviews, I like to do so |
05:54 | <littledan> | I'm very happy that Bakkot is doing these changes to clarify these edge cases |
05:54 | <littledan> | and bring interoperability |
05:54 | <shu> | littledan: i'm somewhat surprised by this. i thought the change small enough to review on the fly during his presentation |
05:55 | <rkirsling> | I too thought it was quite trivial, if this is a per-case decision to make |
05:56 | <ljharb> | robpalme: update the queue topic? |
05:56 | <devsnek> | i feel like all my items get changed during the presentation |
06:02 | <shu> | ljharb: that is a problem with people |
06:02 | <ljharb> | that is true |
06:02 | <shu> | one way to combat this could be legalistic disclaimers, but we know how EULA works out even in a legal system *with* teeth |
06:03 | <devsnek> | idk if some random person does this we can just tell them off |
06:04 | <devsnek> | maybe we can start with "standard"js |
06:04 | <shu> | but i think the actual way to combat this is to make TC39 plenary less of a "room where it all happens", because it's not actually true anyway |
06:07 | <leobalter> | littledan: the goal is to facilitate this to make it work. I know there are a lot to discuss |
06:09 | <littledan> | about the earlier topic from Kevin: I'm legitimately extremely tired. It's 8 AM and I didn't get to sleep all last night. This is a topic I'm interested in, and I've been trying to follow the work around it. |
06:10 | <littledan> | I just am unable to take a nap before the meeting. I tried to sleep in late before, this but it wasn't enough. |
06:10 | <rkirsling> | right :( that really takes a lot of stamina |
06:28 | <Bakkot> | time zones are rough |
06:28 | <Bakkot> | I expect next meeting to get a little silly |
12:13 | <littledan> | hey, is there an IRC command that I can copy-paste to send a message to the chairs? |
12:13 | <littledan> | I'd rather not bother one person individually, but last meeting, I had some kind of typo in the command I tried to use, and the message was silently lost |
12:14 | <littledan> | ah sorry I see this in the topic :) |
12:14 | <littledan> | `/notice #tc39-chairs your message here` |
16:59 | <keith_miller> | Bakkot: Are there tests for the length change? I want to make sure I found all the places... |
17:00 | <Bakkot> | keith_miller not as yet. I'll try to come up with some to add to test262 before merging the PR |
17:01 | <keith_miller> | Bakkot: Ok, well, I'm going to land the change now then and double back once there are tests. If you remember, can you ping me when they land? |
17:01 | <Bakkot> | will do |
17:01 | <keith_miller> | thanks! |
17:02 | <Bakkot> | there's basically three categories: intrinsics like Function, weird intrinsics like %ThrowTypeError%, and synthesized on-the-fly functions like you get from `new Promise((f1, f2) => ...)` or `await { then: f => ... }` etc |
17:03 | <Bakkot> | I am not gonna add comprehensive tests for the first kind because there are so many, but I'll try to be comprehensive about the latter two |
17:05 | <keith_miller> | gotcha, I think the first kind is the kind that we got wrong. I changed it so that the base class for the C++ functions takes a length so you have to get the right order. Assuming we want the order to be "length", "name", "prototype" eventually |
17:05 | <keith_miller> | I think all our functions that are wrapping "built-in" JS and user JS are correct |
17:05 | <keith_miller> | were correct* |
17:06 | <keith_miller> | That said, our implementation details don't really map to things in the spec. So I could be missing some cases |
17:06 | <keith_miller> | It's more just about whether something is implemented in JS or C++ |
17:08 | <devsnek> | Bakkot: test262 has a list of top level intrinsics you can use |
17:09 | <devsnek> | we could abstract the logic here for testing the properties https://github.com/tc39/test262/blob/main/test/built-ins/Function/prototype/toString/built-in-function-object.js |
17:10 | <Bakkot> | keith_miller: also take a look at `console.log(Object.getOwnPropertyNames(Proxy.revocable({}, {}).revoke))` |
17:11 | <Bakkot> | devsnek neat |
17:11 | <keith_miller> | >>> Object.getOwnPropertyNames(Proxy.revocable({}, {}).revoke) |
17:11 | <keith_miller> | length,name |
17:11 | <keith_miller> | Is what I get after my change |
17:11 | <Bakkot> | good good |
17:12 | <devsnek> | is it legal to install additional properties between those |
17:12 | <devsnek> | `length,color,name` |
17:13 | <keith_miller> | more likely length, prototype, name |
17:13 | <keith_miller> | since prototype is unspecified IIUC |
17:13 | <devsnek> | sure i just mean |
17:13 | <devsnek> | we should take that into account in the tests |
17:13 | <devsnek> | if its allowed |
17:13 | <keith_miller> | Yeah, I think the spec doesn't say anything |
17:13 | <keith_miller> | What that means is... 🤷♂️ |
17:13 | <devsnek> | forbidden extensions: functions must not have colors |
17:14 | <keith_miller> | You could put something in the function constructor that says no properties should be added until after length and name |
17:14 | <keith_miller> | err function create operation (whatever that's called in the spec) |
17:15 | <devsnek> | oh no i have name/length for some things |
17:15 | <keith_miller> | what things? |
17:15 | <devsnek> | hard to say for sure |
17:16 | <Bakkot> | yeah I'm just going to assert on relative order, not the actual list |
17:16 | <devsnek> | i have `CreateBuiltinFunction()\nSetFunctionName\nSetFunctionLength()` sprinkled through a lot of the spec |
17:16 | <devsnek> | the source* |
17:16 | <Bakkot> | find-replace |
17:16 | <devsnek> | idk how to find replace that |
17:17 | <devsnek> | i'm just grepping for SetFunctionName |
17:17 | <keith_miller> | SetFunctionName isn't inside CreateBuiltinFunction()? Seems like that would be the idiomatic way to do it |
17:18 | <Bakkot> | the point of this change is to make that change to the spec! |
17:18 | <Bakkot> | currently the spec just asserts the existence of these properties; we want to make it install them in CreateBuiltinFunction |
17:18 | <keith_miller> | Bakkot: For what it's worth I think you can get add a thing to the spec that says length, name must be the first two properties on all functions |
17:18 | <keith_miller> | well that's some poor phrasing lol |
17:18 | <keith_miller> | but I think you get the point |
17:18 | <devsnek> | oh if it moves them to createbuiltinfunction |
17:19 | <devsnek> | that makes this way easier |
17:19 | <Bakkot> | that would require V8 and Chakra to change |
17:19 | <Bakkot> | but yeah probably |
17:19 | <keith_miller> | "that would require V8 and Chakra to change" is that in response to my comment? |
17:19 | <Bakkot> | keith_miller yeah |
17:19 | <Bakkot> | wait, SM and Chakra |
17:19 | <keith_miller> | Where does that occur? |
17:19 | <Bakkot> | not V8 |
17:19 | <keith_miller> | Is prototype first or something? |
17:20 | <Bakkot> | yup |
17:20 | <keith_miller> | gotcha |
17:20 | <keith_miller> | Seems like prototype should be 3rd because it's only sometimes there |
17:20 | <keith_miller> | but that's a nit |
17:20 | <keith_miller> | and I don't really care lol |
17:20 | <Bakkot> | devsnek https://github.com/tc39/ecma262/pull/2116/files#diff-3540caefa502006d8a33cb1385720803R8889-R8890 |
17:21 | <Bakkot> | yeah that's my feeling also |
17:21 | <Bakkot> | plus then it's alphabetic! |
17:21 | <devsnek> | very exciting |
17:21 | <keith_miller> | "alphabetic" until you get to any other functions lol |
17:21 | <devsnek> | well the signature of CreateBuiltinFunction is not exciting |
17:21 | <devsnek> | but oh well |
17:21 | <Bakkot> | yeah... |
17:21 | <Bakkot> | hope to get tooling to help with that eventually |
17:21 | <Bakkot> | so you can see the signature of an AO if you hover over it, or something |
17:22 | <devsnek> | we should integrate objective c's named arguments into the spec |
17:22 | <Bakkot> | ehhhhhh |
17:22 | <keith_miller> | I lowkey love that about Obj-C |
17:22 | <keith_miller> | It makes reading code so easy |
17:22 | <devsnek> | yeah but my editor can just |
17:22 | <keith_miller> | which is what I'm doing like 90% of the time |
17:22 | <devsnek> | insert the names anyway |
17:22 | <keith_miller> | what do you mean by that? |
17:23 | <devsnek> | like it takes the code `foo(a, b, c)` and renders it as `foo(arg1: a, arg2: b, arg3: c)` |
17:23 | <keith_miller> | Oh, I see |
17:23 | <devsnek> | i think vscode can do that too |
17:24 | <devsnek> | i know that's advertised as a feature of rust-analyzer |
17:24 | <keith_miller> | That doesn't work too well for C++ since it's common-ish practice to have the signature not have variable names only types |
17:24 | <Bakkot> | no reason the rendered spec couldn't pull that trick (as an opt-in mechanism); main issue would be discoverability probably |
17:24 | <keith_miller> | And you'd have to integrate with the compiler |
17:24 | <keith_miller> | which can be problematic if you're trying to get something compiling |
17:24 | <devsnek> | yeah you have to use language servers |
17:24 | <devsnek> | rip battery life |
17:24 | <keith_miller> | that said, that's a nice feature |
17:25 | <devsnek> | i think this screenshot is from vscode https://user-images.githubusercontent.com/2690773/75099758-74d99400-55d6-11ea-856f-565e130a7e0c.png |
17:26 | <Bakkot> | intellij is reasonably good at this for java too |
17:27 | <Bakkot> | there is so much room for our tools to get better... |
17:27 | <Bakkot> | I think about this a lot more since I started working with a smalltalker, since this is all they can talk abouot |
17:27 | <Bakkot> | (that is, a person who worked on/with Smalltalk, the language) |
17:29 | <devsnek> | i think you mean smalltalk, the os |
19:16 | <dandclark> | bradleymeck: Did you get a chance to review https://tc39.es/proposal-import-assertions/? It's on the schedule for today, and we've heard from the other Stage 3 reviewers; it would be great to confirm whether you've also been able to review. |
19:42 | <bradleymeck> | dandclark: i've had reviews in meetings and had a final one on saturday to clear things up |
19:43 | <bradleymeck> | shu and ljharb went over concerns about some editorial wording for the host constraint but other than that it looked fine from my end |
19:55 | <dandclark> | bradleymeck: Great, thanks! |