image

Генеральное собрание Ecma International объявило о ратификации стандарта ECMA-262 6 версии, который является спецификацией языка ECMAScript 6 (ES6), который так же называют ECMAScript 2015.

JavaScript был создан Брэндоном Эйком в 1995 всего за 10 дней, но языку потребовалось аж 20 лет для того, чтобы перенять возможности языков программирования, которые популярны на сегодняшний день. JavaScript не был самым лучшим языком программирования, но концепт языка для браузера был многообещающей идеей. На JavaScript начали обращать внимание почти сразу после его создания и отправили на стандартизацию в 1996. Релизы языка:

  • JavaScript 1.0 (1997)
  • JavaScript 2.0 (1998) – с некоторыми изменениями к предыдущей версии
  • JavaScript 3.0 (1999) – с некоторыми новыми возможностями

Потом в течении нескольких лет на JavaScript никто не обращал внимания, до того как появился AJAX – довольно неплохое решение для браузерных приложений. Так как собрание Ecma, сообщество и браузеры долго не могли договориться о будущем пути развития языка, работа над ним продолжилась только в 2008 году; когда комиссия TC39, контролирующее развитие JavaScript пришло к единому мнению и решило для начала сделать небольшой шаг вперед: так, в 2009 году появился ECMAScript 5 (ES5), а позднее и более крупный релиз – ES6, спецификация которого была сегодня одобрена! Смотреть страничку стандарта.

Официальное название последней версии JavaScript – ECMAScript 2015, и собрание Ecma планирует чаще выпускать новые версии. Релиз следующей версии ECMAScript 2016 запланирован уже на следующий год. С этого момента, название версий будет включать в себя год, в который был сделан релиз.

ES6 – огромный шаг вперед после ES5, спецификация новой версии языка состоит из 600 страниц, ее предшественница – всего из 245. В ES6 добавили очень нужные JavaScript-разработчикам штуки, такие как модули и классы; а так же много полезностей, таких как: Maps, Sets, Promises и Generators. Несмотря на то, что это очень крупный релиз, ES6 обладает полной обратной совместимостью. Комиссия решила не ломать интернет из-за несовместимых версий, поэтому весь старый код будет работать, а переход на новый будет довольно гладким. Это означает, что некоторые проблемы ES5, на которые разработчики жаловались годами так же никуда не денутся.

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

Уже была начата работа над ECMAScript 2016 и уже были предложены асинхронные функции, типизированные объекты, параллельность, декораторы классов и наблюдатели. Не смотря на то, что возможность введения этих фич активно обсуждается комиссией, мы не можем точно предсказать их будущее. Некоторые фичи могут ввести в следующую спецификацию, некоторые в последующие, а некоторые могут не ввести никогда. Этот документ показывает фазы введения фич в язык.

Развитие JavaScript было очень медленным в начале, но за последнее время невероятно ускорилось. JavaScript никуда не денется, и надеемся, что стандартизационные комиссии и собрания будут вести язык туда, где его хочет видеть сообщество.

В качестве дополнения, советуем почитать Exploring ES6: Book Introduction and Author Interview (по ссылке – статья, с описанием книги), в деталях описывающая все новые возможности JavaScript.

Это быстрый перевод этой статьи, которая уже полдня висит в топе /r/javascript, я только пришел с работы и подумал что нужно сделать перевод для с Хабрасообщества. Это мой первый и еще раз повторю, быстрый перевод, поэтому о любых ошибках пишите личными сообщениями – будем вместе исправлять.

UPD. Кратко о релизе нам уже рассказал monolithedhttp://habrahabr.ru/post/260561/

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


  1. Master_Dante
    18.06.2015 07:41
    +6

    Я так думаю, что полноценно использовать ECMAScript 2015 можно будет тогда, когда все не поддерживающие браузеры выйдут из обращения. Предположим что в 2016 году выйдут браузеры полностью поддерживающие ECMAScript 2015. Тогда года через 2-3, можно будет использовать, т.е. речь идет где то о 2018-2019 годах.


    1. k12th
      18.06.2015 08:43
      +8

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

      Если ориентироваться на сугубо нативную поддержку, то и на ES5 еще рановато писать, а на Coffee/Type/ClojureScript вообще никогда:)


      1. bogus92
        18.06.2015 11:58
        +1

        На сервере можно переходить точно так же на Babel и даже не думать о том, что уже поддерживается, а что еще нет.


        1. k12th
          18.06.2015 12:00
          +1

          Можно. Но в nodejs все-таки быстрее прогресс, чем в браузерах.


    1. gibson_dev
      18.06.2015 08:44

      Да сейчас вроде да MicroSoft начали обновлять браузер практически во время так что думаю что раньше


      1. k12th
        18.06.2015 09:34
        +1

        Ну я еще год назад поддерживал IE8. Зависит твердолобости и ретроградности составителей ТЗ, на самом деле.


        1. xenohunter
          18.06.2015 14:35
          +1

          У нас сейчас IE7 поддерживается, и ещё долго будет поддерживаться. Хотя, казалось бы, не банковская сфера, обычные клиентские сайты.


          1. k12th
            18.06.2015 14:51

            И IE7 тоже было. Правда, не в вебе, а в десктопном интерфейсе (сделанном на IE-шном WebView). С одной стороны, там был 7 и только 7, что отчасти облегчало задачу, а с другой — дебажить это было невозможно вообще никак.


        1. Zenitchik
          18.06.2015 16:35

          Ворованная винда с IE8 ещё долго будет встречаться. Богам слава, что те, кто её ставят, в большинстве своём всё-таки знают слово «браузер» и принимают меры…


    1. auine
      18.06.2015 09:56

      Я писал в своей публикации и вообще сейчас все сообщество идет к транспилерам. Никто не будет ждать пока все утвердится. Уже сейчас можно спокойно писать используя babel. И мир дева в js идет к фича-бай-фича, а не к версированию языка.


      1. some_x
        18.06.2015 10:16
        -1

        Зачем тогда браузерам вообще делать поддержку es2015, если всё равно большинство в браузеры будет присылать код es5 скомпилированный из es2015?

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


        1. Infernal
          18.06.2015 10:42

          1. auine
            18.06.2015 11:08
            -4

            Это для некоторых юз кейсов, но не решает ту проблему о которой мы сейчас говорим


            1. auine
              18.06.2015 11:20
              -3

              Да давайте знатоки, еще минусов)))
              webassebly не дает вам возможности банально работать с DOM. Эта фича для того же фронт-дева особо не нужна.


              1. Infernal
                18.06.2015 14:26
                +1

                В goals у проекта есть в том числе «access browser functionality through the same Web APIs that are accessible to JavaScript».



        1. auine
          18.06.2015 11:11
          +1

          Разумеется надо поддерживать нативно, для производительности и прочих нюансов. Но так как это происходит медленно, а использовать хочется уже сейчас, у вас есть выбор. Взять и юзать тот же бабел и уже наслаждаться es6, или сидеть и ныть, о том что стоит еще чучуть подождать. Уже как года пол все пишут спокойно на es6 как на фронте так и на серваках, а вы все думаете стоит ли.


          1. Master_Dante
            18.06.2015 14:58

            С открытием сорцев C# и платформы есть шанс, что он станет поддерживаемым в браузерах, со всеми вытекающими…


          1. Master_Dante
            19.06.2015 23:11

            Кстати говоря а вот и первые ласточки www.3dnews.ru/software-news/915889


  1. faiwer
    18.06.2015 09:51
    +3

    Вопрос к тем, кто использует Babel и др. подобные трансляторы.
    — Насколько сильно усложняется отладка такого кода?
    — Насколько сильна просадка в производительности в наиболее сложных местах (на вроде тех же генераторов)
    — Кто-нибудь использует в production-е async\await? Стабильно работает?


    1. auine
      18.06.2015 09:58
      +1

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


    1. k12th
      18.06.2015 10:11

      1) Соурсмапы здорово помогают, да и получившийся код не такой уж страшный.
      2) На глаз незаметно, но на 2000 элементов я не тестировал:)


    1. TedBeer
      18.06.2015 10:11

      Вчера на презентации ES6 выступал разработчик из DHL. Они используют ES6 в продакшн вместе с AngularJS. Показывал и отладку и код. Правда основные фичи, которые они используют — это классы, константы, локальные переменные и толстые стрелки (classes, const, let, => aka arrow functions) Генераторы и другие более продвинутые фичи пока не используют.
      Код генерируемый транслятором Babel вполне читаемый и подходит для отладки. Для написания юнит тестов они тоже используют ES6. Правда охват кода тестами никогда не достигнет 100% из-за дополнительного кода генерируемого Babel


      1. hell0w0rd
        18.06.2015 11:48
        +1

        Правда охват кода тестами никогда не достигнет 100% из-за дополнительного кода генерируемого Babel

        Ну это не совсем правда. Есть опция auxiliaryComment


      1. andy128k
        18.06.2015 17:23

        Правда охват кода тестами никогда не достигнет 100% из-за дополнительного кода генерируемого Babel

        Я использую для анализа покрытия isparta, она игнорирует дополнительный код.


    1. quozd
      18.06.2015 10:32

      Используем с недавних пор в продакшене Babel + изоморфный React последний.

      1. Отладка через сорсмапы делается без проблем. В браузере читаешь es6. Каких-то проблем не встречал пока.
      2. Генераторы пока не используем, просадки в производительности визуально не заметили, поэтому цифры не меряли. Билд правда дольше стал в два раза :)
      3. Стремно


    1. hell0w0rd
      18.06.2015 11:52
      +1

      Использую babel уже около полугода и просто счатслив. Сначала с angular + node.js, сейчас react и async/await на сервере. async/await использую с помощью bluebird.couroutine , посмотрите в тесты, этот вариант самый быстрый, после коллбэков.


      1. faiwer
        18.06.2015 11:56

        Спасибо за bluebird.couroutine, посмотрю. Сразу же вопрос: не возникает проблемы с отловом ошибок (в особенности непредусмотренных) при таком подходе?


        1. hell0w0rd
          18.06.2015 13:44
          +1

          нет, в стэк-трейсах все довольно понятно, раньше с этим были проблемы, сейчас вроде нет.

          // ваш код
          async function foo() {
            await bar();
          }
          
          // сгенерированный babel
          var foo = bluebird.couroutine(function *foo() {
            yield bar();
          });
          

          async/await можно дебажить без сорсмэпов спокойно, на мой взгляд. Ранее неудобства доставлял только regenerator, поэтому async/await на клиенте не использую.


        1. rock
          18.06.2015 13:45
          +1

          Никаких проблем. Пример. С bluebird.couroutine аналогично.


    1. asm0dey
      21.06.2015 00:45

      При разумном использовании генераторов скорость работы даже выше может быть :)
      gist.github.com/asm0dey/0290fb111e2317f0238c

      Прелесть в ленивости.


  1. TedBeer
    18.06.2015 10:05
    +5

    Вчера присутствовал на презентации ES6 с докладчиком Dr. Axel Rauschmayer(его блог) Он плотно учавствовал в разработке ES6. Ему задали вопрос насчет поддержки в браузерах и он сказал, что по плану все основные браузеры будут полностью поддерживать стандарт уже до конца этого года.
    На днях он закончил книжку по ES6 и она доступна бесплатно в онлайн — Exploring ES6


  1. redlaber
    18.06.2015 10:38
    +3

    Я надеюсь, это все же опечатка =D
    «В ES6 добавили очень нужные JavaScript-разработчикам шутки»


  1. rock
    18.06.2015 11:14
    +2

    Извините, конечно, но про развитие языка — бред. Особенно порадовало

    • JavaScript 1.0 (1997)
    • JavaScript 2.0 (1998) – с некоторыми изменениями к предыдущей версии
    • JavaScript 3.0 (1999) – с некоторыми новыми возможностями
    Это версии ECMAScript. JavaScript так до версии 2 и не дожил — по идее, ей должен был стать ECMAScript 4.


    1. berman Автор
      18.06.2015 15:28

      Да, странно что в статье они так расставили версии


      1. rock
        18.06.2015 18:36

        В оригинале обошлись без JavaScript 3.0:

        JavaScript draw attention immediately, being submitted for standardization the following year, with version 1.0 coming out from Ecma in 1997, followed by 2.0, having some minor changes, in 1998, then 3.0, with some new features, in 1999.


  1. unel
    18.06.2015 11:24
    +5

    Странно, что в голосовалке нету TypeScript'а…


    1. some_x
      18.06.2015 11:41
      +4

      Поддерживаю. Ну и вообще варианта «другое»


    1. unclechu
      18.06.2015 12:05
      -2

      Странно что нет LiveScript-а например, давайте ещё ClojureScript добавим.


    1. vayho
      18.06.2015 13:19

      А scala.js как же


  1. sashagil
    18.06.2015 12:59
    +2

    «Это означает, что некоторые проблемы ES5, на которые разработчики жаловались годами так же никуда не денутся.» — странно, этот вопрос можно было бы решить расширением режима strict, типа strict6.

    «В ES6 добавили очень нужные JavaScript-разработчикам шутки...» — абсолютно за, без чувства юмора определённого сорта программировать на JavaScript невозможно! Очень хорошо, что юмор теперь стандартизован!


  1. berman Автор
    18.06.2015 15:19

    Поправил опечатки, которые прислало сообщество и убрал опрос. В опросе было всего 3 варианта ответа: ES5, ES6, Coffeescript, и под кофескриптом в контексте релиза ES6 можно было понимать любой другой прекомпайлер. Смысла их все перечислять нет, несмотря на это, самым интересным для меня оказался даже не вышеупомянутый кофескрипт, а lispyscript, советую попробовать всем) Насчет версий – напомню, что это не моя статья, а перевод статьи, которую r/javascript и hacker news получили первыми о релизе спецификации и я подумал, что и хабру неплохо бы было ее почитать на русском языке


  1. bo883
    18.06.2015 17:42

    Все вроде неплохо в новой спецификации, но официальное переименование это как то не очень(бедный как его уже не называли).