2010-08-09 7 views
6

Мне интересно узнать, как работает интерпретатор JavaScript (движок, если хотите). Я знаю, что JavaScript не компилируется. Я просмотрел спецификацию ECMA, но не объясняет, как работает настоящий движок.Как работают интерпретаторы/двигатели JavaScript?

Основная причина, по которой я спрашиваю об этом, заключается в том, что я хотел бы понять, почему IE7 ведет себя несколько иначе, чем IE8 или Firefox 3.5+.

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

Я также просмотрел несколько видео с помощью google-переговоров по оптимизации JavaScript, а также видео JavaScript: Good Parts. Они коснулись этой темы вкратце.

Спасибо

+0

ECMA спецификация, как и во многих языках программирования спецификации, определяет синтаксис и семантику языка, а не реализации. Вот почему вы не увидите «объяснения» механизма Javascript. –

+0

Если вы докажете пример того, что видите, я могу объяснить, в чем разница и почему она изменилась. – chuckj

ответ

1

Если вы можете иметь дело с языками низкого уровня, посмотрите на источники V8 или TraceMonkey и исследовать их. Это немного сложный способ понять внутренности движков JavaScript, но это довольно интересно.

4

У меня точно такая же проблема - Execution Contexts в спецификации ECMA. действительно дает некоторые неясные! в поле зрения. Идиосинкразии, хотя и распространены среди версий одной платформы.

В целом, темы Automata, рекурсивной теории функций, формальной теории языка и дизайна компилятора обеспечивают прочный фон для «понимания» интерпретатора.

В абстракции, если семантика исчерпывающе определена, не требуя «неоднозначности», результаты формальной функции будут идентичны независимо от реализации. На практике есть много места для изгиба, о чем свидетельствуют дополнительные функции, такие как .toSource(), которые могут иметь один движок, а другой нет.

StackOverflow исй: What are Gecko's operational semantics?