Процесс TC39 для внесения новых возможностей языка в спецификацию ECMAScript

Этот пост описывает детали нового процесса подготовки релизов, которым будут руководствоваться при внесении новых возможностей в язык, начиная с ECMAScript 2016 (ES7).

Материалы по теме:

Кто разрабатывает ECMAScript?

Ответ: TC39 (Технический Комитет 39).

TC39 — это комитет, который занимается развитием JavaScript. Его членами являются компании (помимо прочих, все основные производители браузеров). TC39 регулярно собирается, на встречах присутствуют участники, представляющие интересы компаний, и приглашенные эксперты. Протоколы встреч доступны онлайн и дают представление о том, как работает TC39.

Термин член TC39 относится к человеку. Это значит: делегат компании, которая является членом TC39.

Надо отметить, что TC39 управляется консенсусом: решения принимаются большинством голосов и если никто не возражает настолько, что бы наложить вето. Для многих членов согласие означает вполне реальные обязательства (они должны будут внедрить новые возможности языка и т.д.).

Как разрабатывается ECMAScript?

Проблема: релиз ECMAScript 2015 (ES6) был слишком большим

Последний релиз ECMAScript — ES6, он большой, и создавался на протяжении практически 6 лет после выхода ES5 (с декабря 2009 по июнь 2015). Две основные проблемы с такими длинными перерывами между релизами:

Вот почему начиная со спецификации ECMAScript 2016 (ES7) релизы будут выпускаться чаще и, как следствие, будут меньше. Релиз будет происходить раз в год и он будет включать всё, что будет готово к дедлайну.

Решение: процесс TC39

Каждое предложение по добавлению новой возможности в ECMAScript в процессе созревания проходит описанные ниже этапы, начиная с нулевого. Переход от одного этапа к другому должен быть утвержден TC39.

0 этап: идея

Что это? Отправка идей по развитию ECMAScript, сформулированных в свободной форме. Отправлять идеи могут либо члены TC39, либо люди, зарегистрированные как контрибьюторы TC39.

Что требуется? Документ должен быть рассмотрен на встрече TC39 (источник), после чего он вносится на страницу с предложениями, находящимися на нулевом этапе.

1 этап: предложение

Что это? Формальное предложение новой возможности языка.

Что требуется? Должен быть выбран так называемый герой, который будет ответственен за предложение. Либо герой, либо помощник героя должен быть членом TC39 (источник). В предложении должна быть описана проблема, которую решает новая возможность языка. Решение этой проблемы должно быть описано с помощью примеров, API и обсуждения семантики и алгоритмов. И, наконец, должны быть описаны возможные препятствия для внесения новой возможности языка в спецификацию, такие, как, например, её взаимодействие с другими элементами и проблемы реализации. Нужны реализации, полифилы и примеры.

Что дальше? Принимая предложение, которое находится на 1 этапе, TC39 показывает свое желание проверить, обсудить и внести свой вклад в документ. Далее предложение ждут значительные изменения.

2 этап: черновик

Что это? Первая версия того, что будет в спецификации. На этом этапе появляется вероятность скорого включения новой возможности в стандарт.

Что требуется? В предложение должно быть добавлено формальное описание синтаксиса и семантики новой возможности языка (используя формальный язык спецификации ECMAScript). Описание должно быть настолько точным, насколько это возможно, но может содержать TODO и заготовки разделов, которые будут заполнены в будущем. Нужно две экспериментальных реализации новой возможности, но одна из них может быть в транспайлере, например в Babel.

Что дальше? C этого момента ожидается только постепенная эволюция черновика.

3 этап: кандидат

Что это? Документ почти закончен, и теперь для того, что бы двигаться дальше, нужны отзывы от разработчиков реализаций и пользователей.

Что требуется? Нужно дописать текст спецификации. Назначаются рецензенты (они назначаются TC39, но не героем), и редактор спецификации ECMAScript должен подписать текст спецификации. Должно быть как минимум два совместимых со спецификацией реализации (которые могут быть выключены по умолчанию).

Что дальше? Дальше изменения происходят только в связи с критическими проблемами, обнаруженными в процессе реализации и использования новой возможности языка.

4 этап: финал

Что это? Предложение готово для внесения в стандарт.

Что требуется? Прежде чем предложение достигнет этого этапа, требуется:

Что дальше? Предложение будет включено в спецификацию ECMAScript, как только это будет возможно. Когда спецификация пройдет ежегодную ратификацию в качестве стандарта, предложение будет ратифицировано как её часть.

Не называйте новые возможностью частью ECMAScript

Как видите, только когда предложение достигнет 4 этапа, можно быть уверенным, что оно будет включено в стандарт. Тогда возможно его включение в следующий релиз ECMAScript, но на 100% уверенным в этом быть всё же нельзя (это может занять больше времени, чем предполагалось изначально). Так что нельзя больше называть предложения «возможностью ES7» или «новой возможностью ES2016», и теперь мои любимые заголовки для статей и постов выглядят так:

Если предложение переходит к 4 этапу, я согласен называть это новой возможностью ES20xx, но безопаснее подождать пока редактор спецификации подтвердит то, в какой релиз это предложение будет включено. Object.observe — пример предложения для ECMAScript, которое перешло ко 2 этапу, но было в конечном счете отозвано.

Материалы для дальнейшего изучения

Следующие материалы были важными источниками информации при написании этого поста:

Кроме того, можно прочитать: