Как Javascript переводится в байт-код? - PullRequest
16 голосов
/ 11 января 2012

Я не могу найти в Интернете информацию о том, как языки W3C компилируются в машинный код.Я знаю, что разрыв между сетью и процессором должен быть каким-то образом браузером, но как он работает и каковы шаги до выполнения Javascript в процессоре?.

Ответы [ 5 ]

20 голосов
/ 11 января 2012

Это до реализации; спецификация - это полное описание языка и того, как он должен работать, реализации могут удовлетворять эту реализацию любым способом, который им нравится.Кажется, что некоторые реализации (извне) запускают его просто как интерпретатор в старом смысле;другие могут или не могут компилировать в байт-код;V8 компилируется в машинный код ( дважды , для горячих точек в приложении).

Команда V8 (V8 - это движок JavaScript в Chromium и Chrome) периодически публикует описания того, как они получают фантастическийскорость из V8, что они делают.Некоторые из них можно найти на сайте проекта и в блоге Chromium .

Естественно, вы также можете обойти код любой из реализаций с открытым исходным кодом.,V8 и SpiderMonkey (движок Mozilla) - это две основные программы с открытым исходным кодом, которые я знаю.

4 голосов
/ 11 января 2012

Это может помочь: http://www.ecma -international.org / публикации / стандарты / Ecma-262.htm

Нет спецификации для перевода в байт-код (это зависит от разработчиков браузера), но есть спецификации о том, как должен вести себя язык

3 голосов
/ 11 октября 2014

Для 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

2 голосов
/ 11 января 2012

В дополнение к уже полученным полезным и конкретным ответам, возможно, стоит поискать фразу «адаптивная оптимизация», если ваш основной интерес - производительность.JavaScript и его интерпретаторы - это только последние экземпляры систем, которым нужно преобразовывать что-то еще в машинный код во время выполнения, поэтому существует множество более широкого чтения.Формы байт-кода Pascal, Smalltalk, Java и т. Д. Достаточно легко можно рассматривать как промежуточную форму в процессе запуска определенного языка на произвольном оборудовании - Apple SquirrelFish явно создает байт-код и использует JIT-компилятор начто, например.

2 голосов
/ 11 января 2012

Javascript (как следует из названия) - это динамический язык сценариев . Это означает, что этот код анализируется и выполняется во время выполнения движком Javascript веб-браузера.

Это зависит от Web-браузера, как он хочет иметь дело с Javascript. Некоторые могут генерировать промежуточный язык или байт-код. Некоторые могут непосредственно проанализировать и выполнить его.

Вот шаги к простейшему способу выполнения Javascript (синтаксический анализ и выполнение во время выполнения):

Разбор и предварительная обработка ( рекурсивный спуск или иным образом) Анализ Исполнение

Chrome Javascript Engine компилирует Javascript в машинный код для конкретной платформы (для оптимальной производительности). Также имеется механизм Сборка мусора .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...