Not much significant change that we need to be worried about but lot of new proposals moved to stage 1. We have some reviewing work to do, as there is so much new stuff.
Need Review:
Stage 3, needs implementation by SM:
Need minor change:
maybe worth getting familiar with, but not vetted yet by the committee:
- Readonly Collections for stage 1
- Eventual-Send: Support for distributed promise pipelining
- Records & Tuples for Stage 1
- OOM Fails Fast for Stage 1
Normative Spec Changes
Remove ToUint32 from array literal evaluation
Summary: Spec bug, calcuation of array literals, including spreads, had their indices and lengths
calcuated to a ToUint 32 operation. This was found the be incorrect, in the case of 2**32-1
SM impact: None. This is unlikely observable in implementations. Probably no action needed
Conclusion: Consensus to merge
Prevent DFS invariants from being broken
Summary: An implementation of HostImportModuleDynamically, could, in theory, call Evaluate() in the same tick as the call to HostImportModuleDynamically. If that call to HostImportModuleDynamically was the direct result of another call to Evaluate(), this may eagerly evaluate a module that is already queued to be run at a later time.
SM impact: None. This is not observable in implementations, due to HTML doing this in the same tick already. Probably no action needed.
Conclusion: Consensus to merge
Redefine CatchParameter as FormalParameter
Summary: Removes default value restriction for catch parameter. Was found in committee to have several unresolved issues, and was recommended to be moved to a proposal.
SM impact: None.
Conclusion: No consensus for the PR. May be moved to a proposal.
Strengthening Atomics.wait and Atomics.notify (PR)
Summary: strengthens the synchronization between a waking thread and its wakees as though they were each a coinciding atomic write/read (respectively) to the same memory location.
SM impact: Needs a sanity check: I believe this was a spec bug, and is not observable in implementations.
Conclusion: Consensus to merge
Reduce the amount of implementation-defined behavior in Array.prototype.sort
Summary: The issue is well detailed, and recommended reading. The intent is to make sort more consistent across implementation. However, it was raised by waldemar that the issue is self contradictory and needs further work.
SM impact: We would need to update our sorting algorithm.
Consensus: Consensus on the intent, waiting on verification of correctness.
Revisit ECMA-402 casing conventions
Summary: Makes the recommendation that all Intl display names use camelCase everywhere.
SM impact: minor?
Conclusion: consensus to merge
Proposals Seeking Advancement to Stage 4
globalThis to stage 4
Summary: globalThis has been implemented in at least 2 vendors.
SM impact: None. SM status: implemented.
RegExp Match Indices
Summary: Match Indices provide additional information about the start and end indices of captured substrings relative to the start of the input string.
SM status: Not implemented
Conclusion: JSC will implement, then they will seek stage 4 in December
Proposals Seeking Advancement to Stage 3
for-in order for stage 3
Summary: Reflect.ownKeys is ordered, but for (a in b) {...}
is not. However, engines tend to be
consistent.
SM impact: Minor - We probably just need to run the tests. We might need to double check that our implementation conforms. Only known engine to not implement this behavior is JSC. SM status: Implemented, may beed to be double checked against the tests.
Conclusion: Stage 3
String.prototype.replaceAll for Stage 3
Summary: Updates both String.prototype.matchAll
and String.prototype.replaceAll
to throw for
non-global RegExp.
SM impact: we will need to update our implementation of matchAll, and eventually implement replaceAll. SM status: matchall is implemented, replaceAll is not
Conclusion: Stage 3.
Promise.prototype.any for Stage 3
Summary: Introduce Promise.any
which will resolve if any promise passed to it resolves. Current
discussion revolves around resolving how errors will be reported. There was also some discussion
about subclassing, which related back to the errors discussion. The issue raised was decided to be a
stage three entry concern, property vs accessor
.
SM status: Not implemented
- Slides missing.
- proposal
Conclusion: Consensus for Stage 3, pending reviews and spec text.
Intl.DisplayNames
Summary: Expose display name data through the Intl API. This would reduce download requirements for internationalization.
SM status: Not implemented
Conclusion: Stage 3.
Proposals Seeking Advancement to Stage 2
Map.upsert , previously Map.insertOrUpdate
Summary: Adding and updating values of a Map are tasks that developers often perform in conjunction.
The proposal adds a method that will add a value to a map if the map does not already have something
for that key, or else it will update the existing value on the key. Example: map.upsert(key, o =>
o, () => value).doThing();
. There were potential performance concerns brought up, but it was seen
as highly ergonomic, and standing on its own.
SM impact: we should carefully review this proposal.
- No Slides
- proposal
Conclusion: Consensus for stage 2.
Proposals Seeking Advancement to Stage 1
Object.map
for Stage 1
Summary: A new method on objects is introduced to allow easy iteration over object entries, then map
and reduce them.
Example: Object.entries(obj).map([k, v] => { ... })
would become Object.map(obj,
([k, v], obj) => { ... });
SM impact: None, it seems unlikely that in its current form it will move forward.
Conclusion: The Proposal itself did not reach stage 1, but the problem of making object mapping more concise was determined to be a real issue, and the problem should be explored further in stage 1.
Records & Tuples for Stage 1
Summary: Introduce immutable data structures to JS, through the following syntax: const test = #{
key: value };
and let x = #[1, 1]
. Testing loose equality would also be by property value rather
than identify of the object, for example: assert(#{ a: 1 } == #{ a: 1 });assert(#[1] ==
#[1]);assert(Object.is(#{ a: 1 }, #{ a: 1 }));assert(Object.is(#[1], #[1]));
SM impact: We might want to keep an eye on this one, though no direct action is needed now.
Conclusion: Consensus for stage 1.
Declarations in conditionals
Summary: proposal for allowing variable declarations inside conditional statements (e.g. if/while), similar to C++
SM impact: None yet, lets watch it.
Conclusion: Consensus for stage 1.
UUID for stage 1
Summary: Introduce native UUID generation to JS.
SM impact: wait and see.
Conclusion: Consensus for stage 1.
Readonly Collections for stage 1
Summary: This proposal seeks to address the mutability of JS. There are usecases where it would be beneficial to have immutibility, and this presents a mechanism for that.
SM impact: wait and see. It is a complex proposal, might benefit from an early read.
Conclusion: Consensus for stage 1.
Eventual-Send: Support for distributed promise pipelining
Summary: This proposal adds eventual-send operations to JavaScript Promises, to express invocation of operations on potentially remote objects.
SM impact: wait and see, might benefit from early read.
Conclusion: Consensus for stage 1.
Wavy Dot syntax for promise pipelining for stage 1
Summary: Syntactic sugar for Eventual-send
SM impact: wait and see.
Conclusion: Consensus for stage 1.
OOM Fails Fast for Stage 1
Summary: Specify OOM behavior.
SM impact: We should review this proposal.
Proposal Updates
Update on Optional Chaining and Nullish Coalescing
Summary: No change, but plan to submit for stage 4 in December. There was a refresh on the discussion regarding adding parenthesis and order of operation to the new operand. This is still being discussed.
SM impact: None, we were aware of these changes. SM Status: We have a work in progress implementation
Top-Level await: almost resolved
Summary: No Normative changes are expected. There was some discussion about service workers banning top level await so that it did not block the initial render of the page.
SM Impact: none, however it is getting close to stage 4. SM Status: We have not implemented this yet.
- No Slides available
Grammer Validity
Summary: Mark Miller presented a proposal to take as much out of Annex b and put it into the spec as much as possible. Waldemar Horwat was not present for that presentation, and raised the issue of HTML comments and their impact on grammer validity. Annex B fails valiation.
SM impact: no change.
Conclusion: Agreement between Mark and Waldemar. Mark’s original intent was misunderstood
Update on sequence property escapes in Unicode regular expressions
Summary: introduce a new regex for sequence property escapes, which might be either \p
or \q
.
Conclusion: None, revisit next meeting. Discussion will continue in the proposal repository, and Issue will be started regarding developer outreach
Proposal disclosure policy
Summary: Request to disclose partnerships on proposals between TC39 members. It seems that this was primarily in order to know who in TC39 is working on what, but it will affect agencies that are part of TC39. An example would be WeakRefs, where officially it was Till and Mark working on it, but Sathya began working on it as well.
SM impact: none.
Conclusion: requires further discussion
An update on Temporal
Summary: There are several decisions that have been made on aspects of the API. Proposal is currently at stage 2. Will be brought back to finalize in February 2020 for stage 3
SM impact: We should review the proposal to ensure that we have no concerns.
Unifying private field errors
Summary: Update on Private Fields proposal.Hash names will be hoisted so they don’t have TDZ, and no reference errors.
SM impact: none yet, we do not have this proposal implemented