HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Что вообще такое язык программирования?</p>
1 <p>Что вообще такое язык программирования?</p>
2 <p>Языком программирования называют правила, по которым записывается исходный код. В отличие от естественных языков, эти правила достаточно строги. Любая мельчайшая ошибка - и код не запустится. Или запустится, но не заработает, как ожидается. Например, в JavaScript нельзя написать const name;. Эти правила существуют не только в книгах и головах разработчиков, пишущих программы на этом языке. Они четко описаны в спецификации - документе, который диктует правила, по которым должен работать язык.</p>
2 <p>Языком программирования называют правила, по которым записывается исходный код. В отличие от естественных языков, эти правила достаточно строги. Любая мельчайшая ошибка - и код не запустится. Или запустится, но не заработает, как ожидается. Например, в JavaScript нельзя написать const name;. Эти правила существуют не только в книгах и головах разработчиков, пишущих программы на этом языке. Они четко описаны в спецификации - документе, который диктует правила, по которым должен работать язык.</p>
3 <p>Синтаксически корректный код - это только половина дела. Он не может запускаться напрямую компьютером, так как это всего лишь текст. Компьютер умеет исполнять лишь машинный код (нули и единички). Для превращения исходного кода в машинный код существуют два подхода. Компиляция - процесс создания программы, готовой к прямому запуску. Большинство программ, с которыми мы имеем дело как пользователи, кем-то скомпилированы. Например, в Windows скомпилированные программы имеют расширение<em>exe</em>. Другой подход - интерпретация. При интерпретации превращение исходного кода в машинный происходит не до запуска программы, а прямо в процессе ее обработки. Именно поэтому сам подход называется интерпретацией.</p>
3 <p>Синтаксически корректный код - это только половина дела. Он не может запускаться напрямую компьютером, так как это всего лишь текст. Компьютер умеет исполнять лишь машинный код (нули и единички). Для превращения исходного кода в машинный код существуют два подхода. Компиляция - процесс создания программы, готовой к прямому запуску. Большинство программ, с которыми мы имеем дело как пользователи, кем-то скомпилированы. Например, в Windows скомпилированные программы имеют расширение<em>exe</em>. Другой подход - интерпретация. При интерпретации превращение исходного кода в машинный происходит не до запуска программы, а прямо в процессе ее обработки. Именно поэтому сам подход называется интерпретацией.</p>
4 <p>JavaScript относится к интерпретируемым языкам. Для его запуска нужна специальная программа - интерпретатор. Например, когда JavaScript код выполняется на сервере, интерпретатором чаще всего выступает Node.js, когда на фронтенде - сам браузер. В других местах, таких как встраиваемые устройства или автомобили, могут быть свои собственные интерпретаторы.</p>
4 <p>JavaScript относится к интерпретируемым языкам. Для его запуска нужна специальная программа - интерпретатор. Например, когда JavaScript код выполняется на сервере, интерпретатором чаще всего выступает Node.js, когда на фронтенде - сам браузер. В других местах, таких как встраиваемые устройства или автомобили, могут быть свои собственные интерпретаторы.</p>
5 <p><em>В реальности все чуть сложнее. Непосредственно интерпретацию выполняет "движок", который встроен и в Node.js, и в браузеры.</em></p>
5 <p><em>В реальности все чуть сложнее. Непосредственно интерпретацию выполняет "движок", который встроен и в Node.js, и в браузеры.</em></p>
6 <p>Глобально существует два больших класса языков - интерпретируемые и компилируемые. У каждой из этих групп есть свои плюсы и минусы, о которых можно почитать в разных статьях. Здесь же мы сосредоточимся на особенностях конкретно JavaScript.</p>
6 <p>Глобально существует два больших класса языков - интерпретируемые и компилируемые. У каждой из этих групп есть свои плюсы и минусы, о которых можно почитать в разных статьях. Здесь же мы сосредоточимся на особенностях конкретно JavaScript.</p>
7 <p>Исторически JavaScript разрабатывался под самый популярный на тот момент браузер. Новый язык позволял добавлять интерактивность на страницы, хотя изначально все сводилось к снежинкам и разным визуальным эффектам. Со временем разработчики распробовали этот язык и стали активнее строить логику с его участием. Одним из самых известных поворотных моментов стало появление сервиса<a>Gmail</a>, который на полную катушку использовал AJAX (выполнение HTTP-запросов к серверу). JavaScript начинал играть все большую роль в создании сайтов, и уже все браузеры озадачивались его поддержкой. Для этого практически каждый крупный производитель браузера создавал свой собственный интерпретатор.</p>
7 <p>Исторически JavaScript разрабатывался под самый популярный на тот момент браузер. Новый язык позволял добавлять интерактивность на страницы, хотя изначально все сводилось к снежинкам и разным визуальным эффектам. Со временем разработчики распробовали этот язык и стали активнее строить логику с его участием. Одним из самых известных поворотных моментов стало появление сервиса<a>Gmail</a>, который на полную катушку использовал AJAX (выполнение HTTP-запросов к серверу). JavaScript начинал играть все большую роль в создании сайтов, и уже все браузеры озадачивались его поддержкой. Для этого практически каждый крупный производитель браузера создавал свой собственный интерпретатор.</p>
8 <p>Дальнейшее развитие технологии вывело JavaScript за пределы браузера. Сначала появилась серверная реализация Node.js, затем он стал использоваться даже во встраиваемых системах. Сейчас даже утюги можно программировать с помощью JavaScript.</p>
8 <p>Дальнейшее развитие технологии вывело JavaScript за пределы браузера. Сначала появилась серверная реализация Node.js, затем он стал использоваться даже во встраиваемых системах. Сейчас даже утюги можно программировать с помощью JavaScript.</p>
9 <h2>ECMAScript</h2>
9 <h2>ECMAScript</h2>
10 <p>Обилие разных интерпретаторов, с одной стороны, позволило JavaScript выйти далеко за пределы одного браузера, с другой - привело к проблемам совместимости. Один и тот же код мог вести себя по-разному в разных местах. Для решения этой проблемы был создан стандарт ECMAScript. Это большой и серьезный документ, описывающий устройство языка и поведение во всех возможных ситуациях. Он полезен не только для разработчиков языка, но и для обычных программистов. Когда что-то непонятно в поведении JavaScript, то ответ всегда можно найти в ECMAScript.</p>
10 <p>Обилие разных интерпретаторов, с одной стороны, позволило JavaScript выйти далеко за пределы одного браузера, с другой - привело к проблемам совместимости. Один и тот же код мог вести себя по-разному в разных местах. Для решения этой проблемы был создан стандарт ECMAScript. Это большой и серьезный документ, описывающий устройство языка и поведение во всех возможных ситуациях. Он полезен не только для разработчиков языка, но и для обычных программистов. Когда что-то непонятно в поведении JavaScript, то ответ всегда можно найти в ECMAScript.</p>
11 <p>ECMAScript не стоит на месте и постоянно развивается. Каждый новый стандарт описывает какие-то дополнительные возможности языка. Одни добавляют новый синтаксис, другие дополняют стандартную библиотеку новыми встроенными функциями. Стандарты по большей части обратно совместимы: то есть код, написанный под стандарт es3, запустится на большинстве интерпретаторов. К сожалению, это не всегда происходит без ошибок. Поведение кода со временем меняется, причем обычно в сторону более строгого поведения.</p>
11 <p>ECMAScript не стоит на месте и постоянно развивается. Каждый новый стандарт описывает какие-то дополнительные возможности языка. Одни добавляют новый синтаксис, другие дополняют стандартную библиотеку новыми встроенными функциями. Стандарты по большей части обратно совместимы: то есть код, написанный под стандарт es3, запустится на большинстве интерпретаторов. К сожалению, это не всегда происходит без ошибок. Поведение кода со временем меняется, причем обычно в сторону более строгого поведения.</p>
12 <p>Важно понимать, что наличие какой-то возможности в стандарте не гарантирует ее наличия во всех интерпретаторах. Это связано с тем, что спецификация и интерпретаторы живут отдельной жизнью. После обновления спецификации подтягиваются интерпретаторы - этот процесс занимает время. Нередко бывает и наоборот. Новая возможность сначала появляется в одном из интерпретаторов, а затем, набрав популярность, попадает в стандарт. Если запустить код, написанный под новый стандарт, на давно не обновлявшемся интерпретаторе, скорее всего он упадет с синтаксической ошибкой.</p>
12 <p>Важно понимать, что наличие какой-то возможности в стандарте не гарантирует ее наличия во всех интерпретаторах. Это связано с тем, что спецификация и интерпретаторы живут отдельной жизнью. После обновления спецификации подтягиваются интерпретаторы - этот процесс занимает время. Нередко бывает и наоборот. Новая возможность сначала появляется в одном из интерпретаторов, а затем, набрав популярность, попадает в стандарт. Если запустить код, написанный под новый стандарт, на давно не обновлявшемся интерпретаторе, скорее всего он упадет с синтаксической ошибкой.</p>
13 <p>Существуют сайты (<a>раз</a>и<a>два</a>), которые показывают наличие тех или иных возможностей в разных интерпретаторах. Разработчики пользуются ими, когда хотят узнать, насколько безопасно использовать новые возможности языка в их проектах.</p>
13 <p>Существуют сайты (<a>раз</a>и<a>два</a>), которые показывают наличие тех или иных возможностей в разных интерпретаторах. Разработчики пользуются ими, когда хотят узнать, насколько безопасно использовать новые возможности языка в их проектах.</p>