Skip to content

Annex B reform next steps #1595

Open
Open
@littledan

Description

@littledan

In the June 2019 TC39 meeting, @erights raised the topic of Annex B reform. We reached consensus on two high-level points, but there remain many details to work out, which I'd like to elaborate on in this thread:

  • Many Annex B things could be made normative
  • The remaining Annex B items would be placed inline, with markup indicating that they are normative optional

In some more detail:

Making some Annex B things normative

The lens proposed by @erights was that we make normative everything which is "perfectly safe from a non-locality, causality perspective".

Of particular concern are grammar issues, where having multiple divergent grammars (both for HTML comments and RegExp grammars) leads to security and implementer confusion issues. Mark also proposed that other parts of the specification which are simply ugly, but not harmful from an SES/ocap perspective, be considered normative.

We didn't discuss what this means in detail, in particular, which things will go into the main spec. Based on the notes and my reading of the specification, I'd say that includes

Is any of the above in error?

Making Annex B inline

The general strategy for inline Annex B would be to follow what we've done with Intl for legacy constructor semantics. These are also "normative optional", but listed interspersed with other specification text. The idea is that this phrasing makes the text more readable, while preserving its optionality outside of web browsers. This should help avoid situations where people have read part of the specification, not realizing that another part modified it, resulting in confusion and non-Annex-B-compatible implementations when the intention was to be web-compatible.

See an example in the WeakRefs proposal of adding some inline Annex B text (PR), and similar text in Intl (PR).

@bterlson raised concerns about the accessibility of the Intl specification's normative optional text. I'm not an expert in this area; if someone has an idea for better CSS, or HTML generated from ecmarkup, it'd be great to have your help.

Items which @erights's presentation proposed to leave as normative optional, which I'd suggest should be inline normative optional:

Future proposals which could be inline normative optional, per @erights's suggestions:

Next steps

  • Discuss the above plan in this thread, so we can iterate on it as needed (discussion is not blocking drafting PRs, but blocks landing them)
  • Make a label for PRs towards this effort
  • Write a PR for each of the bullet points above (fine if you decide to group or split these out differently)
    • Several people can collaborate here. Check off the checklist items above once it's done (I believe all delegates should be able to edit this comment).
  • Iterate on the styling/HTML of the normative optional section (if needed)
  • In my opinion, "deprecation" language is not necessary, but if we decide on that as part of making some of these "normative", then we'd add a checkbox for this too.
  • Bring the package of PRs to a TC39 meeting, asking for consensus

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions