TC39 meeting, February 4-6th 2020


This was an unusual meeting. There were far more stage 1 seeking proposals, and a number of process proposals. As a result, there is not much work for us to do coming out of this meeting, beyond a few reviews.

From the new proposals, we may be particularily interested in what was in the meeting ArrayBuffer.fillRandom and is now CSRPNG in JS. This will introduce an api for pseudorandom numbers in JavaScript. There were a few quality of life improvements for developers (for stage 1 or 2) including Logical Assignment, time duration (how many hours until an event), and JSON.parse source text access (the latter did not advance due to a technicality).

SES (secure ECMAScript) was originally intended for advancement, but was turned into an update. We should find some time to review this, as it is unclear precisely what is being proposed. At a high level, it would ensure that a subset of JavaScript does not violate certain constraints that would potentially compromise it, making certain types of programs less secure. It seems to be a merge of the SES concept and frozen realms, but at the time of the meeting the spec was not available.

There were also process changes. We may reduce the number of meetings from 6 times a year, to 4 times a year. This would mean two USA meetings (east coast and west coast), one European meeting, and one meeting somewhere in Asia. This may start in 2021.

Need Review:

Needs implementation:

None.

Needs minor change:

Keep an eye on…

Normative Spec Changes


ToInteger normalizes -0 to +0

  • Notes
  • Proposal Link
  • Summary: change ToInteger(-0) to return +0 instead of -0, because in all but one case, the result of ToInteger(-0) is either explicitly or implicitly changed from -0 to +0 anyway.
  • Impact on SM: minor, anba has more info if we need to do more
  • Outcome: Consensus reached

Remove steps 2 and 4 from ProxyCreate

  • Notes
  • Proposal Link
  • Summary: Currently, ProxyCreate is sensitive to whether its arguments are revoked proxies. If either is, it throws a TypeError. This proposal alters the algorithm to remove that sensitivity. Its consequence is that a Proxy could be created successfully where target or handlers are revoked Proxy exotic objects. (It was already possible for such Proxies to exist — just not for them to be created while already in that state.)
  • Impact on SM: minor
  • Outcome: Consensus reached

Proposals Seeking Advancement to Stage 4


Unified Number Format for stage 4

  • Notes
  • Slides
  • Proposal Link
  • Summary: This proposal adds measurement units, compact decimal notation, and other localized number formatting features to Intl.NumberFormat.
  • Impact on SM: Landed in FF70
  • Outcome: Consensus reached for stage 4

Intl.Locale for Stage 4

  • Notes
  • Slides
  • Proposal Link
  • Summary: A class that HTML uses to expose the current locale to the Web.
  • Impact on SM: Done, waiting to land
  • Outcome: Consensus reached for stage 4

Proposals Seeking Advancement to Stage 3


None.

Proposals Seeking Advancement to Stage 2


Object iteration for Stage 2

  • Notes
  • Slides
  • Proposal Link
  • Summary: Introduce iterator methods on Object such as entries, keys, values
  • Impact on SM: None,
  • Outcome: Did not reach consensus, request to revisit other ways of addressing this issue, such as revivers.

Logical Assignment for Stage 2

  • Notes
  • Slides
  • Proposal Link
  • Summary: Introduce new unary operators a??= b a||=b a&&=b
  • Impact on SM: Requires review,
  • Outcome: Consensus reached for stage 2

JSON.parse source text access for Stage 2

  • Notes
  • Slides
  • Proposal Link
  • Summary: A proposal for extending JSON.parse behavior to grant reviver functions access to the input source text.
  • Impact on SM: Requires review.
  • Outcome: Missing spectext, did not advance. Worth reviewing.

Proposals Seeking Advancement to Stage 1


Async initialization for stage 1

  • Notes
  • Slides
  • Proposal Link
  • Summary: Class features are unable to properly integrate with some async workflows in JS. This proposal seeks to aid async initialization of class instances.
  • Outcome: Consensus reached for stage 1

BigDecimal for Stage 1

  • Notes
  • Slides
  • Proposal Link
  • Summary: An investigation into adding a built-in data type in JavaScript to represent base-10 decimal numbers.
  • Outcome: Consensus reached for stage 1

Preserve Host Virtualizability

  • Notes
  • Slides
  • Proposal Link
  • Summary: Prohibit hosts from adding new non-deletable extensions, or accidentally breaking virtualizability by other means.
  • Outcome: Consensus reached for stage 1

Legacy reflection features for functions in JavaScript for Stage 1

  • Notes
  • Slides
  • Proposal Link
  • Summary: Merge of two proposals. Advancement was unclear, but it seems that the merged repository will be published soon? Supported.
  • Outcome: Consensus reached for stage 1

ArrayBuffer.fillRandom for Stage 1

  • Notes
  • Slides
  • Proposal Link
  • Summary: User-addressable function that can be used to fill the portion of an ArrayBuffer associated with a TypedArray with cryptographically secure pseudo-random number values.
  • Outcome: Advancement to stage 1 assuming changes: proposal is renamed to clarify that it is just exploring the space of making crypto random numbers available to users

ArrayBuffer view stride argument for Stage 1

  • Notes
  • Slides
  • Proposal Link
  • Summary: ArrayBuffer views (like Uint8Array, Float32Array, etc) provide views onto ArrayBuffers. These views allow the same chunk of memory to be interpreted as different kinds of data and allow developers to manipulate binary data in-place.
  • Outcome: Consensus reached for stage 1

Time Duration Format Proposal for Stage 1

  • Notes
  • Slides
  • Proposal Link
  • Summary: Users need all types of duration format depending on the requirements of their application. For example, in the airlines websites, to show how long a flight takes, the duration should be in Short or Narrow format .
  • Outcome: Consensus reached for stage 1

Syntax for Explicitly this argument for Stage 1

  • Notes
  • Slides
  • Proposal Link
  • Summary: Allow users to explicitly name the this object in the arguments.
  • Outcome: did not reach stage 1

function thisArgumentExpected property

  • Notes
  • Slides
  • Proposal Link
  • Summary: Allow users to mark functions as requireing a this object.
  • Outcome: Conditional: The problem statement is seen as legitimate, but the solution is problematic. Consensus was not reached for stage 1. Recommendation to modify the proposal to focus more on the problem

Reports


Editor’s Report (ECMA262)

Test262 Report

ECMA-402 Update

Updates on Ongoing work


Update on Realms

  • Notes
  • Slides
  • Proposal Link
  • Summary: Short form: you can think of a Realm as roughly corresponding to a gloabl; this proposal focuses on making sure that virtualizability is possible. The changes from the last time this was presented are: Realms are about Intrinsics, Primordials, Contour, Global object and the this value. No more hooks or stdlib. Considerably simpler, smaller, and represent an incremental step.

Intl.Segmenter Stage 2 update

  • Notes
  • Slides
  • Proposal Link
  • Summary: introduce an api for sentence segmentation. The updates here are that the spec changed significantly requiring review, we blocked due to the size issue, and we are investigating the risk of this forcing us to use ICU in layout.

Status update on Array Filtering

  • Notes
  • Slides
  • Proposal Link
  • Summary: Add an api to array.prototyle called filterOut, does the same as filter but with a false value. Status update was about a review of how many people use filterOut in libraries, and how many people use filterOut in ruby. The argument behind this proposal is that it is hard to remember how filter works. The counterargument here is that every language has the same definition of filter.

Update on WeakRefs

  • Notes
  • Slides
  • Proposal Link
  • Summary: Status update on weakrefs. Retained consensus for independent lifetimes, Contingent consensus on FinalizationRegistry, meaning barring feedback from folks on the exact name of FinalizationRegistry, implementations reserve the right to ship WeakRefs with the FinalizationRegistry name before the next meeting. Please give feedback on #180.

SES Compartments

Module attributes status update

Strings or symbols for Temporal.Calendar protocol

Process Changes


Process changes to accommodate US members and US delegates

  • Notes
  • Slides
  • Summary: Due to current US legislation, we need to make sure all of our proceedings are public. This means making the IRC channel public.
  • Outcome: Change adopted
  • “TC39 issues a public communication on its existing property of being open” is approved
  • Enumeration of all official channels of communication
    • #tc39 and any IRC channel that is prefixed with “#tc39-“ is now official
    • Everything on github under tc39/ org
    • Discourse is official
  • Logs of public IRC channels will be made public
  • #tc39-delegates channel will be made voiced (+v) and moderated (+m)
  • Discourse Delegates category will be made public, moderated and voiced
  • No consensus on live-streaming meeting
  • Chairs will document TC39’s implementation of Ecma’s invited expert policy, as it’s put in practice in TC39.
  • We will work on a proposal for limited participation technical groups for discussion of technical topics that cannot be disclosed publicly in a reasonable timeframe.

Elections at TC39: Introducing a process

  • Notes
  • Slides
  • Summary: Introduce an election process to TC39
  • Outcome: Change adopted with amendment

Remote plenaries and SLTG/incubator calls

  • Notes
  • Slides
  • Proposal Link
  • Summary: Starting in 2021, have 4 in person meetings with a series of remote plenaries throughout the year.
  • Outcome: For incubation calls, SYG will formally ask for participants and ask for a “charter” at the end of the next plenary meeting. Some folks from IRC expressed interest in starting the incubation calls before the next plenary, so SYG will make a Reflector thread after the meeting and ping some particular delegates to do a trial run before the next plenary.

MBS to follow up with a concrete proposal about remote plenaries from the chair group at the next TC39 meeting; DE to follow up with him