Что такое js?

Что вообще такое язык программирования?

Языком программирования называют правила (лексические, синтаксические и семантические), по которым записывается исходный код. В отличие от естественных языков, эти правила достаточно строги. Любая мельчайшая ошибка — и код не запустится, или запустится, но не заработает как ожидается. Например, в js нельзя написать const name;. Эти правила существуют не только в книгах и головах разработчиков, пишущих программы на этом языке. Они четко описаны в спецификации — документе, который диктует правила по которым должен работать язык.

Синтаксический корректный код это только половина дела. Он не может запускаться напрямую компьютером, так как это всего лишь текст. Компьютер умеет исполнять лишь машинный код (нули и единички). Для превращения исходного кода в машинный код, существуют два подхода. Компиляция – процесс создания программы, готовой к прямому запуску. Большинство программ, с которыми мы имеем дело как пользователи, кем-то скомпилированы. Например, в Windows скомпилированные программы имеют расширение exe. Другой подход – интерпретация. При интерпретации, превращение исходного кода в машинный происходит не до запуска программы, а прямо в процессе ее обработки. Именно поэтому сам подход называется интерпретацией.

JavaScript относится к интерпретируемым языкам. Для его запуска нужна специальная программа – интерпретатор. Например, когда JavaScript код выполняется на сервере, интерпретатором чаще всего выступает Node.js, когда на фронтенде — сам браузер. В других местах, таких как встраиваемые устройства или автомобили, могут быть свои собственные интерпретаторы.

В реальности все чуть сложнее. Непосредственно интерпретацию выполняет "движок", который встроен и в Node.js, и в браузеры.

// node запускает интерпретатор, который берет исходный код index.js,
// анализирует его (это называется парсинг),
// а затем построчно исполняет
$ node index.js

Глобально существует два больших класса языков – интерпретируемые и компилируемые. У каждой из этих групп есть свои плюсы и минусы, о которых можно почитать в разных статьях. Здесь же мы сосредоточимся на особенностях конкретно JavaScript.

Исторически, JavaScript разрабатывался под самый популярный, на тот момент, браузер. Новый язык позволял добавлять интерактивность на страницы, хотя изначально все сводилось к снежинкам и разным визуальным эффектам. Со временем, разработчики распробовали этот язык и стали активнее строить логику с его участием. Одним из самых известных поворотных моментов стало появление сервиса Gmail, который на полную катушку использовал Ajax (выполнение HTTP-запросов к серверу). JavaScript начинал играть все большую роль в создании сайтов и уже все браузеры озаботились его поддержкой. Для этого практически каждый крупный производитель браузера создавал свой собственный интерпретатор.

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

ECMAScript

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

ECMAScript не стоит на месте и постоянно развивается. Вот список основных версий:

  • es3
  • es5.1
  • strict mode
  • ECMAScript 2015 (es6)
  • es7 ?

Именование слегка странное, но так "исторически сложилось". Каждый новый стандарт описывает какие-то дополнительные возможности языка. Одни добавляют новый синтаксис, другие дополняют стандартную библиотеку новыми встроенными функциями. Стандарты, по большей части, обратно совместимы: то есть код, написанный под стандарт es3, запустится на большинстве интерпретаторов. К сожалению, это не всегда происходит без ошибок. Поведение кода со временем меняется, причем обычно в сторону более строгого поведения.

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

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


Дополнительные материалы

  1. ECMAScript Specification (ecma-262)
  2. V8 (интерпретатор)

Зарегистрироваться

или войти в аккаунт

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг».