stringtranslate.com

ECMAScript

ECMAScript ( / ˈ ɛ k m ə s k r ɪ p t / ; ES ) [1] — стандарт для языков сценариев, включая JavaScript , JScript и ActionScript . Он наиболее известен как стандарт JavaScript, предназначенный для обеспечения взаимодействия веб -страниц в различных веб-браузерах . [2] Он стандартизирован Ecma International в документе ECMA-262.

ECMAScript обычно используется для клиентских скриптов во Всемирной паутине , и все чаще его используют для серверных приложений и служб, использующих среды выполнения - Node.js , [3] deno [4] и bun . [5]

ECMAScript, ECMA-262, JavaScript

ECMA-262 , или спецификация языка ECMAScript , определяет язык ECMAScript , или просто ECMAScript . [6] ECMA-262 определяет только синтаксис языка и семантику основного интерфейса прикладного программирования ( API ), такого как Array , Function и globalThis , в то время как допустимые реализации JavaScript добавляют свои собственные функции, такие как ввод/вывод и обработка файловой системы .

История

Спецификация ECMAScript — это стандартизированная спецификация языка сценариев, разработанная Бренданом Эйхом из Netscape ; изначально он назывался Mocha, затем LiveScript и, наконец, JavaScript. [7] В декабре 1995 года Sun Microsystems и Netscape анонсировали JavaScript в пресс-релизе. [8] В ноябре 1996 года Netscape объявила о проведении встречи Международной организации по стандартам Ecma для продвижения стандартизации JavaScript. [9] Первое издание ECMA-262 было принято Генеральной ассамблеей Ecma в июне 1997 года. С тех пор было опубликовано несколько изданий стандарта языка. Название «ECMAScript» было компромиссом между организациями, занимающимися стандартизацией языка, особенно Netscape и Microsoft, чьи споры доминировали на ранних сессиях по стандартам. Эйх прокомментировал, что «ECMAScript всегда был нежелательным торговым названием, которое звучит как кожное заболевание ». [10] ECMAScript был формализован с помощью операционной семантики в ходе работы в Стэнфордском университете и на кафедре вычислительной техники Имперского колледжа Лондона для анализа безопасности и стандартизации. [11] До 1994 года «ECMA» расшифровывалось как «Европейская ассоциация производителей компьютеров».

Эволюция

Технический комитет 39 (TC39) Ecma отвечает за поддержку ECMAScript. [12] Новые предложения по языку проходят поэтапный процесс, при этом каждый этап представляет собой полноту спецификации предложения. Для продвижения предложения на следующий этап необходимо достичь консенсуса в комитете. Предложения, достигшие этапа 4, финального этапа, будут включены в следующую версию стандарта. [13] С момента выпуска версии 6 в июне 2015 года новые основные версии были завершены и опубликованы каждый июнь. [14]

Функции

Язык ECMAScript включает структурированные , динамические , функциональные и основанные на прототипах функции. [15]

Императивный и структурированный

ECMAScript JavaScript поддерживает структурное программирование в стиле C. Ранее JavaScript поддерживал только область действия функций с помощью ключевого слова var, но ECMAScript 2015 добавил ключевые слова letи const, что позволило JavaScript поддерживать как область действия блоков, так и область действия функций. JavaScript поддерживает автоматическую вставку точек с запятой , что означает, что точки с запятой, которые обычно завершают оператор в C, могут быть опущены в JavaScript. [16]

Как и в языках в стиле C, поток управления осуществляется с помощью операторов while, for, do/ while, if/ elseи switch. Функции слабо типизированы и могут принимать и возвращать любой тип. Аргументы, не указанные в параметрах, по умолчанию равны undefined.

Слабо типизированный

ECMAScript слабо типизирован . Это означает, что определенные типы назначаются неявно на основе выполняемой операции. Однако в реализации JavaScript преобразования переменной из одного типа в другой есть несколько странностей. Эти странности стали предметом обсуждения в докладе под названием Wat . [17] [18]

Динамичный

ECMAScript динамически типизирован. Таким образом, тип ассоциируется со значением, а не выражением. ECMAScript поддерживает различные способы проверки типа объектов, включая утиную типизацию . [19]

Транспилинг

Начиная с ES 2015, транспиляция JavaScript стала очень распространенной. Транспиляция — это компиляция исходного кода , в которой используются более новые версии JavaScript, а транспилятор переписывает исходный код так, чтобы он поддерживался старыми браузерами. Обычно транспиляторы транспилируют в ES3 для поддержания совместимости со всеми версиями браузеров. Параметры транспиляции в конкретную версию можно настроить в соответствии с необходимостью. Транспиляция добавляет дополнительный шаг к процессу сборки и иногда выполняется, чтобы избежать необходимости в полифиллах . Полифиллы создают новые функции для старых сред, в которых их нет. Полифиллы делают это во время выполнения в интерпретаторе, например, в браузере пользователя или на сервере. Вместо этого транспиляция переписывает сам код ECMA во время фазы сборки разработки, прежде чем он достигнет интерпретатора.

Соответствие

В 2010 году Ecma International начала разрабатывать стандартный тест для Ecma 262 ECMAScript. [20] Test262 — это набор тестов соответствия ECMAScript, который можно использовать для проверки того, насколько точно реализация JavaScript следует спецификации ECMAScript. Набор тестов содержит тысячи отдельных тестов, каждый из которых проверяет некоторые конкретные требования спецификации ECMAScript. Разработка Test262 — это проект Технического комитета Ecma 39 (TC39). Тестовая структура и отдельные тесты предоставлены Ecma организациями-членами TC39.

Важный вклад внесли Google ( тестовый набор Sputnik ) и Microsoft, которые оба внесли тысячи тестов. Тестовый набор Test262 состоял из38 014 тестов по состоянию на январь 2020 года . [21] Спецификации ECMAScript через ES7 хорошо поддерживаются в основных веб-браузерах . В таблице ниже показан уровень соответствия текущих версий программного обеспечения по отношению к последним редакциям ECMAScript.

Смотрите также

Ссылки

  1. ^ Стефанов, Стоян (2010). Шаблоны JavaScript. О'Рейли Медиа, Инк. с. 5. ISBN 9781449396947. Архивировано из оригинала 2016-06-10 . Получено 2016-01-12 . Основной язык программирования JavaScript [...] основан на стандарте ECMAScript , или сокращенно ES.
  2. ^ Вирфс-Брок, Аллен; Эйх, Брендан (2020-05-02). «JavaScript: первые 20 лет». Труды ACM по языкам программирования . 4 : 1–189. doi : 10.1145/3386327 . S2CID  219603695.
  3. ^ «Node.js — ECMAScript 2015 (ES6) и далее».
  4. ^ «Deno присоединяется к усилиям по стандартизации JavaScript». 14 декабря 2021 г.
  5. ^ https://bun.sh/docs#:~:text=or%2C%20more%20formally%2C-,ECMAScript,-)%20is%20just%20a булочка
  6. ^ Го, Шу-ю (2022-02-14). "ECMAScriptÂŽ 2022 Language Specification". tc39.es . Архивировано из оригинала 2020-05-08 . Получено 2022-02-14 .
  7. ^ Крилл, Пол (2008-06-23). ​​«Создатель JavaScript размышляет о прошлом и будущем». infoworld.com . InfoWorld. Архивировано из оригинала 20-09-2014 . Получено 31-10-2013 .
  8. ^ "Netscape и Sun анонсируют JavaScript, открытый кроссплатформенный язык сценариев объектов для корпоративных сетей и Интернета". Netscape.com . Netscape. 1995-12-04. Архивировано из оригинала 2002-06-06 . Получено 2019-11-04 .
  9. Пресс-релиз (15 ноября 1996 г.). «Лидеры отрасли продвигают стандартизацию JavaScript Netscape на встрече комитета по стандартам». Netscape.com . Netscape. Архивировано из оригинала 1998-12-03 . Получено 2013-10-31 .
  10. ^ Эйх, Брендан (2006-10-03). «Будет ли предложен суффикс файла для es4?». mozilla.org . Mail.mozilla.org. Архивировано из оригинала 2020-06-21 . Получено 2021-05-05 .
  11. ^ Maffeis, Sergio; Mitchell, John C.; Taly, Ankur (2020-01-03). "Операционная семантика для JavaScript" (PDF) . stanford.edu . Association for Computing Machinery . Архивировано (PDF) из оригинала 2020-01-03 . Получено 2020-01-03 .
  12. ^ "TC39", Технические комитеты , Ecma International , получено 11 августа 2024 г.
  13. ^ "Процесс TC39", TC39 , Ecma International , получено 11 августа 2024 г.
  14. ^ «ECMAScript, TC39 и история JavaScript», ui.dev , получено 2024-08-11
  15. ^ "About". ECMAScript. Архивировано из оригинала 2012-08-02 . Получено 2009-12-17 .
  16. Дэвид Фланаган (17 августа 2006 г.). JavaScript: Полное руководство: Полное руководство. "O'Reilly Media, Inc.". стр. 16. ISBN 978-0-596-55447-7. Архивировано из оригинала 1 августа 2020 . Получено 11 ноября 2019 .
  17. ^ Бернхардт, Гэри. Уот. CodeMash 2012. Destroy All Software . Архивировано из оригинала 2019-10-28 . Получено 2021-08-18 .
  18. ^ Gilbertson, Scott (26 января 2012 г.). «Шутки для ботаников: Вот моменты в программировании». Wired . Архивировано из оригинала 23 августа 2020 г. Получено 22 августа 2021 г.
  19. ^ "Типы и структуры данных JavaScript – JavaScript | MDN". Developer.mozilla.org . 2017-02-16. Архивировано из оригинала 2017-03-14 . Получено 2017-02-24 .
  20. ^ "ECMAScript Language – test262". Test262.ecmascript.org. Архивировано из оригинала 2011-05-14 . Получено 2013-10-31 .
  21. ^ "tc39/test262". GitHub . 24 января 2020 г. Архивировано из оригинала 1 октября 2019 г. Получено 29 января 2020 г.
  22. ^ ES5 является базовым для этого набора тестов. Уровень соответствия для других редакций отражает только поддержку новых функций, а не комплексную оценку.
  23. ^ "Таблица совместимости ECMAScript 5". compat-table.github.io . 2024-04-14. Архивировано из оригинала 2024-01-14 . Получено 2024-04-14 .
  24. ^ "Таблица совместимости ECMAScript 6". compat-table.github.io . 2024-04-14. Архивировано из оригинала 2024-04-04 . Получено 2024-04-14 .
  25. ^ "Таблица совместимости ECMAScript 2016+". compat-table.github.io . 2024-04-14. Архивировано из оригинала 2024-01-14 . Получено 2024-04-14 .
  26. ^ "Таблица совместимости ECMAScript Next". compat-table.github.io . 2024-04-14. Архивировано из оригинала 2024-01-14 . Получено 2024-04-14 .
  27. ^ Композитная оценка, включающая новые функции из ES7 до проектов следующего издания.