Разница между языками скриптов: JavaScript VS ECMAScript

Разница между языками скриптов: JavaScript VS ECMAScript

От автора: я попробовал загуглить «разница между JS и ECMAScript». В итоге мне пришлось разгребать море двусмысленных и, казалось бы, противоречивых результатов…

«ECMAScript — стандарт», «JS — стандарт», «ECMAScript — спецификация», «JS – реализация стандарта ECMAScript», «ECMAScript – язык», «JS – диалект ECMAScript», «ECMAScript – это JS»…

Разница между языками скриптов: JavaScript VS ECMAScript

Сдерживая проступающие слезы, я решил разобраться в этом вопросе.

Эта статья представляет мое текущее понимание того, чем отличается язык скриптов JavaScript от ECMAScript. Статья предназначена для людей, которые знают JS, но хотели бы четче понять его связь с ECMAScript, веб-браузерами, Babel и т.д. Также вы узнаете о языках скриптов, движках JS и о времени выполнения JS. В общем, приготовьтесь.

Словарь JS/ECMAScript

Ниже приведен список определений, разработанных с упором на согласованность и четкость. Определения не 100% конечны, они созданы, чтобы предоставить высокий уровень понимания связи и отношения JS и ECMAScript. Без разглагольствований начнем.

Ecma International

Организация, создающая стандарты для технологий.

Разница между языками скриптов: JavaScript VS ECMAScript

Чтобы проиллюстрировать пример «стандарта» (но не от Ecma), подумайте обо всех клавиатурах, которыми вы пользовались. На подавляющем большинстве клавиши были расположены в одном порядке, был пробел, клавиша enter, стрелки и числа в верхней части? Все это потому, что большинство производителей клавиатур разрабатывают дизайн на основе стандарта макета QWERTY.

ECMA-262

Стандарт, опубликованный Ecma International. Он содержит спецификацию для общего языка сценариев.

Разница между языками скриптов: JavaScript VS ECMAScript

ECMA-262 – стандарт, как QWERTY, но вместо спецификации макета клавиатуры он представляет спецификацию языка сценариев под названием ECMAScript. Думайте о ECMA-262, как о ссылочном номере на ECMAScript.

Разница между языками скриптов: JavaScript VS ECMAScript

Язык сценариев

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

Чтобы понять, что делает язык программирования языком сценариев, представьте команды «ходить», «бегать» и «прыгать». Для выполнения этих действий нужен какой-то объект, возможно, человек, собака или персонаж компьютерной игры. Без объекта, выполняющего команды «ходить», «бегать» и «прыгать», эти команды не имеют смысла. Этот набор действий аналогичен языку сценариев, который сосредоточен на манипулировании внутренними сущностями.

ECMAScript

Спецификация, описанная в ECMA-262, для создания общего языка сценариев. Синоним: спецификация ECMAScript

Разница между языками скриптов: JavaScript VS ECMAScript

Так как ECMA-262 – название стандарта, то оно представляет спецификацию языка сценариев ECMAScript. ECMAScript предоставляет правила, детали и руководящие принципы, которые должен соблюдать язык сценариев, чтобы быть совместимым ECMAScript.

Разница между языками скриптов: JavaScript VS ECMAScript

JavaScript

Общий язык сценариев, совместимый со спецификацией ECMAScript. Это диалект языка ECMAScript.

Разница между языками скриптов: JavaScript VS ECMAScript

JS – кофейный язык, на котором я очень люблю программировать. ECMAScript – спецификация, на которой он основан. Прочитав спецификацию ECMAScript, вы узнаете, как создать язык сценариев. Прочитав документацию JavaScript, вы узнаете, как использовать язык сценариев.

Когда люди говорят, что JS – диалект языка ECMAScript, они имеют в виду то же самое, что и для диалектов английского, французского или китайского. Диалект берет большую часть своей лексики и синтаксиса от родительского языка, но имеет достаточно много отклонений, чтобы считаться отдельным языком.

По большей части JS реализует спецификацию ECMAScript, как описано в ECMA-262, но в нем есть немного изменений. Mozilla описывает функции JS, не удовлетворяющие языку ECMAScript, здесь:

Разница между языками скриптов: JavaScript VS ECMAScript

Движок JS

Программа или интерпретатор, понимающий и выполняющий код JS. Синонимы: интерпретатор JS, реализация JS

Разница между языками скриптов: JavaScript VS ECMAScript

JS движки, по большей части, можно найти в браузерах. Это V8 в Chrome, SpiderMonkey в firefox и Chakra в Edge. Каждый движок похож на модуль языка для его применения, который позволяет поддерживать определенную часть языка JS.

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

С помощью этой аналогии можно объяснить пару вещей о браузерах:

Разница между языками скриптов: JavaScript VS ECMAScript

Разница в производительности браузеров

Два человека могут знать команды прыгать, но один может отреагировать на нее быстрее, потому что он понимает и выполняет команду быстрее другого. Точно так же два браузера могут понимать код JS, но один браузер запускает его быстрее, так как его движок JS реализован более эффективно.

Разница между языками скриптов: JavaScript VS ECMAScript

Разница в поддержке браузеров

Между людьми, говорящими на одном языке, есть различия. Даже если очень много людей говорят на английском, некоторые могут знать слова, выражения и синтаксис, который другие не знают, и наоборот. С браузерами все так же. Даже если движки JS всех браузеров понимают JS, некоторые браузеры понимают язык лучше других. Разница заключается в самом способе поддержки языка браузерами.

С точки зрения поддержки в браузерах люди обычно говорят о «совместимости с ECMAScript», а не о «совместимости с JS», несмотря на то, что движки JS парсят и выполняют… JS код. Это может немного запутать, но на все есть свое объяснение.

Разница между языками скриптов: JavaScript VS ECMAScript

Если вспомнить, то ECMAScript – спецификация языка сценариев. Релиз новой версии ECMAScript не означает, что все движки JS внезапно станут поддерживать эти новые функции. Все зависит от групп или организаций, ответственных за обновление движков JS до последней спецификации ECMAScript и применение изменений.

Поэтому разработчики, как правило, спрашивают «какую версию ECMAScript поддерживает этот браузер?» или «какие функции ECMAScript поддерживает этот браузер?» Они хотят узнать, удалось ли Google, Mozilla и Microsoft обновить движки JS браузеров – например, V8, SpiderMonkey и Chakra – до функций, описанных в последней спецификации ECMAScript.

Таблица совместимости ECMAScript ответит на эти вопросы.

Если выходит новая версия ECMAScript, движки JS не интегрируют все обновление разом. Они подключают новые функции ECMAScript постепенно, что видно из выдержки лога изменений firefox JS:

Разница между языками скриптов: JavaScript VS ECMAScript

Время выполнения JS

Окружение, в рамках которого запускается и интерпретируется код JS движком. Время выполнения предоставляет объекты, с которыми Js может оперировать и работать. Синонимы: хост-среда

Разница между языками скриптов: JavaScript VS ECMAScript

Время выполнения JS – это и есть «существующая сущность или система», о которой говорится в определении языка сценариев. Код проходит через движок JS, и после парсинга и распознавания сущность или система выполняет интерпретируемые действия. Собака идет, человек бежит, персонаж компьютерной игры прыгает (или как на скриншоте выше ломает).

Приложения становятся доступны для сценариев JS, предоставляя хост-объекты во время выполнения. Со стороны клиента время выполнения JS – это браузер, где хост-объекты типа window, HTML document становятся доступны для манипуляций.

Вы когда-нибудь работали с хост-объектами window или document? Объекты window и document, на самом деле, не являются частью ядра языка JS. Это Web API, объекты, предоставляемые браузеров, действующим как хост-среда JS. Со стороны сервера время выполнения JS – это Node.js. Серверные хост-объекты типа файловой системы, процессов и запросов хранятся в Node.js.

Интересный момент: разные времена выполнения JS могут делить один движок JS. Например, V8 – движок JS, используемый в Google Chrome и Node.js – два крайне разных окружения.

ECMAScript 6

Шестая версия стандарта ECMA-262, основные изменения и улучшения функций в спецификацию ECMAScript. Синонимы: ES6, ES2015 и ECMAScript 2015

Разница между языками скриптов: JavaScript VS ECMAScript

Версия ECMAScript, сменившая название с ES6 на ES2015, так как 2015 Ecma International решила переключиться на ежегодные релизы ECMAScript. Точно так же Ecma International начали по-новому именовать новые версии спецификации ECMAScript по году выпуска. Если коротко, ES6 и ES2015 – это два разных названия одной спецификации.

Babel

Транспайлер, конвертирующий код ES6 в код ES5.

Разница между языками скриптов: JavaScript VS ECMAScript

Разработчики могут использовать новейшие функции ES6, но беспокоиться о кроссбраузерной поддержке своих приложений. На момент написания статьи edge и IE не полностью поддерживают функции из спецификации ES6.

Обеспокоенные разработчики могут конвертировать свой код ES6 в функционально эквивалентную версию ES5 с помощью Babel. Все основные браузеры полностью поддерживают ES5, поэтому код будет запускаться без проблем.

Еще одна интересная вещь

Надеюсь, информация о JS и ECMAScript была вам полезна. Прежде чем мы закончим, хотелось бы поделиться еще кое-чем, что необходимо прояснить начинающим разработчикам, как я.

Курица или яйцо

Запутанная история. JS был создан в 1996. Затем он был предложен в Ecma International на стандартизацию в 1997, что вылилось в ECMAScript. В то же время так как JS соблюдает спецификацию ECMAScript, то JS является примером реализации ECMAScript.

Мы получаем забавный факт: ECMAScript основан на JS, а JS основан на ECMAScript. Знаю. Похоже на путешествия во времени, когда люди становятся родителями сами себе. Ненадежно, но забавно.

Все хорошее

Все мы хорошо повеселились, и очень много информации необходимо усвоить. Здесь я попрощаюсь. Огромное спасибо за чтение!

Автор: Michael Aranda

Источник: //medium.freecodecamp.org/

Редакция: Команда webformyself.

Метки:

Похожие статьи:

Комментарии Вконтакте: