Я не первый и не последний, кто вам об этом скажет, но стандарт 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 функции.

Комментарии (11)


  1. qqname
    21.03.2016 14:55
    +2

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


    1. fustic
      21.03.2016 15:19
      +1

      Здесь в игру вступают compilers (babel, typescript, etc)


    1. irbisadm
      21.03.2016 16:23
      +3

      Чтобы не оглядываться очень уж сильно — рекомендую вам postcss и babel. А чтобы оглядываться с удобством — http://caniuse.com


  1. serf
    21.03.2016 17:02
    -3

    странно это говорить о microsoft, но microsoft/typescript нас спасет от решения "авторитетных людей"


  1. MaxKorz
    21.03.2016 20:25

    Может кто-нибудь объяснить, что можно ежегодно добавлять в спецификацию языка?
    В ES2015 ввели много полезного относительно ОПП, новые методы для Array, Number, String, прописы, и другие вещи.
    Но, как сказано, ES2015 разрабатывался много лет. То есть такой же объем нововведений можно не ждать.
    То есть что ждать, от следующих стандартов? Будут просто переводить различные методы из jQuery/momentJS/underscore/популярная_библиотека в нативный код?


    1. irbisadm
      21.03.2016 20:57
      +3

      В этом году(ES2016) мы получим только Array.prototype.includes и оператор возведения в произвольную степень
      А вот в ES2017 будет повкуснее релиз

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

      Может что-то еще добавят. Но впереди столько нового, чтобы проще и удобней писать софт на js.


      1. AstarothAst
        22.03.2016 11:54

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


        1. faiwer
          22.03.2016 12:12
          +1

          это при том, что вменяемой литературы по новым плюшкам не видать даже на горизонте

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


  1. CoolCmd
    22.03.2016 09:36

    Array.prototype.includes
    и чем он лучше indexOf?

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


    1. irbisadm
      22.03.2016 09:40
      +2

      Проще и точнее:

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

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

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


      1. rock
        22.03.2016 15:26
        +1

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

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