Как Javascript переводится в байт-код?
Я не могу найти в Интернете информацию о том, как языки W3C компилируются в машинный код. Я знаю, что разрыв между сетью и процессором должен быть каким-то образом браузером, но как он работает и каковы этапы выполнения Javascript в процессоре?
Ссылки на научные документы также будут высоко оценены.
5 ответов
Это до реализации; спецификация - это полное описание языка и того, как он должен работать, реализации могут удовлетворять эту реализацию любым способом, который им нравится. Кажется, что некоторые реализации (извне) запускают его просто как интерпретатор в старом смысле; другие могут или не могут компилировать в байт-код; V8 компилируется в машинный код ( дважды, для горячих точек в приложении).
Команда V8 (V8 - движок JavaScript в Chromium и Chrome) периодически публикует описания того, как они получают фантастическую скорость от V8, которую они делают. Вы можете найти некоторые из них на сайте проекта и в блоге Chromium.
Естественно, вы также можете обойти код любой из реализаций с открытым исходным кодом. V8 и SpiderMonkey (движок Mozilla) - две основные программы с открытым исходным кодом, которые я знаю.
Это может помочь: http://www.ecma-international.org/publications/standards/Ecma-262.htm
Нет спецификации для перевода в байт-код (это зависит от разработчиков браузера), но есть спецификации о том, как должен вести себя язык
Для 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 он компилируется непосредственно в собственный код:
В дополнение к полезным, конкретным ответам, которые уже даны, фраза "адаптивная оптимизация", вероятно, стоит посмотреть, если производительность - ваш основной интерес. JavaScript и его интерпретаторы - это всего лишь последний пример систем, которым необходимо преобразовывать что-то еще в машинный код во время выполнения, поэтому существует множество более широкого чтения. Формы байт-кода Pascal, Smalltalk, Java и т. Д. Достаточно легко можно рассматривать как промежуточную форму в процессе запуска определенного языка на произвольном оборудовании - Apple SquirrelFish явно создает байт-код и использует для этого, например, JIT-компилятор.
Javascript (как следует из названия) - это динамический язык сценариев. Это означает, что этот код анализируется и выполняется во время выполнения движком Javascript веб-браузера.
Это зависит от Web-браузера, как он хочет иметь дело с Javascript. Некоторые могут генерировать промежуточный язык или байт-код. Некоторые могут непосредственно проанализировать и выполнить его.
Вот шаги к простейшему способу выполнения Javascript (синтаксический анализ и выполнение во время выполнения):
Chrome Javascript Engine компилирует Javascript в машинный код для конкретной платформы (для оптимальной производительности). Он также имеет механизм сборки мусора.