model-view-whatever dev
0,0
рейтинг
18 июня 2015 в 06:45

Разработка → Одобрена спецификация ECMAScript 2015

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/
Олег Берман @berman
карма
66,2
рейтинг 0,0
model-view-whatever dev
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

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

  • +6
    Я так думаю, что полноценно использовать ECMAScript 2015 можно будет тогда, когда все не поддерживающие браузеры выйдут из обращения. Предположим что в 2016 году выйдут браузеры полностью поддерживающие ECMAScript 2015. Тогда года через 2-3, можно будет использовать, т.е. речь идет где то о 2018-2019 годах.
    • +8
      Как минимум, можно спокойно писать под транспилятор, не боясь, что в новом релизе Babel что-нибудь сломается или придется все переделывать под новые фишечки. На сервере тоже можно будет переходить — по мере того, как v8 будет все-таки реализовывать недостающее.

      Если ориентироваться на сугубо нативную поддержку, то и на ES5 еще рановато писать, а на Coffee/Type/ClojureScript вообще никогда:)
      • +1
        На сервере можно переходить точно так же на Babel и даже не думать о том, что уже поддерживается, а что еще нет.
        • +1
          Можно. Но в nodejs все-таки быстрее прогресс, чем в браузерах.
    • 0
      Да сейчас вроде да MicroSoft начали обновлять браузер практически во время так что думаю что раньше
      • +1
        Ну я еще год назад поддерживал IE8. Зависит твердолобости и ретроградности составителей ТЗ, на самом деле.
        • +1
          У нас сейчас IE7 поддерживается, и ещё долго будет поддерживаться. Хотя, казалось бы, не банковская сфера, обычные клиентские сайты.
          • 0
            И IE7 тоже было. Правда, не в вебе, а в десктопном интерфейсе (сделанном на IE-шном WebView). С одной стороны, там был 7 и только 7, что отчасти облегчало задачу, а с другой — дебажить это было невозможно вообще никак.
        • 0
          Ворованная винда с IE8 ещё долго будет встречаться. Богам слава, что те, кто её ставят, в большинстве своём всё-таки знают слово «браузер» и принимают меры…
    • 0
      Я писал в своей публикации и вообще сейчас все сообщество идет к транспилерам. Никто не будет ждать пока все утвердится. Уже сейчас можно спокойно писать используя babel. И мир дева в js идет к фича-бай-фича, а не к версированию языка.
      • –1
        Зачем тогда браузерам вообще делать поддержку es2015, если всё равно большинство в браузеры будет присылать код es5 скомпилированный из es2015?

        Тогда вообще стоило бы встроить в браузеры поддержку некоторого байт-кода, аля байт-код jwm, у разработчиков развязались бы руки и они получили бы возможность писать на любом языке.
        • 0
          Вы не поверите: blog.mozilla.org/luke/2015/06/17/webassembly
          • –4
            Это для некоторых юз кейсов, но не решает ту проблему о которой мы сейчас говорим
            • –3
              Да давайте знатоки, еще минусов)))
              webassebly не дает вам возможности банально работать с DOM. Эта фича для того же фронт-дева особо не нужна.
              • +1
                В goals у проекта есть в том числе «access browser functionality through the same Web APIs that are accessible to JavaScript».
          • +1
        • +1
          Разумеется надо поддерживать нативно, для производительности и прочих нюансов. Но так как это происходит медленно, а использовать хочется уже сейчас, у вас есть выбор. Взять и юзать тот же бабел и уже наслаждаться es6, или сидеть и ныть, о том что стоит еще чучуть подождать. Уже как года пол все пишут спокойно на es6 как на фронте так и на серваках, а вы все думаете стоит ли.
          • 0
            С открытием сорцев C# и платформы есть шанс, что он станет поддерживаемым в браузерах, со всеми вытекающими…
          • 0
            Кстати говоря а вот и первые ласточки www.3dnews.ru/software-news/915889
  • +3
    Вопрос к тем, кто использует Babel и др. подобные трансляторы.
    — Насколько сильно усложняется отладка такого кода?
    — Насколько сильна просадка в производительности в наиболее сложных местах (на вроде тех же генераторов)
    — Кто-нибудь использует в production-е async\await? Стабильно работает?
    • +1
      Для отладки кода который обрабатывается пре, пост просессингом или еще чем, есть соурсмепы которые позволяют на том же клиенте дебажить написанный код
    • 0
      1) Соурсмапы здорово помогают, да и получившийся код не такой уж страшный.
      2) На глаз незаметно, но на 2000 элементов я не тестировал:)
    • 0
      Вчера на презентации ES6 выступал разработчик из DHL. Они используют ES6 в продакшн вместе с AngularJS. Показывал и отладку и код. Правда основные фичи, которые они используют — это классы, константы, локальные переменные и толстые стрелки (classes, const, let, => aka arrow functions) Генераторы и другие более продвинутые фичи пока не используют.
      Код генерируемый транслятором Babel вполне читаемый и подходит для отладки. Для написания юнит тестов они тоже используют ES6. Правда охват кода тестами никогда не достигнет 100% из-за дополнительного кода генерируемого Babel
      • +1
        Правда охват кода тестами никогда не достигнет 100% из-за дополнительного кода генерируемого Babel

        Ну это не совсем правда. Есть опция auxiliaryComment
      • 0
        Правда охват кода тестами никогда не достигнет 100% из-за дополнительного кода генерируемого Babel

        Я использую для анализа покрытия isparta, она игнорирует дополнительный код.
    • 0
      Используем с недавних пор в продакшене Babel + изоморфный React последний.

      1. Отладка через сорсмапы делается без проблем. В браузере читаешь es6. Каких-то проблем не встречал пока.
      2. Генераторы пока не используем, просадки в производительности визуально не заметили, поэтому цифры не меряли. Билд правда дольше стал в два раза :)
      3. Стремно
    • +1
      Использую babel уже около полугода и просто счатслив. Сначала с angular + node.js, сейчас react и async/await на сервере. async/await использую с помощью bluebird.couroutine , посмотрите в тесты, этот вариант самый быстрый, после коллбэков.
      • 0
        Спасибо за bluebird.couroutine, посмотрю. Сразу же вопрос: не возникает проблемы с отловом ошибок (в особенности непредусмотренных) при таком подходе?
        • +1
          нет, в стэк-трейсах все довольно понятно, раньше с этим были проблемы, сейчас вроде нет.
          // ваш код
          async function foo() {
            await bar();
          }
          
          // сгенерированный babel
          var foo = bluebird.couroutine(function *foo() {
            yield bar();
          });
          

          async/await можно дебажить без сорсмэпов спокойно, на мой взгляд. Ранее неудобства доставлял только regenerator, поэтому async/await на клиенте не использую.
        • +1
          Никаких проблем. Пример. С bluebird.couroutine аналогично.
    • 0
      При разумном использовании генераторов скорость работы даже выше может быть :)
      gist.github.com/asm0dey/0290fb111e2317f0238c

      Прелесть в ленивости.
  • +5
    Вчера присутствовал на презентации ES6 с докладчиком Dr. Axel Rauschmayer(его блог) Он плотно учавствовал в разработке ES6. Ему задали вопрос насчет поддержки в браузерах и он сказал, что по плану все основные браузеры будут полностью поддерживать стандарт уже до конца этого года.
    На днях он закончил книжку по ES6 и она доступна бесплатно в онлайн — Exploring ES6
  • +3
    Я надеюсь, это все же опечатка =D
    «В ES6 добавили очень нужные JavaScript-разработчикам шутки»
  • +2
    Извините, конечно, но про развитие языка — бред. Особенно порадовало
    • JavaScript 1.0 (1997)
    • JavaScript 2.0 (1998) – с некоторыми изменениями к предыдущей версии
    • JavaScript 3.0 (1999) – с некоторыми новыми возможностями
    Это версии ECMAScript. JavaScript так до версии 2 и не дожил — по идее, ей должен был стать ECMAScript 4.
    • 0
      Да, странно что в статье они так расставили версии
      • 0
        В оригинале обошлись без 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.
  • +5
    Странно, что в голосовалке нету TypeScript'а…
    • +4
      Поддерживаю. Ну и вообще варианта «другое»
    • –2
      Странно что нет LiveScript-а например, давайте ещё ClojureScript добавим.
    • 0
      А scala.js как же
  • +2
    «Это означает, что некоторые проблемы ES5, на которые разработчики жаловались годами так же никуда не денутся.» — странно, этот вопрос можно было бы решить расширением режима strict, типа strict6.

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

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