15:01 | <bakkot> | morning all |
15:01 | <bakkot> | and/or whatever time it is |
15:01 | <Rob Palmer> | Plenary is starting now! |
15:01 | <Rob Palmer> | Please join to find out if TC39 will approve ES2023 |
15:01 | <littledan> | I hope it gets approved 😬 |
15:02 | <littledan> | please vote yes 🥺 |
15:35 | <littledan> | Frank's comments are generally talking in terms of various absolutes which I think are too strong |
15:51 | <Chris de Almeida> | we need to clean up the notes for the conclusion of ZDT stage 1 |
15:51 | <littledan> | I wrote a conclusion right under the heading; now writing main points |
15:51 | <littledan> | (not deleting the raw notes just yet) |
15:52 | <Kris Kowal> | ptomato: Is there any risk that zone date time formatting might require a temporal constructor to close over host data? At Agoric, we’ve enjoyed the separability of now() from temporal constructors and hope for that trend to continue. |
15:52 | <Chris de Almeida> | thanks for your hard work on the notes, Dan! really appreciate it. time at a premium today, so needed to move |
15:56 | <ptomato> | ptomato: Is there any risk that zone date time formatting might require a temporal constructor to close over host data? At Agoric, we’ve enjoyed the separability of now() from temporal constructors and hope for that trend to continue. Temporal.ZonedDateTime with its toLocaleString method; you just can't cache the expensive operations by creating a formatter object to format multiple ZonedDateTime , and you can't formatRange or formatToParts , so that's what this proposal is solving. |
15:56 | <ptomato> | Intl.DateTimeFormat does close over host data, because if you construct it without a timeZone parameter then it internally assumes the host's current time zone, but that's a long-preexisting problem and I'm assuming you're not referring to that |
15:57 | <ptomato> | my preferred solution would actually remove that closing over host data in the case of ZonedDateTime. (in other cases, it wouldn't be web-compatible to change that) |
16:08 | <bakkot> | I do not like "eliminates the need for developers to understand higher-order functions" as a motivation for design decisions |
16:08 | <bakkot> | I really really do not like it |
16:08 | <littledan> | I think we should avoid subclassing AsyncSnapshot... it's confusing for these examples |
16:08 | <littledan> | this is a has-a relation, not a is-a |
16:09 | <Justin Ridgewell> |
|
16:09 | <Justin Ridgewell> | That's how I would normally use it. |
16:28 | <Willian Martins> | Do you have the Task attribution link? I don't know the scope of this api. |
16:28 | <Chris de Almeida> | https://docs.google.com/document/d/1_m-h9_KgDMddTS2OFP0CShr4zjU-C-up64DwCrCfBo4/edit#heading=h.pny1oyazzdg0 |
16:29 | <Chris de Almeida> | https://bit.ly/task-attribution friendly link |
16:30 | <Justin Ridgewell> | Termination is https://github.com/tc39/proposal-async-context/issues/52 |
16:30 | <Justin Ridgewell> | It's still WIP, and not proposed to be added yet |
16:50 | <ryzokuken> | https://notes.igalia.com/p/TWx5MikWg |
16:50 | <Andreu Botella> | https://notes.igalia.com/p/TWx5MikWg |
17:24 | <ryzokuken> | I think that's not visible publicly |
18:14 | <littledan> | There's a reason why the W3C broke off from IETF--to not deal with this bureaucracy. (And then WHATWG broke off from W3C for the same reason...) |
18:14 | <littledan> | We don't realize how lucky we are bureaucracy-wise! |
18:16 | <shu> | "You are now DAC, the do anything committee" |
18:17 | <Chris de Almeida> | it's oddly non-bureaucratic in certain ways as well.. IETF WGs are mailing list all the things and consensus, no voting, no memberships, etc |
18:18 | <Michael Ficarra> | the default state of being is no bureaucracy; these organisations do this to themselves |
18:18 | <Chris de Almeida> | but IESG gatekeeping... |
18:42 | <Kris Kowal> | chipmorningstar and I’ve been ruminating a procedural question regarding the staging process. It’s our understanding that a canonicalization proposal must be preceded by a beatification proposal. Did we miss something? |
18:44 | <ptomato> | the syntax of IANA time zone identifiers:
|
18:46 | <ptomato> | (but then there are a few legacy aliases in the TZDB that don't follow these rules) |
19:05 | <Michael Ficarra> | I like Promise.create ! |
19:05 | <shu> | creat pls |
19:06 | <HE Shi-Jun> | But Promise.create will have very different api with Object.create ? |
19:07 | <Michael Ficarra> | ... so? |
19:07 | <Chris de Almeida> | Promise.create does have baked in anti-bikeshedding... |
19:07 | <HE Shi-Jun> | I expect the same method name would have similar api. |
19:08 | <shu> | i regret to inform you there are only a few good english words |
19:08 | <ptomato> | what. Promise.embiggen is a perfectly cromulent option |
19:08 | <nicolo-ribaudo> | Promise.deconstructed |
19:08 | <nicolo-ribaudo> | Promise.unpacked |
19:08 | <Michael Ficarra> | hey hey hey take it to TDZ |
19:08 | <Chris de Almeida> | what. |
19:08 | <HE Shi-Jun> | Personally I prefer Promise.deferred |
19:10 | <Justin Ridgewell> | Ditto, I want deferred |
19:10 | <Kris Kowal> | Rejection is resolution. |
19:10 | <Chris de Almeida> | https://github.com/tc39/proposal-promise-with-resolvers/issues/2 |
19:11 | <Chris de Almeida> | bikeshedding thread ☝️ |
19:11 | <Justin Ridgewell> | The precedent is strong: https://github.com/tc39/proposal-promise-with-resolvers/issues/2#issuecomment-1483909052 |
19:11 | <HE Shi-Jun> | It's always misunderstanding what "resolve" means in the community |
19:11 | <Kris Kowal> | ljharb: Indeed! Resolve can defer, fulfill, or reject! |
19:11 | <Chris de Almeida> | preference for embiggen but will settle for deferred |
19:11 | <ryzokuken> | we need to resolve the meaning of resolve |
19:12 | <ljharb> | lol i suppose it could be "fulfillers" or something |
19:12 | <Rob Palmer> | Resolve, fulfill and other promising terminology is clarified in States and Fates. |
19:12 | <ryzokuken> | Promise.unwrap |
19:13 | <Kris Kowal> | I’m not even sure how far back Q.defer() goes. It may have gone back to Q from Tyler Close’s Waterken, but it may have started with my work. |
19:13 | <Kris Kowal> | My reasoning was that Q.defer() => Deferred |
19:13 | <HE Shi-Jun> | I guess many non-native speakers (like me) don't know the word embiggen ... |
19:13 | <rbuckton> | IIRC, JQuery started with defer as well |
19:14 | <danielrosenwasser> | Promise.withLifecycle |
19:14 | <Andreu Botella> | (It's a joke from The Simpsons, it's not an actual English word) |
19:14 | <ljharb> | it's not a real word, it's a Simpsons reference (that's kind of become a real word) |
19:14 | <shu> | it is an actual english word now |
19:14 | <Kris Kowal> | It does indeed go back to Tyler Close’s Waterken ref_send/web_send library https://waterken.sourceforge.net/web_send/ |
19:15 | <danielrosenwasser> | https://www.merriam-webster.com/dictionary/embiggen :) https://www.merriam-webster.com/dictionary/cromulent :( |
19:15 | <HE Shi-Jun> | Resolve, fulfill and other promising terminology is clarified in States and Fates. |
19:16 | <ljharb> | i declare shenanigans |
19:16 | <rbuckton> | From the reading I've done, it seems like the ecosystem migration from .defer() to new Promise was due to the executor being safer as it could capture an unexpected exception and reject the promise. That meant that new Promise was a better API for the more common use cases, not that .defer() in and of itself was a bad API. |
19:16 | <Kris Kowal> | Waterken’s use of defer() goes back to 2004. |
19:16 | <bakkot> | I kinda liked Promise.capability , but possibly only because I'm familiar with that name from the spec using it |
19:16 | <rbuckton> | So it seems like this almost exactly matches how .defer() was used in Q and JQuery. |
19:17 | <bakkot> | (Promise.withResolvers also seems fine) |
19:17 | <ljharb> | in jquery the promise itself had resolve and reject methods on it, so i don't think that's a match |
19:17 | <bakkot> | (Promise.defer seems somewhat less fine) |
19:17 | <Michael Ficarra> | defer implies something time-based to me, akin to setTimeout |
19:17 | <Andreu Botella> | let's do Promise.bikeshed |
19:17 | <Kris Kowal> | @bakkot Promise.caps would be more apropos. The original idea is that the read-cap and write-cap could be distributed to different parties. |
19:18 | <ljharb> | "cap" reads to me as a hat, not short for "capability" :-p |
19:18 | <rbuckton> | And I'm probably not the only one that's called the same functionality defer or deferred in my own code and in npm packages (i.e., https://www.npmjs.com/package/@esfx/async-deferred though that exports a class called Deferred ) |
19:18 | <bakkot> | cap means "lie" actually |
19:18 | <ljharb> | nope https://npmjs.com/promise-deferred |
19:18 | <danielrosenwasser> | "cap" reads to me as a hat, not short for "capability" :-p |
19:18 | <Chris de Almeida> | FALSE. it's a real word |
19:18 | <Kris Kowal> | And I'm probably not the only one that's called the same functionality |
19:18 | <Chris de Almeida> | stop gatekeeping |
19:18 | <Andreu Botella> | Promise.gatekeep |
19:19 | <nicolo-ribaudo> | If we end up going with defer, ideas for alternative names for https://github.com/tc39/proposal-defer-import-eval/ are welcome :P |
19:19 | <bakkot> | see that's the normal thing that defer means |
19:19 | <shu> | no cap |
19:19 | <Kris Kowal> | I am supportive of Promise.withResolvers(), and failing that, Promise.defer(). Of others I can be convinced. Really, just want the darn feature already. |
19:19 | <bakkot> | we should reserve the use of defer for its standard English usage and find a different name here |
19:20 | <Chris de Almeida> | NB: it was part of the ES promise proposal at one point, and was called deferred |
19:20 | <ryzokuken> | Promise.deconstruct |
19:20 | <ptomato> | that sounds like undoing what the Promise constructor does |
19:21 | <Bradford Smith> | Was I the only person who thought the plan was to have import.source for both static and dynamic import? |
19:21 | <Chris de Almeida> | well -- Deferred is the object returned from Promise.defer() |
19:21 | <Bradford Smith> | I thought part of the point was to fix syntax ambiguity. |
19:21 | <ljharb> | no, i thought the same |
19:22 | <ryzokuken> | that sounds like undoing what the Promise constructor does Promise.destruct 😳 |
19:22 | <ptomato> | true |
19:22 | <ljharb> | Promise.gozer |
19:24 | <ryzokuken> |
half-joking here, but why not |
19:24 | <HE Shi-Jun> | I like meta method :) |
19:25 | <rbuckton> | Most .withX methods I've seen generally don't behave this way either. I normally expect it to mean "the same thing, but with something changed" or "this thing plus that other thing", such as date.withCalendar in Temporal: https://tc39.es/proposal-temporal/docs/plaindate.html#withCalendar |
19:25 | <Andreu Botella> | Promise.meta.url |
19:25 | <bakkot> | or with on Array.prototype for that matter |
19:26 | <Michael Ficarra> | ljharb: just do import source a from 'b'; const from = a; |
19:27 | <ljharb> | or import source { default as from } from 'b'; , sure. but it's awkward |
19:27 | <Michael Ficarra> | wait what that shouldn't work |
19:27 | <Michael Ficarra> | the unicode escape should be the same |
19:27 | <ljharb> | no? |
19:28 | <Michael Ficarra> | I think Luca is wrong here |
19:28 | <nicolo-ribaudo> | The spec right now uses "source text matched by" |
19:28 | <nicolo-ribaudo> | For the restriction |
19:28 | <Michael Ficarra> | why? |
19:28 | <bakkot> | or |
19:28 | <bakkot> | static methods are a different beast |
19:29 | <bakkot> | I don't think it's likely to be confusing |
19:29 | <nicolo-ribaudo> | why? |
19:29 | <rbuckton> | Have we considered source phase imports and export declarations? i.e., do we have to do
but can't do
? |
19:29 | <ljharb> | that seems reasonable to do |
19:29 | <Michael Ficarra> | nicolo-ribaudo: we should def change it, that is something I would bring up during editorial review |
19:29 | <nicolo-ribaudo> |
export x from "x" is currently invalid too |
19:30 | <HE Shi-Jun> | precedent: await.all ? |
19:30 | <rbuckton> | I think it should be supported, but export { default as x } from "x"; |
19:30 | <nicolo-ribaudo> | precedent: await.all ? |
19:30 | <Michael Ficarra> | super.foo and super.foo() are unrelated |
19:30 | <Michael Ficarra> | to each other |
19:30 | <bakkot> | those are very related! |
19:31 | <rbuckton> | Which is why I brought up the topic. If we did want export source { default as x } from "y" , then wouldn't we want import source { default as x } from "y" ? |
19:31 | <nicolo-ribaudo> | Yeah I agree we should support the export from, it was even included in some slides I presented at some point I think |
19:31 | <HE Shi-Jun> | Well that proposal didn't go very well last time it was presented if I recall correctly |
19:31 | <nicolo-ribaudo> | Maybe in the slides I presented on Monday |
19:32 | <shu> | i dislike import.source in static imports personally |
19:32 | <shu> | it's treating symmetry between static and dynamic forms as a goal, whereas that's just a "nice to have" constraint imo |
19:32 | <Kris Kowal> | Strongly favor the proposal as presented today. |
19:33 | <shu> | the goal, as Guy said, is to have something that's nice to type, so people will type it, and get the nice static analysis guarantees from bundlers and tooling |
19:33 | <ljharb> | sure |
19:33 | <ljharb> | i'm not sure import source and import.source are meaningfully different to type tho, and they're identical for static analysis |
19:33 | <ljharb> | obv if folks just straight up find it icky then that matters |
19:34 | <Chris de Almeida> | it does give some ick, tbf |
19:34 | <Kris Kowal> | I do find the . as indicative of dynamic. |
19:34 | <Justin Ridgewell> | We discussed LR1 in https://github.com/tc39/notes/blob/ace580d512db32624bd74b843e0d9757278753cd/meetings/2017-11/nov-29.md?plain=1#L303 |
19:34 | <shu> | yeah to be clear i'm purely talking about subjective ickiness |
19:34 | <nicolo-ribaudo> | I find it ugly, but I don't have any technical reason against it |
19:34 | <ljharb> | and i'm perfectly content to accept that a number of folks find it icky :-) i just want to be clear in that case that that's the rationale, nothing technical |
19:35 | <Justin Ridgewell> | it's treating symmetry between static and dynamic forms as a goal, whereas that's just a "nice to have" constraint imo |
19:35 | <Justin Ridgewell> | https://matrix.to/#/!RkpmGMjJtqLKXzByOT:matrix.org/$a5LIDdkHQL28xkgFoGx8emGNcVNOEI4BejJWms32dG8?via=matrix.org&via=igalia.com&via=mozilla.org |
19:35 | <shu> | This is actually a huge improvement for bundlers import.source in the static form? |
19:35 | <nicolo-ribaudo> | This is actually a huge improvement for bundlers |
19:35 | <shu> | likei understand import.static for the dynamic form is a big improvement for bundlers |
19:35 | <Justin Ridgewell> | No preference on whether dot or space, just the syntatic requirement |
19:36 | <shu> | why is it an improvement in the static case? |
19:36 | <ljharb> | being syntactic is a huge improvement for linters too :-) |
19:36 | <Justin Ridgewell> | It prevents accidental deoptimizations |
19:36 | <shu> | what? |
19:36 | <shu> | how can a static import deopt? |
19:37 | <Justin Ridgewell> | Having a dynamic import("foo.js", attributesComputedAtRuntime) would cause us to add a lot of extra code to handle phase imports |
19:37 | <bakkot> | I think you're talking past each other |
19:37 | <shu> | yes, that's the... dynamic case |
19:37 | <shu> | i am asking, how does import.source help the static case |
19:37 | <Justin Ridgewell> | Static import can't depot, only the dynamic case |
19:37 | <Justin Ridgewell> | Oh, I thought you were reference the static syntax in dynamic import |
19:37 | <shu> | yes, so... again, how does import.source help bundlers in the static import case |
19:37 | <Justin Ridgewell> | It doesn't |
19:38 | <shu> | okay, that matches my intuition, thanks |
19:38 | <Michael Ficarra> | I don't think anybody has made a case for import.source in the decl form other than "it matches", which is not strong IMO |
19:39 | <littledan> | Who made the +1 reply that we just went through? |
19:39 | <bakkot> | I don't think anybody has made a case for |
19:40 | <HE Shi-Jun> | Note import.source also help to solve import source \n from ambiguity for module declarations (module source {} ). |
19:40 | <Michael Ficarra> | bakkot: not an actual ambiguity, an imagined one |
19:41 | <Michael Ficarra> | I completely agree with Guy here, we don't need to worry about future syntax for this |
19:41 | <shu> | yeah |
19:41 | <littledan> | apologies for creating the confusion about from |
19:47 | <Kris Kowal> | NB: it was part of the ES promise proposal at one point, and was called Promise.defer should be preferred based on historical precedent, but Mark originally proposed defer https://web.archive.org/web/20160404122250/http://wiki.ecmascript.org/doku.php?id=strawman:concurrency#q.defer |
19:47 | <rbuckton> | If the concern around import source from from is it being ambiguous with module declarations, we could consider an alternate syntax for importing those declarations as well. i.e., import x from <module_ref> (with the literal <> characters), so there would be no ambiguity. |
19:47 | <Michael Ficarra> | what? we already ban let |
19:49 | <Chris de Almeida> | I’m not suggesting that |
19:49 | <rbuckton> | Not a huge fan of import.source x from "y" , to be honest. I understand its an option, but I'd rather not break that glass unless we need to. |
19:50 | <Kris Kowal> | And it seems we don’t need to. |
19:50 | <Bradford Smith> | Sorry, what would be the meaning of export source ... ? |
19:50 | <littledan> | Not a huge fan of |
19:50 | <ljharb> | Sorry, what would be the meaning of export source foo from 'path' |
19:50 | <littledan> | So I like the "break glass" mental model |
19:51 | <littledan> | let isn't reserved in strict mode either btw |
19:51 | <Bradford Smith> | |
19:51 | <rbuckton> | I can see it now, someone writes a prettier or dprint rule to format code as import .source x from "y" so it looks less like an expression. |
19:51 | <HE Shi-Jun> | what? we already ban from as identifier in ES6 😅 |
19:52 | <Michael Ficarra> | and as |
19:52 | <Michael Ficarra> | import { as as as } .... |
19:53 | <rbuckton> | Nooo. I actually have a package that exports a function with that name. |
19:54 | <Chris de Almeida> | need stage 3 reviewers for Promise.embiggen() -- any volunteers? |
19:54 | <rbuckton> | e.g.,
|
19:54 | <Andreu Botella> | Promise.source.from() |
19:55 | <HE Shi-Jun> | Nooo. I actually have a package that exports a function with that name. import {from} from module might ok, but import from from "from" really a mess :P |
19:55 | <Michael Ficarra> | need stage 3 reviewers for |
19:56 | <Chris de Almeida> | yeah, might not have time -- can do it tomorrow |
19:56 | <rbuckton> | I mean, in is a pseudo-keyword in for-in (and an actual keyword) |
20:01 | <Michael Ficarra> | I mean, you don't need quorum to assign stage 3 reviewers |
20:01 | <Michael Ficarra> | doesn't hurt to ask |
20:02 | <shu> | quorum is not even a concept we have |
20:02 | <Michael Ficarra> | eh, we kind of do |
20:03 | <Michael Ficarra> | on the last meeting day, when people are trickling in in the morning, we often delay the meeting a few minutes until we reach quorum |
20:03 | <nicolo-ribaudo> | "consensus by locking everyone else out of the room" |
20:03 | <Michael Ficarra> | everyone is always late on Thursday morning |
20:03 | <Michael Ficarra> | too much drinking Wednesday night |
20:04 | <shu> | fair, quorum is not a process formalism we have, but it is a norm we operate by where we kinda know who the core stakeholders are and don't pull a fast one when they aren't present |
20:12 | <littledan> | fair, quorum is not a process formalism we have, but it is a norm we operate by where we kinda know who the core stakeholders are and don't pull a fast one when they aren't present |
20:13 | <Justin Ridgewell> | need stage 3 reviewers for |
20:32 | <littledan> | Can we add a continuation topic to the agenda for Array grouping? |
20:33 | <littledan> | I can be backup presenter if needed, but I thought ljharb was going to present |
21:00 | <ljharb> | ah good call, i thought the overflow item was already there. the PR has been rebased so i'd love to present it |
21:04 | <Rob Palmer> | How long do you need? We miscounted before so we may well run into the afternoon session. |
21:09 | <littledan> | I think we should expect to go into the afternoon session. I don't want to be rushed in the source maps topic either. |
21:09 | <littledan> | is it an important goal for others to avoid the afternoon session tomorrow? |
21:25 | <ljharb> | How long do you need? We miscounted before so we may well run into the afternoon session. |
21:28 | <Rob Palmer> | Let's say 15mins then. |
21:54 | <Chris de Almeida> | https://hackmd.io/d88UqzA8TFaKRdjY3t8vyQ schedule updated. please take a look and lmk if any concerns |
21:55 | <Chris de Almeida> | it would also be helpful to be prepared to present in the earlier part of the day, if we breeze through quickly |
21:57 | <littledan> | LGTM, yeah this is a good conservative approximation so we don’t rush too much, but we might get through it in the morning |