«ES7» — неправильное название для планов по развитию JavaScript

Original author: Jay Phelps
  • Translation


Я не первый и не последний, кто вам об этом скажет, но стандарт ES2016 (или ES7) уже утвержден, и не включает в себя те функции, про которые говорят — «Будет в ES7».
Пора закончить упоминать ES7 в смысле “разные, предложенные сообществом функции, которые возможно когда-нибудь будут внесены в стандарт”.


Давайте определим некоторые термины в tl;dr стиле:

  • ES = ECMAScript = спецификации, которые JavaScript имплементирует.
  • TC39 = люди, которые пишут эти спецификации.


Как мы до такого докатились


Проблема понятна. Когда появились новости о том, что наконец-то выйдет обновление к JavaScript, все были шокированы. Но для понимания процесса принятия нового стандарта важно знать несколько вещей.

Первое обновление сменило несколько названий: ES.next, Harmony, ES6, и наконец Es2015. Такая частая смена понятна — ES2015 готовился к выпуску 4 года. В процессе подготовки масштабы стандарта менялись. В конечном счете приняли решение выпускать новый стандарт каждый год, вместо того чтобы постоянно дорабатывать еще не выпущенный.
И вместо названий ES6, ES7, ES8, и т.п. TC39 решили выпускать релизы с номером года: ES2015, ES2016, ES2017. Теоретически, это сильно снижает давление на TC39 – всегда есть стандарт следующего года, чтобы включить в него то, что не успели в этом. Кроме того, регулярный выпуск обновлений позволяет браузерам лучше поддерживать новые стандарты – всегда можно запланировать их выпуск, ход реализации и поддержку. И самое важное: каждый последующий стандарт не будет большим по объему (за исключением ES2015).

Мы знаем, как их называть, что теперь?


Логичный вопрос – как назвать те возможности, которые были предложены, но еще не попали в финальный текст стандарта? Лично я считаю, что лучше называть их «предложенные функции», ведь для широкого круга разработчиков всегда полезно понимать, на какой стадии принятия находятся те или иные возможности.

Стадии


Вместе с новой спецификацией цикла и названия основного релиза, пришел «stage» процесс для отдельных функций. Все изменения и нововведения теперь проходят стадии от нуля до четырех. Очень важно понимать, что статус функции stage-0 по сути означает «не отвергнуто прямо сейчас» (ака чучело), а stage-4 обозначает финальную версию функции или правки, полностью готовые для включения в спецификацию этого года. Еще важно понимать, что нововведение может быть полностью отвергнуто на любой стадии, даже на 4. Не важно, сколько людей и сообществ ссылаются на него и используют с помощью транспайлеров или полифилов — никто не может повлиять на этот процесс вне зависимости от положения и авторитета.
Так как у нас до сих пор есть некий переходный период, следует обозначать, что функции о которых вы говорите или пишите, — пока еще мечты и пожелания. Знать о какой конкретно стадии данной функции вы пишете, крайне необходимо тем, кто будет читать и использовать ваши Статьи. Допустим, вы описываете как работает функция X stage-0 и весь этот материал может быть не верен для функции X, когда она достигнет stage-4 или будет включена в стандарт.

Например, «stage-1» декораторы существенно изменились по сравнению со «stage-0» версией.

Вывод


Пожалуйста, хватит называть «ES7» все нереализованные JavaScript функции.
Voximplant
124.76
Облачная платформа голосовой и видеотелефонии
Share post

Comments 11

    +2
    Боюсь такое частое изменение языка приведет к тому что все браузеры будут поддерживать разный набор возможностей, и нужно будет постоянно оглядываться на то что умеет тот или иной браузер.
      +1
      Здесь в игру вступают compilers (babel, typescript, etc)
        +3
        Чтобы не оглядываться очень уж сильно — рекомендую вам postcss и babel. А чтобы оглядываться с удобством — http://caniuse.com
        –3
        странно это говорить о microsoft, но microsoft/typescript нас спасет от решения "авторитетных людей"
        • UFO just landed and posted this here
            +3
            В этом году(ES2016) мы получим только Array.prototype.includes и оператор возведения в произвольную степень
            А вот в ES2017 будет повкуснее релиз

            • async/await
            • Object.getOwnPropertyDescriptors
            • string padding
            • Object.entries() и Object.values()
            • Array.prototype.includes
            • SIMD функции
            • И самый цимес – разрешат оставлять запятую у последнего члена массива

            Может что-то еще добавят. Но впереди столько нового, чтобы проще и удобней писать софт на js.
              0
              Лично меня такое количество нововведений больше пугает, нежели радует — возникает ощущение, что передо мной уже какой-то совсем другой язык, которого я не знаю, и который нужно изучать заново, и это при том, что вменяемой литературы по новым плюшкам не видать даже на горизонте. То есть я понимаю и поддерживаю нововведения, но что б такой тугой струей — хотелось бы уже пожить в каком-никаком настоящем, а не постоянно догонять прекрасное будущее.
                +1
                это при том, что вменяемой литературы по новым плюшкам не видать даже на горизонте

                К счастью есть вот это. Очень доступным языком разобран весь ES2015 и многое из ES2016. Причём в мелочах. ИМХО, это лучший русскоязычный ресурс для frontend-разработчиков, на данный момент.
            0
            Array.prototype.includes
            и чем он лучше indexOf?

            И самый цимес – разрешат оставлять запятую у последнего члена массива
            сейчас тоже можно, если речь идет о [1,2,]
              +2
              Проще и точнее:

              ([NaN].indexOf(NaN) > -1) == false
              [NaN].includes(NaN) == true

              Ну и короче же минимум на 3 символа!!!

              Конечно можно, но это не стандарт (слово цимес показывало на скрытый тег sarcasm ;) )

                +1
                Вы не правы. Trailing commas в литерале массива стандартизованы ещё в ES5. Предлагается сделать то же самое для списка аргументов:

                function f(a, b, ){}
                
                f('a', 'b', );

            Only users with full accounts can post comments. Log in, please.