@Dimon123
Новичок, разбираюсь в веб-программировании

Как работает интерпретатор javascript на пальцах?

Здравствуйте.
Для меня джаваскрипт - это один большой вопрос. Мне не понятно, как это все работает. В книгах очень много не договаривают. В книгах пишут о том, что джаваскрипт состоит из DOM, BOM , JavaScript. Что BOM - это система "готовых" объектов для работы с окном. Что DOM (лежит внутри BOM ) - это также система "готовых" объектов, но уже для работы с документом. Понятно только то, что BOM содержит DOM. Еще можно как-то представить объект window, как большую коробку, внутри которой много коробок, одна из которых называется DOM. Больше в книгах я ничего не нашел. А JavaScript как к ним примыкает? Пишется "джаваскрипт - это прослойка между BOM и DOM ". Не понимаю смысл слова "прослойка". Джаваскрипт в воздухе висеть просто не может, должна быть какая-то точка отсчета, какое-то "место крепления" языка джаваскрипт ко всей браузерной объектной модели. Плюс, весь джаваскрипт язык (а он наверно, огромный) же не запихивается в каждый объект window, память надо экономить. Получается, в документе встречаются "слова" языка джаваскрипт , а интерпретатор в заглядывает в сам "словарь" по языку джаваскрипт (который "где-то" в другом месте лежит), чтобы понять, что за "ключевое слово" переди ним.
Не понимаю, как работает интерпретатор. Одни догадки у меня только. Интрерпретатор не может "знать" джаваскрипт, ведь интерпретатор - это не человек. Получается, язык программирования джаваскрипт "где-то" лежит, интерпретатор его не знает и постоянно "туда" подглядывает, чтобы узнать "а что же значит конкретное ключевое слово". Аналогию можно придумать такую: человек не знает английский (этот человек- интерпретатор), читает текст и переводит (это мой документ), постоянно подглядывает в книгу по английскому и словарь (это место непонятное, где вся джавакриптовая база лежит), чтобы понять, что значит конкретное слово (ключевое слово) или предложение (инструкция). Я не знаю, правильная это аналогия или нет - другой не придумал. Интерпретатор - это тупо исполнитель кода. Он читает по строкам код, находит ключевые слова и заглядывает "куда-то в другое место, где сам язык описан" (в библиотеку какую-то или что-то похожее), чтобы прочитать, а что это за ключевое слово и что с ним делать? А что это за место "куда-то в другое место, где сам язык описан"? Ведь не будет же (аналогия), словарь английского прикрепляться к каждому тексту по английскому, словарей не напасешься, логичней было бы словарь "в стороне" держать и, когда надо, посматривать в него.
С HTML, CSS тот же вопрос. Интерпретатор тоже ведь читает документ сверху вниз и слева направо в поиске ключевых слов, потом заглядывает опять же "куда-то", чтобы понять, а что за ключевое слово перед ним и что с ним делать.
Столько много написал я потому, что не понимаю, как точно сформулировать вопрос. Потому что понимания полного нет. А когда не получается мысль оформить, приходится изворачиваться - аналогии придумывать, чтобы другие поняли, что ты хочешь.
В общем, вопросов больше, чем ответов. Буду благодарен, если кто-то мне объяснит на пальцах что к чему.
  • Вопрос задан
  • 15774 просмотра
Пригласить эксперта
Ответы на вопрос 3
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
Как говорят на w3cschools,
The Browser Object Model (BOM) allows JavaScript to "talk to" the browser.

Это такой мягкий намек на то, что вообще-то говоря Javascript может жить и вне браузера - на ум сразу приходит nodejs: там у вас изначально есть только консоль - ни о какой работе с HTML или браузером речи не идет. Можно сказать, что браузер предоставляет нам эдакое "дополнение" к тому, что знает интерпретатор о языке на момент исполнения кода. Реализаций интерпретаторов, разумеется, больше одной - если интересно какие сейчас в моде - можно посмотреть на википедии. Собственно в самом интерпретаторе и заложено то, что вы назвали "местом, где язык описан". А "описан" он там в соответствии со стандартом языка.

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

Возвращаясь к теме - если после ознакомления с вышеупомянутым парсером (который строит синтаксическое дерево) вы посмотрите на ваши BOM/DOM свежим взглядом, то заметите, что в то самое "дерево всего, что есть" браузер добавляет "дерево DOM" и "дерево BOM" с которыми вы, разумеется, можете работать - в коде они будут соответствовать объектам document и window. (звучит, конечно, немного грубо - но вы сами просили на пальцах). Для того, чтобы в этом убедиться, можно воспользоваться инструкцией по построению синтаксического дерева для Javascript
Ответ написан
@spotifi
Интрерпретатор не может "знать" джаваскрипт, ведь интерпретатор - это не человек. Получается, язык программирования джаваскрипт "где-то" лежит, интерпретатор его не знает и постоянно "туда" подглядывает, чтобы узнать "а что же значит конкретное ключевое слово".


https://habrahabr.ru/post/120516/
Ответ написан
kumaxim
@kumaxim
Web-программист
Dragon book объясняет как работает вообще любой транслятор/интерпритатор/компилятор. Объем достаточно неслабый(1100 страниц, кажется), плюс вменяемого русского перевода я пока не видел, но после ее прочтения можешь с легкостью написать как свой язык, так и достаточно быстро выучить любой другой.

P.S.: dragon book - гугли по этой фразе, один из аторов Аох, на обложке дракон с рыцарем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы