# Ecma TC39 August 2021 agenda overview Ecma Technical Committee 39 ([TC39](https://www.ecma-international.org/memento/tc39.htm)) is the group responsible for standardizing JavaScript as a formal "ECMAScript" specification, and generally releases a new edition every year. Substantial changes are managed at "plenary" meetings involving delegates of member organizations (including the OpenJS Foundation!). One such meeting is taking place this week, and here's a sampling of items on the [agenda](https://github.com/tc39/agendas/blob/master/2021/07.md), grouped by how close they are to inclusion according to the documented [four-stage process](https://tc39.es/process-document/). Feel free to reach out if you want your voice to be heard regarding any of these. [TOC] # Stage 3 proposals A stage 3 proposal advances into the working draft for the next edition after [tests](https://github.com/tc39/test262) are ready, at least two independent implementations in browsers and/or Node.js and/or other engines pass them, and the committee approves it. ## What should be the official name of `Realm`? https://github.com/tc39/proposal-realms proposes introducing a way to construct a new global object with intrinsics, similar to behavior with Node.js [`vm`](https://nodejs.org/api/vm.html) or HTML \<iframe> [`contentWindow`](https://html.spec.whatwg.org/multipage/iframe-embed-object.html#dom-iframe-contentwindow). https://github.com/tc39/proposal-realms/issues/321#issuecomment-900523250 is exploring names for the new constructor. ## Array/indexable relative indexing (`arr.at(index)`) https://github.com/tc39/proposal-relative-indexing-method proposes introducing an `at` method on Array, <em>Type</em>Array, and String instances for retrieving an item at arbitrary index, with negative values interpreted from the end as in `slice` and DOM method `item` (e.g., `"abcdef".at(-2)` is "e"). It is seeking advancement to Stage 4. ## `Object.hasOwn` static function https://github.com/tc39/proposal-accessible-object-hasownproperty proposes a static function to replace use of `Object.prototype.hasOwnProperty.call(obj, name)` with `Object.hasOwn(obj, name)`. It is seeking advancement to Stage 4. ## Class `static {…}` initialization blocks https://github.com/tc39/proposal-class-static-block proposes a mechanism to perform additional static initialization at the end of class definition evaluation with access to private state: ```js let assertInstanceOfC; class C { static x = {…}; static y; #isC static { this.y = getYFromX(this.x); assertInstanceOfC = v => {v.#isC; return true}; } … } ``` It is seeking advancement to Stage 4. ## Temporal https://github.com/tc39/proposal-temporal proposes a "Temporal" collection of classes for supporting convenient and correct use of dates and times. It is seeking a number of [proposed normative changes](https://ptomato.name/talks/tc39-2021-08/). # Stage 2 proposals A stage 2 proposal advances to stage 3 after spec text is complete, reviewers sign off, and the committee approves it. ## Iterator helpers https://github.com/tc39/proposal-iterator-helpers proposes adding Iterator and AsyncIterator methods to make working with them more convenient, such as `map` and `filter` and `take`. It is not seeking advancement. ## RegExp Unicode sets and properties of strings https://github.com/tc39/proposal-regexp-set-notation proposes a new flag for extending regular expression character classes to support set operations as available for [Unicode regular expressions](https://www.unicode.org/reports/tr18/#Subtraction_and_Intersection), such as "non-ASCII digits" `[\p{Decimal_Number}--[0-9]]` or "single-code-point emoji" `[\p{RGI_Emoji}&&\p{Any}]`. It is not seeking advancement. ## `Intl.DurationFormat` https://github.com/tc39/proposal-intl-duration-format proposes an interface for formatting durations such as the length of a flight or elapsed audio/video time: ```js const df = (new Intl.DurationFormat("en", {style: "narrow"})); df.format({hours: 18, minutes: 50}); // => "18h 50m" ``` It is not seeking advancement. # Stage 1 proposals A stage 1 proposal advances to stage 2 after draft spec text is ready and the committee approves it. ## Change Array by copy https://github.com/tc39/proposal-change-array-by-copy proposes adding Array and <em>Type</em>Array mutation methods that return a modified copy rather than performing changes in place, such as `withPushed` and `withSorted` and `withAt`. It is seeking advancement to Stage 2. ## Pipeline operator https://github.com/js-choi/proposal-hack-pipes/ proposes adding an operator for sending data from one expression to another in a linear rather than nested fashion, e.g. ```js const filtered = Object.entries(obj) |> %.filter(keepEntry) |> new Map(%) ``` It is seeking advancement to Stage 2. # Stage 0 proposals A stage 0 proposal advances to Stage 1 after the committee acknowledges a problem, identifies one or more "champions" to shepherd its solution, and takes ownership of the corresponding repository. ## BigInt `Math` functions https://github.com/js-choi/proposal-bigint-math proposes adding support for BigInt arguments to `Math` functions such as `Math.abs`, `Math.log2`, and `Math.bigMax`. It is seeking advancement to Stage 1. ## Get Intrinsic https://github.com/ljharb/proposal-get-intrinsic proposes adding a function for accessing a built-in value that may have been subsequently removed or overwritten, e.g. `const iteratorProto = getIntrinsic("%IteratorPrototype%")`. It is seeking advancement to Stage 1. ## Fixed shape objects https://github.com/syg/proposal-structs/ proposes adding `struct`s with static shape and memory layout for convenient communication of structured data, e.g. ```js struct class Point { x; y; constructor(x, y) { Object.assign(this, {x, y}); } } ``` It is seeking advancement to Stage 1. ## RegExp Feature Parity https://github.com/rbuckton/proposal-regexp-features proposes adding numerous new regular expression flags and embedded syntax to support functionality found in other languages. It is seeking advancement to Stage 1.