Не так давно мне попалась на глаза статья на Хабре про Приватные поля. Автор рассказывал про возможность, которой ещё нет в стандарте, о том, какие проблемы она приносит и как он предлагал варианты решения этих проблем. Мне стало интересно, как новые функции попадают в стандарт, как можно предложить что-нибудь своё и куда идти, если тебе что-то не нравится.

Прежде, чем ответить на вопрос «кто развивает JavaScript?», давайте познакомимся с одной ассоциацией — Ecma International. Ассоциация занимается созданием стандартов для информационных технологий в сотрудничестве с разными организациями.

Ecma International

Ассоциация поделена на Генеральную Ассамблею, секретариат, координационный комитет и набор технических комитетов. Главой организации является Генеральная Ассамблея, которая принимает все решения. Ассамблея, как и технические комитеты, состоит из тех, кто купил членство в ассоциации. Чтобы иметь право голоса в Генеральной Ассамблее, организации нужно сделать полный годовой членский взнос в размере 4,5 миллиона рублей. Техническая работа проводится техническими комитетами. Каждый технический комитет занимается определенной областью или темой. В состав Ecma входит 14 комитетов, но нас будет интересовать только один из них — TC39.

TC39 — технический комитет по управлению версиями JavaScript и поддержанию ECMAScript. Он содержит самое большое число участников и считается самым популярным. В состав комитета входят представители всех крупных поставщиков браузеров, таких как Apple, Google, Microsoft и Mozilla, а также приглашенные эксперты и делегаты из других компаний, заинтересованных в развитии Интернета. Они проводят встречи раз в 2 месяца, чтобы определить, как будет развиваться язык. Кстати, встречи проходят в формате онлайн, так что можно присоединиться и посмотреть, что интересное там обсуждают. TC39 развивает стандарт ECMA-262 или ECMAScript, в котором прописана спецификация скриптового языка общего назначения.

Вы наверняка могли задаваться вопросом «а зачем нужна спецификация?». Дело в том, что в различных браузерах используются различные движки JavaScript: SpiderMonkey в Firefox, Nitro в Safari, V8 в Chrome, Opera и IE. Когда вы пишете на JavaScript, то ожидаете, что все движки во всех окружениях будут разбирать и выполнять код абсолютно одинаково. Без стандартизованной спецификации любой из этих движков был бы волен исполнять JavaScript как ему вздумается.

TC39 представляет новую версию спецификации ECMAScript Генеральной Ассамблее в июле каждого года. Так выглядит примерный график производства новой спецификации:

  • Февраль: предоставляются черновики спецификаций
  • Март: в спецификации влиты все предложения, которые готовы к релизу
  • Апрель-Июнь: ревью спецификаций Исполнительным Комитетом и Генеральной Ассамблеей
  • Июль: выпуск новой версии ECMA

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

Шаг 1: Убедиться, что идея новая. Проверить, что есть на данный момент в списке предложений, почитать архив обсуждений в электронной переписке на сайте ES Discuss, а также просмотреть записи со встреч.

Шаг 2: Описать идею в свободной форме и сделать набросок решения.

Шаг 3: Представить предложение комитету. Это можно сделать на сайте ES Discuss в дискуссионной группе, либо в канале IRC.

Но прежде чем предложение попадет в стандарт, оно проходит несколько стадий, переход на каждую из которых утверждается комитетом.

Стадия 0: Идея

Итак, мы в свободной форме описали идею и представили комитету. В этот момент предложение попадает на стадию 0. Комитет рассмотрит идею на собрании, а затем утвердит или отклонит.

Стадия 1: Предложение

Утверждённое предложение попадает на стадию 1. На этой стадии в комитете выбирается один или несколько так называемых “чемпионов”, которые будут представлять предложение на собраниях. Также описывается решаемая проблема и примеры решения с помощью предложения, описывается высокоуровневое API и возможные трудности при реализации предложения. Как только всё это будет готово, предложение попадает на следующий этап.

Стадия 2: Черновик

Предложение описывается на языке спецификации: добавляется формальное описание синтаксиса и семантики новой возможности языка. Описание должно быть точным, насколько это возможно, но может содержать TODO и заголовки разделов, которые будут заполнены позже. Также должны быть предоставлены две экспериментальные реализации предложения. Затем комитет выбирает рецензентов текста спецификации. После этого этапа ожидается постепенная эволюция черновика.

Стадия 3: Кандидат

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

Стадия 4: Финал

Финальная стадия. Написаны и смёржены приёмочные тесты, которые являются частью набора Test262. Строго говоря, это юнит-тесты для новой возможности языка, которые написаны на JavaScript. Также подготовлено две совместимых со спецификацией реализации, которые проходят тесты. Далее отправляется Pull Request для включения спецификации в стандарт и редакторы его одобряют. Готовые предложения утверждаются и включаются в стандарт на летнем собрании Генеральной Ассамблеи.

Релиз новой спецификации проходит раз в год и в него включаются предложения, которые готовы к дедлайну.

Теперь мы знаем, как стать частью этого процесса и менять мир JavaScript под себя. Во второй части статьи расскажем историю стандартов JS.

Софья Михайлова, Software Engineer

RSS