Генеральное собрание 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. Кратко о релизе нам уже рассказал monolithed – http://habrahabr.ru/post/260561/
Комментарии (43)
faiwer
18.06.2015 09:51+3Вопрос к тем, кто использует Babel и др. подобные трансляторы.
— Насколько сильно усложняется отладка такого кода?
— Насколько сильна просадка в производительности в наиболее сложных местах (на вроде тех же генераторов)
— Кто-нибудь использует в production-е async\await? Стабильно работает?auine
18.06.2015 09:58+1Для отладки кода который обрабатывается пре, пост просессингом или еще чем, есть соурсмепы которые позволяют на том же клиенте дебажить написанный код
k12th
18.06.2015 10:111) Соурсмапы здорово помогают, да и получившийся код не такой уж страшный.
2) На глаз незаметно, но на 2000 элементов я не тестировал:)
TedBeer
18.06.2015 10:11Вчера на презентации ES6 выступал разработчик из DHL. Они используют ES6 в продакшн вместе с AngularJS. Показывал и отладку и код. Правда основные фичи, которые они используют — это классы, константы, локальные переменные и толстые стрелки (classes, const, let, => aka arrow functions) Генераторы и другие более продвинутые фичи пока не используют.
Код генерируемый транслятором Babel вполне читаемый и подходит для отладки. Для написания юнит тестов они тоже используют ES6. Правда охват кода тестами никогда не достигнет 100% из-за дополнительного кода генерируемого Babelandy128k
18.06.2015 17:23Правда охват кода тестами никогда не достигнет 100% из-за дополнительного кода генерируемого Babel
Я использую для анализа покрытия isparta, она игнорирует дополнительный код.
quozd
18.06.2015 10:32Используем с недавних пор в продакшене Babel + изоморфный React последний.
1. Отладка через сорсмапы делается без проблем. В браузере читаешь es6. Каких-то проблем не встречал пока.
2. Генераторы пока не используем, просадки в производительности визуально не заметили, поэтому цифры не меряли. Билд правда дольше стал в два раза :)
3. Стремно
hell0w0rd
18.06.2015 11:52+1Использую babel уже около полугода и просто счатслив. Сначала с angular + node.js, сейчас react и async/await на сервере. async/await использую с помощью bluebird.couroutine , посмотрите в тесты, этот вариант самый быстрый, после коллбэков.
faiwer
18.06.2015 11:56Спасибо за bluebird.couroutine, посмотрю. Сразу же вопрос: не возникает проблемы с отловом ошибок (в особенности непредусмотренных) при таком подходе?
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 на клиенте не использую.
asm0dey
21.06.2015 00:45При разумном использовании генераторов скорость работы даже выше может быть :)
gist.github.com/asm0dey/0290fb111e2317f0238c
Прелесть в ленивости.
TedBeer
18.06.2015 10:05+5Вчера присутствовал на презентации ES6 с докладчиком Dr. Axel Rauschmayer(его блог) Он плотно учавствовал в разработке ES6. Ему задали вопрос насчет поддержки в браузерах и он сказал, что по плану все основные браузеры будут полностью поддерживать стандарт уже до конца этого года.
На днях он закончил книжку по ES6 и она доступна бесплатно в онлайн — Exploring ES6
redlaber
18.06.2015 10:38+3Я надеюсь, это все же опечатка =D
«В ES6 добавили очень нужные JavaScript-разработчикам шутки»
rock
18.06.2015 11:14+2Извините, конечно, но про развитие языка — бред. Особенно порадовало
Это версии ECMAScript. JavaScript так до версии 2 и не дожил — по идее, ей должен был стать ECMAScript 4.- JavaScript 1.0 (1997)
- JavaScript 2.0 (1998) – с некоторыми изменениями к предыдущей версии
- JavaScript 3.0 (1999) – с некоторыми новыми возможностями
berman Автор
18.06.2015 15:28Да, странно что в статье они так расставили версии
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.
sashagil
18.06.2015 12:59+2«Это означает, что некоторые проблемы ES5, на которые разработчики жаловались годами так же никуда не денутся.» — странно, этот вопрос можно было бы решить расширением режима strict, типа strict6.
«В ES6 добавили очень нужные JavaScript-разработчикам шутки...» — абсолютно за, без чувства юмора определённого сорта программировать на JavaScript невозможно! Очень хорошо, что юмор теперь стандартизован!
berman Автор
18.06.2015 15:19Поправил опечатки, которые прислало сообщество и убрал опрос. В опросе было всего 3 варианта ответа: ES5, ES6, Coffeescript, и под кофескриптом в контексте релиза ES6 можно было понимать любой другой прекомпайлер. Смысла их все перечислять нет, несмотря на это, самым интересным для меня оказался даже не вышеупомянутый кофескрипт, а lispyscript, советую попробовать всем) Насчет версий – напомню, что это не моя статья, а перевод статьи, которую r/javascript и hacker news получили первыми о релизе спецификации и я подумал, что и хабру неплохо бы было ее почитать на русском языке
bo883
18.06.2015 17:42Все вроде неплохо в новой спецификации, но официальное переименование это как то не очень(бедный как его уже не называли).
Master_Dante
Я так думаю, что полноценно использовать ECMAScript 2015 можно будет тогда, когда все не поддерживающие браузеры выйдут из обращения. Предположим что в 2016 году выйдут браузеры полностью поддерживающие ECMAScript 2015. Тогда года через 2-3, можно будет использовать, т.е. речь идет где то о 2018-2019 годах.
k12th
Как минимум, можно спокойно писать под транспилятор, не боясь, что в новом релизе Babel что-нибудь сломается или придется все переделывать под новые фишечки. На сервере тоже можно будет переходить — по мере того, как v8 будет все-таки реализовывать недостающее.
Если ориентироваться на сугубо нативную поддержку, то и на ES5 еще рановато писать, а на Coffee/Type/ClojureScript вообще никогда:)
bogus92
На сервере можно переходить точно так же на Babel и даже не думать о том, что уже поддерживается, а что еще нет.
k12th
Можно. Но в nodejs все-таки быстрее прогресс, чем в браузерах.
gibson_dev
Да сейчас вроде да MicroSoft начали обновлять браузер практически во время так что думаю что раньше
k12th
Ну я еще год назад поддерживал IE8. Зависит твердолобости и ретроградности составителей ТЗ, на самом деле.
xenohunter
У нас сейчас IE7 поддерживается, и ещё долго будет поддерживаться. Хотя, казалось бы, не банковская сфера, обычные клиентские сайты.
k12th
И IE7 тоже было. Правда, не в вебе, а в десктопном интерфейсе (сделанном на IE-шном WebView). С одной стороны, там был 7 и только 7, что отчасти облегчало задачу, а с другой — дебажить это было невозможно вообще никак.
Zenitchik
Ворованная винда с IE8 ещё долго будет встречаться. Богам слава, что те, кто её ставят, в большинстве своём всё-таки знают слово «браузер» и принимают меры…
auine
Я писал в своей публикации и вообще сейчас все сообщество идет к транспилерам. Никто не будет ждать пока все утвердится. Уже сейчас можно спокойно писать используя babel. И мир дева в js идет к фича-бай-фича, а не к версированию языка.
some_x
Зачем тогда браузерам вообще делать поддержку es2015, если всё равно большинство в браузеры будет присылать код es5 скомпилированный из es2015?
Тогда вообще стоило бы встроить в браузеры поддержку некоторого байт-кода, аля байт-код jwm, у разработчиков развязались бы руки и они получили бы возможность писать на любом языке.
Infernal
Вы не поверите: blog.mozilla.org/luke/2015/06/17/webassembly
auine
Это для некоторых юз кейсов, но не решает ту проблему о которой мы сейчас говорим
auine
Да давайте знатоки, еще минусов)))
webassebly не дает вам возможности банально работать с DOM. Эта фича для того же фронт-дева особо не нужна.
Infernal
В goals у проекта есть в том числе «access browser functionality through the same Web APIs that are accessible to JavaScript».
2tl
habrahabr.ru/post/260667
auine
Разумеется надо поддерживать нативно, для производительности и прочих нюансов. Но так как это происходит медленно, а использовать хочется уже сейчас, у вас есть выбор. Взять и юзать тот же бабел и уже наслаждаться es6, или сидеть и ныть, о том что стоит еще чучуть подождать. Уже как года пол все пишут спокойно на es6 как на фронте так и на серваках, а вы все думаете стоит ли.
Master_Dante
С открытием сорцев C# и платформы есть шанс, что он станет поддерживаемым в браузерах, со всеми вытекающими…
Master_Dante
Кстати говоря а вот и первые ласточки www.3dnews.ru/software-news/915889