Как работают интерпретаторы / движки JavaScript? - PullRequest
6 голосов
/ 09 августа 2010

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

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

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

Я также посмотрел несколько видео от Google, посвященных оптимизации JavaScript, а также видео JavaScript: Good Parts. Они кратко затронули тему.

Спасибо

Ответы [ 2 ]

4 голосов
/ 17 апреля 2011

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

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

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

stackoverflow ref: Какова операционная семантика Gecko?

1 голос
/ 09 августа 2010

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

...