Різниця між мовами сценаріїв: для JavaScript VS ECMAScript

21

Від автора: я спробував загугліть «різниця між 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, Opera та 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. Знаю. Схоже на подорожі в часі, коли люди стають батьками самі собі. Ненадійно, але забавно.

Все хороше

Всі ми добре повеселилися, і дуже багато інформації необхідно засвоїти. Тут я попрощаюся. Величезне спасибі за читання!