Все это началось, когда я искал способ проверить свою веб-страницу на соответствие JavaScript, например, HTML-валидатор W3C . Я еще не нашел один. Так дайте мне знать, если вы знаете что-нибудь ...
Я искал официальную страницу JavaScript и нашел скрипт ECMA . Эти люди стандартизировали язык сценариев (мне больше не хочется называть его JavaScript!) И назвали его ECMA-262 ( Википедия ). Их последняя работа - Выпуск 5.1
JavaScript был разработан корпорацией Mozilla, и их последняя стабильная версия - 1.8.5 ( см. Это ), основанная на версии 5.1 ECMA.
На странице Википедии есть ссылки на диалекты. JavaScript 1.8.5 в Mozilla указан как диалект наряду с JScript 9 (IE) и JavaScript (Chrome V8 [ Wiki ]) и многими другими. Должен ли я понять, что JavaScript 1.8.5 является производным от ECMA-262, а SpiderMonkey [ Wiki ] - это движок, который его запускает? И у Chrome есть свой собственный диалект, и двигатель V8 - программа, которая управляет этим?
Со всеми этими диалектами, основанными на ECMA-262, я больше не могу понять, что такое JavaScript ? Существуют ли действительно кросс-браузерные языки сценариев? Собираются ли различные исполнители, чтобы договориться о взаимной совместимости диалектов? Это усилие ECMA?
источник
Ответы:
Практически все зрелые языки определяются спецификацией, и компиляторы или интерпретаторы пытаются следовать стандарту, определенному в этой спецификации. Но очень редко они добиваются успеха, если стандарт не определен автором языка.
Вы можете найти стандарт C ++ 2003 , в C # 4 спецификации , в спецификации Java 7 и многое другое в Интернете. Многие из них имеют номера стандартизации ECMA или ISO. Это просто организации, в которых вы можете зарегистрировать стандарт и сделать его более официальным.
Исторически Ruby делал вещи немного по-другому, имея в качестве спецификации исполняемый набор тестов . Итак, если вы хотите написать интерпретатор и назвать его стандартным Ruby, вам просто нужно создать интерпретатор, который пройдет все эти тесты. Но даже Ruby в конечном итоге может стать более формальной спецификацией .
Javascript ничем не отличается, за исключением, возможно, в том, как он развивался.
Javascript был впервые создан Netscape. Они назвали его LiveScript, но он выглядел похожим на Java, и они заключили сделку с Sun по названию, что принесло пользу как маркетингу Netscape, так и Java. У Microsoft был VBScript и (по причинам, вероятно, ошибочным) предположительно скопировали Javascript, но имя принадлежало Sun, поэтому они нахально назвали его JScript.
Но JScript, хотя и очень похож на Javascript в синтаксисе, широко использовал COM - например, IE5 и 6 создают объект XMLHttpRequest с помощью
new ActiveXObject("Microsoft.XMLHTTP");
.И так, параллельно, похожие, но и разные "диалекты" Javascript родились. Со временем различные группы, владеющие браузерами с меньшей долей рынка, чем IE, пытались стандартизировать язык, и в течение многих лет Microsoft сопротивлялась. До V8.
V8 был быстрым. Это установило совершенно новый рыночный стандарт. Все остальное выглядело плохо.
И, благодаря различным антимонопольным делам против Microsoft, IE терял долю рынка. Внезапно в интересах Microsoft поддержать стандартизацию. Мы еще не там, но это на правильном пути.
В то же время, V8 был открытым исходным кодом, что позволило людям начать придумывать новые способы применения для быстрого Javascript синтаксического анализа, такие как Node.js .
Но вернемся к вашему вопросу: что такое Javascript? Это общее (и оригинальное) имя для ECMAScript, спецификация для прототипного языка, обычно, но не исключительно, используемая для навигации и манипулирования объектной моделью домена в браузере.
ECMA-262 - это просто стандартное определение, как ECMA-334 - это стандартное определение для C #. ECMAScript был единственным названием, с которым могли согласиться все заинтересованные стороны, еще в 1999 году, когда была написана ECMA-262.
источник
Javascript - это широко используемая реализация ECMAScript. Это очень похоже на семью Схемы . В схеме у вас есть сильно формализованная спецификация. Текущая версия - R6RS, хотя R5RS на данный момент является наиболее распространенным стандартом. Реализации более разбросаны, чем ECMAScript, из-за возраста Схемы и общих принципов.
Javascript в настоящее время широко распространен в значительной степени из-за взрывного роста доли рынка как Mozilla Firefox, так и Google Chrome. Первоначально он закрепился благодаря Netscape Navigator, который в итоге превратился в браузер Mozilla, а затем в Firefox (и Iceweasel, если вы работаете с толпой Scheme).
Теперь вот где это становится немного рискованным. Большая часть производительности Javascript зависит от синтаксического анализатора и его движка. Здесь реальные различия между браузерами становятся очевидными. Spidermonkey запускает Javascript иначе, чем V8. В Javascript все еще есть неровности, такие как отсутствие полностью общей библиотеки, хотя над этим и работают.
Поэтому, если бы Javascript был C ++, тогда ECMAScript был бы C ++ 11, где UNIX и G ++ были бы ближе всего к «стандартному», в то время как C ++ для .NET и Objective C ++ лежат дальше, чем ActionScript из ECMAScript.
источник