-
Notifications
You must be signed in to change notification settings - Fork 34
stage 3 tracking #117
Comments
Things have gotten really busy for me and I don't think I'll be able to prepare this for stage 3 (at least not on my own) in time for the stage advancement deadline on 10th Sep. |
Maybe also wait for tc39/ecma262#2045 to merge |
I think @avandolder is interested in helping. I can help too. The fact that tc39/ecma262#2045 is stalled is a major obstacle. If there's anything I can do to help there, let me know! You can ping me on IRC any time. |
Hmm cause there's nothing to update with #2045... I didn't get a clue about what should I change to make it merged, or it just waiting for some editor to press the merge button? |
The editors need to review it, which will take a while because it's a substantial change. |
@jorendorff That PR is on the top of my list for review. I'll hopefully get to it this week, possibly even today. An additional review from you (even if it just results in an approval) would be helpful. |
I'm not sure how I missed this, but I will unfortunately not be able to provide the stage 3 review I committed to at the previous plenary. my sincere apologies to the champions and stakeholders. I will be doubly careful to ensure I stay on top of review commitments going forward. |
@mpcsh That's fine, we will ask for a new one at the meeting next week: tc39/agendas@868028c |
Update: @codehag has volunteered (possibly to be replaced in the future by @jorendorff). |
Hey - are there any updates on this proposal? When do you expect to present it again? (I am asking because Node.js has started to integrate async iterators in many places and this would be very useful for Node!) |
@benjamingr out of interest, can you link to an example or two of how Node is using iterators in the codebase? Also eagerly awaiting this proposal! |
But mostly streams and all stream helpers (like pipeline), the easiest way to get a Node.js stream is to use The "new way" of writing Node.js is getting rather pervasive:
I came here because I really wanted a |
And to clarify - I think it's safe to say Node.js is very interested in this proposal and since a bunch of our use cases arose from web platform APIs I am sure a very compelling case can be made for it in browsers too. |
This proposal was originally made by me and Domenic, so I do hope our respective ecosystems find it useful 😅 |
Though I'm happy to see iterator helpers and usage of for await (const req of connection) {
// easy to write but actually wrong in some cases
req.response(await longTimeAsyncIO(req))
// oops, actually turn handling into one-by-one,
// and if it fails it actually block all future connections
}
for await (const req of connection) {
try { longTimeAsyncIO(req).then(req.response.bind(req)) } catch {}
} |
@Jack-Works I believe the whole point of “for await of” with async iterators is to serialize code so it appears sync yet works with backpressure (not requesting more items from the iterator ahead of time). Making async code look and behave serially is the major selling point of async/await for me. It is very easy to just consume and process several bits from the iterator at once (call .next several times without waiting for the first one to fulfill). Also I suggest we move this discussion elsewhere as it does not relate to this proposal’s status :) |
Just mentioning, although not yet stage 3, we have seen some implementation begin (flagged), in Firefox, according to the README. |
That’s great thanks for the update :) |
@gibson042 @ljharb @rbuckton This proposal is ready for review. Note the 3 open issues which will be resolved by the remaining open PRs depending on committee decision when this is presented for stage 3. Please review those PRs in addition to the current spec text. |
Reminder @gibson042 @ljharb @rbuckton that this proposal is potentially up for stage 3 at the next meeting. The slides have been posted to the agenda. Please review this proposal ahead of the meeting. |
Do we normally have headings as deep as "3.1.2.2.2.1.1"? The formatting for the headers looks off for https://tc39.es/proposal-iterator-helpers/#sec-wrapforvaliditeratorprototype-object and a few others. |
@rbuckton The section numbers are correct. It's not terribly unusual. See 14.7.5.10.2.1, 16.2.1.5.1.1, 16.2.1.5.2.1, 16.2.1.5.2.2, 16.2.1.5.2.3, 16.2.1.5.2.4, 16.2.1.5.2.5. |
Sure, though I'll wait on wait on the resolution to #211 first. In the slides, which assume #211 is merged, I've named them |
|
I'd be fine with the wording of the scalar methods on Methods like |
Re: handling of NaN, see #169. This was also mentioned during the presentation in July. |
Yup. It's gross, but consistent -
See #218 for the under-specification issue. I believe the intent of "built-in async function" is that they behave like normal async functions, i.e. all ThrowCompletions are wrapped up in promise rejections. |
@rbuckton I think you're confused here. The OrdinaryHasInstance test is done in the path that is supporting Iterables. Are you thinking of a case where an object implements |
Yes, but also any class that subclasses class BadIterator extends Iterator {}
const iter = Iterator.from(new BadIterator()); // succeeds
typeof iter.next === "undefined";
const iter2 = Iterator.from({}); // throws TypeError because there's no `next` method. |
Is the proposal's %Iterator.prototype% replacing %IteratorPrototype%? In https://tc39.es/proposal-iterator-helpers/#sec-well-known-intrinsic-objects it seems to be referred to in both ways, but I can't find any examples of similar aliasing in the main spec. |
Ah no, I was scanning the steps for reduce and jumped to step 8 and missed the check on step 4. |
It's just an alternative way to reference it. In the well-known intrinsic objects section, we allow this kind of reference via
|
Yes, but no other entry in the table is structured the way its structured in the proposal. All of the %XPrototype% entries in that table are listed individually because there's no way to directly access them by dotting off of something as you quoted. Having both %IteratorPrototype% and %Iterator.prototype% in the spec seems unnecessarily confusing (as evidenced by the fact I had to ask for clarification), but is something that can be addressed in the actual ecma262 PR. But this goes to my original point. The algorithm steps in Iterator.from and AsyncIterator.from don't reliably check for If you're ok with that, then that's fine. But I wanted to make sure that was an intended consequence rather than something that was overlooked. |
In the actual PR, we wouldn't list |
It's also worth noting that the behavior of |
@gibson042 @ljharb @rbuckton Please do another review. You may want to review each of the recently merged PRs individually, or you can review the spec text as a whole. I think the section most in need of review is the new built-in async functions section (and associated machinery) added in #240. I plan to ask for stage 3 at the upcoming November meeting. |
Note to reviewers about the built-in async functions: I've opened #245 which removes that infrastructure from this proposal and instead relies on tc39/ecma262#2942 to add it. You can still review that PR if you like, but you should no longer feel obligated to do so. Now you can focus on just the parts that are relevant to this proposal. |
Fixed by #251. |
The text was updated successfully, but these errors were encountered: