Как Javascript переводится на байт-код?
Я не могу найти информацию в Интернете о том, как языки W3C компилируются в машинный код. Я знаю, что разрыв между сетью и процессором должен быть каким-то образом браузером, но как это работает и каковы шаги до тех пор, пока Javascript не будет выполнен в процессоре?
Ссылки на научные документы также будут очень признательны.
Ответы
Ответ 1
Это до реализации; спецификация - это полное описание языка и то, как он должен работать, реализации могут свободно удовлетворить эту реализацию любым способом. Некоторые реализации кажутся (извне), чтобы запустить его исключительно как интерпретатор в старом смысле; другие могут или не могут компилироваться в байт-код; V8 компилируется в машинный код (дважды, для горячих точек в приложении).
Команда V8 (V8, являющаяся движком JavaScript в Chromium и Chrome) периодически публикует описания того, как они получают фантастическую скорость из V8, что они делают. Вы можете найти некоторые из них на сайте проекта и блоге Chromium.
Естественно, вы также можете использовать код любой из версий с открытым исходным кодом. V8 и SpiderMonkey (движок Mozilla) - это две основные версии с открытым исходным кодом, которые я знаю.
Ответ 2
Это может помочь: http://www.ecma-international.org/publications/standards/Ecma-262.htm
Существует нет спецификации для перевода в байт-код (это зависит от разработчиков браузера), но есть спецификации о том, как должен вести себя язык
Ответ 3
Для Firefox есть некоторые спецификации на своих байткодах:
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Bytecodes
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals/Bytecode
Для V8 он скомпилирован непосредственно на собственный код:
http://jayconrod.com/posts/51/a-tour-of-v8-full-compiler
Ответ 4
Javascript (как следует из названия) - динамический язык сценариев. Это означает, что код анализируется и выполняется во время выполнения с помощью механизма Javascript для веб-браузера.
Это зависит от веб-браузера, как он хочет иметь дело с Javascript. Некоторые могут генерировать промежуточный язык или байт-код. Некоторые могут непосредственно анализировать и выполнять его.
Вот шаги к простейшему способу выполнения Javascript (синтаксический анализ и выполнение во время выполнения):
Анализ и предварительная обработка (рекурсивный спуск или иначе)
Анализ
Выполнение
Chrome Javascript Engine компилирует Javascript на собственный машинный код для конкретной платформы (для оптимальной производительности). Он также имеет Сбор мусора Механизм.
Ответ 5
В дополнение к полезным, конкретным ответам, уже упомянутым, фраза "адаптивная оптимизация", вероятно, стоит посмотреть, если ваша работа представляет интерес. JavaScript и его интерпретаторы - это всего лишь последний экземпляр систем, которым необходимо перевести что-то еще в машинный код во время выполнения, поэтому там будет много более широкого чтения. Байт-коды Pascal, Smalltalk, Java и т.д. Могут быть достаточно легко рассмотрены как промежуточная форма в процессе запуска определенного языка на произвольном аппаратном обеспечении - Apple SquirrelFish явно создает байт-код и использует, например, JIT-компилятор.