Перейти к основному содержимому
Chapter content StyleChapter Difficulty14 min

«Success has many fathers».

slogan,

first Ecma JS meeting, 19961

Глава 2: Введение

В этой главе хотелось бы поговорить о происхождении ECMAScript Language Specification и JavaScript.

Давайте начнём с основных определений, которые каждый сможет найти на просторах интернета. Определим для себя термины в контексте нашего повествования, чтобы отталкиваться от них в будущем. Итак, если обращаться к определению термина "спецификация", мы увидим следующее:

A specification often refers to a set of documented requirements to be satisfied by a material, design, product, or service. A specification is often a type of technical standard.

~ wiki

Далее давайте взглянем на определение термина "ECMAScript":

ECMAScript is an object-oriented programming language for performing computations and manipulating computational objects within a host environment.
~ tc39

То есть ECMAScript — это объектно-ориентированный язык программирования для выполнения вычислений и управления вычислительными объектами в хост-среде. Для того, чтобы контролировать работу и возможности этого языка в 1996-1997 годах была реализована первая версия спецификации, где были описаны его основополагающие механизмы работы и определения всех внутриязыковых терминов.

Современная же спецификация получила множество новых версий, которые дополнили и исправили язык, а где-то и испортили его вовсе. На тему плюсов и минусов нововведений на протяжении всей эволюции языка будет написана отдельная глава.

Итак, мы знаем, что существует какой-то язык программирования под названием ECMAScript; знаем, что у него есть вполне большая история эволюции вплоть до сегодняшних дней. Но как же тут задействован язык JavaScript, и почему разработчикам, использующим его, в целях увеличения культуры разработки и производительности своего кода желательно знать спецификацию ECMAScript? Ответ кроется в определениях.

Сквозь призму времени

Когда-то немалоизвестный Брендан Эйх, работающий в небольшой команде в компании Netscape Communications Corporation вместе с двумя коллегами, которых звали Марк Андриссен и Билл Джой, за 10 дней создал язык программирования под названием Mocha (будущий JavaScript) для существовавшего на тот момент браузера Netscape Navigator. Эта инициатива была направлена на помощь одинокому и дерзкому языку гипертекстовой разметки — HTML — динамично реализовать интерфейс веб-страниц в браузере.

Рождённый в тени...

Так вышло, что Mocha поневоле стал вечным младшим братом мастодонта тех времён — языка Java; не путать Java и JavaScript. Сам Брендан Эйх писал в своём блоге, что язык "был рождён в тени Java". Это должно наводить нас на некоторые промежуточные мысли:

  • Mocha многое получил от своего брата Java
  • Почему-то было принято решение сделать ещё один язык программирования, хотя уже тогда был великий и успешный Java для server-side

Первая мысль звучит вполне логично, ведь Mocha создавался не вопреки Java, а в помощь ему, и тоже для веб-индустрии. Почему бы не взять лучшее и проверенное временем от Java и не вставить в новый язык? Так и было решено высшим инженерным руководством Netscape, что одновременно исключило возможность другим языкам занять эту нишу.

Куда интереснее для истории была вторая мысль. Внутри компании Netscape шли сильные противоборства по поводу необходимости второго языка. Но дело в том, что область применения Java и коллеги по цеху — C++, сделала его слишком серьёзным языком, чтобы встроиться в клиентскую часть. Не "по чину" было старшему брату выполнять работу за младшего.

Итак, в бородатом обществе сформировалась идея создания некоторого похожего дополнения к Java. Уже тогда люди положительно оценили веющий идейный ветер скриптовых языков (scripting language). То есть необходимо было сделать нечто скриптовое, похожее на Java и встраиваемое в HTML.

An interesting fact...

Из источника 1996 года...

Язык программирования Java изначально не был тем самым языком веба, каким он стал известен позже. В момент его зарождения, в 1991 году, некие, назовём их энтузиасты, работали над проектом компании Sun Microsystems под названием "Stealth Project". Среди них был и Билл Джой, в будущем принявший участие в разработке языка Mocha (JavaScript).

Их задачей было создать систему, которая позволила бы организовать большую, распределенную, гетерогенную сеть потребительских электронных устройств, общающихся друг с другом. Как позже выяснилось, языки C/C++ были "неадекватными" для их задачи. Так что один из разработчиков, по имени Джеймс Гослинг, с идеей написать отдельный язык программирования, создал собственные модификации C++ (известные как "C++ ++ --"), ставшие началом будущего Java в рамках их проекта.

И вот воссозданный с нуля язык Джеймс назвал Oak, в честь дуба, стоящего напротив его окна; язык, который потом переименовали из-за уже занятого патента, в известный нам Java. Название стало таким, по двум возможным причинам. Из воспоминаний Гослинга, после его очередного похода в кофейню, где он увидел кофейный сорт — Java coffee. Другая версия — первые буквы имён деятелей проекта — J ames Gosling, A rthur V an Hoff, A ndy Bechtolsheim.

Но только в 1994 году, в рамках уже другого проекта Java, пройдя некоторый путь, был избран на роль языка разработки веб-браузера WebRunner (в будущем HotJava) и, доказав свою эффективность, с 1995 года постепенно получил поддержку всех коммерчески успешных браузеров той эпохи.

Эволюция

Для понимания причин "условной лёгкости" современного языка JavaScript очень важно дифференциировать языки Java и Mocha в тот момент времени, когда младший брат только родился. Mocha был призван "на коленке" создавать простенькие скрипты для страничек в интернете, в то время как Java был громоздким в сравнении с Mocha языком для тяжёлых задач веб-индустрии того времени. Конструкция языка Mocha была пронизана понятными и открытыми принципами его реализации. Людям не нужен был сложный язык для "оживления" веб страниц; лёгкость и примитивность стали во главе Mocha. Вскоре язык был переименован в LiveScript и в этом же году после закрытия сделки между Sun Microsystems и Netscape Communications Corporation язык получил третье и последнее название — JavaScript.

An interesting fact...

Одновременно с приобретением языком JavaScript своего культового названия Брендан Эйх разработал известный и по сей день движок для выполнения кода в браузере Netscape Navigator. Он получил название SpiderMonkey. Сейчас успешно используется в браузере Firefox.

Неожиданный успех в веб-индустрии, продиктованный простотой и лёгкостью использования языка JavaScript, породил "клонов" по типу JScript от Microsoft, который использовался в браузере Internet Explorer. Их реализации рабочего функционала могли быть изменены относительно основного курса развития JavaScript. Так что для стандартизирования языка и для установки требований к его внутренней "машинерии" спустя некоторое время после первой встречи в ноябре 1996 года уже в 1997 году была опубликована спецификация ассоциации ECMA — European Computer Manufacturers Association (сейчас Ecma) — в качестве стандарта ECMA-262 под названием "ECMAScript Language Specification", написанная за 7 месяцев.

В данный момент у любого человека обязательно появится вполне логичный вопрос: а почему же спецификацию не назвали в честь языка? Бюрократия.

Ранее торговая марка "JavaScript" с разрешения компании Sun Microsystems использовала префикс "Java", но впоследствии другая известная компания Oracle Corporation поглотила убыточную Sun. Нежелание первой сделать торговую марку общественным достоянием склонило комитет TC39 — Ecma Technical Committee 39 — к решению, чтобы для спецификации было установлено название ECMAScript.

An interesting fact...

Европейская ассоциация Ecma разрабатывает разные спецификации и по сей день не только для программирования, но и для разных других сфер в области коммуникаций. Например, там можно найти спецификацию языка программирования C# (ECMA-334), спецификацию синтаксиса JSON (ECMA-404) и другие.

Happy end

И с тех самых пор печально известный JavaScript развивался, согласно спецификации ECMAScript Language Specification. Он испытывал много взлётов и падений на протяжении долгих лет, а появление на свет грандиозной виртуальной машины V8 для Goggle Chrome с последующей заменой CrankShaft на связку "Ignition + TurboFun" снова и снова переворачивало всю веб-индустрию, что в итоге дало языку JavaScript золотой билет в счастливое будущее.

An interesting fact...

В 2008 году даже был выпущен веб-комикс на тему "Google on Google Chrome — comic book".

А что же сегодня?

В наши дни язык JavaScript всё так же реализует принципы, заложенные в спецификации ECMAScript. Это скриптовый, мультипарадигменный язык высоких, даже слишком высоких абстракций, что подтверждает большинство внутренних алгоритмов языка, где одна операция может рекурсивно вызывать множество вложенных неочевидных абстрактных операций (сущностей спецификации). Чтобы начать разбираться, как утроен язык JavaScript "под капотом", согласно стандарту, важно уметь различать, где есть JavaScript, а где — JavaScript host environment; где есть тип языка ECMAScript, а где — тип спецификации ECMAScript; где символы "!" или "?" учавствуют, как токены языка ECMAScript, а где — как сокращение для более "удобного" описания алгоритмов спецификации. То есть для начала необходимо понять, как она написана. Этому посвящена следующая глава.

Вот такой этот JavaScript "условно лёгкий".

Footnotes

  1. Название темы первой встречи в ECMA в рамках стандартизации JavaScript в составе только что присоединившегося к ECMA Брендана Эйха, представителей Microsoft и других.