Язык ассемблера JavaScript


Mozilla очень серьезно относится к идее использования JavaScript в качестве современного языка ассемблера для кода браузера. Asm.js — это спецификация высокопроизводительного языка ассемблера JavaScript, а OdinMonkey — это движок, который запускает его очень быстро.

Компилятору не обязательно ориентироваться на машинный код низкого уровня. Например, компилятор Java создает байтовый код, который затем запускается с помощью виртуальной машины. JavaScript настолько распространен, что имеет смысл использовать его в качестве цели для компиляторов других языков, чтобы с их помощью можно было писать веб-приложения. Самый известный пример — это, вероятно, CoffeeScript, который компилируется в стандартный JavaScript. Однако CoffeeScript уже довольно близок к JavaScript, и компиляция — довольно простая задача.

Сложнее скомпилировать C ++ в JavaScript, что и делают компиляторы, такие как Emscripten или Mandreel. В настоящий момент эти компиляторы пытаются преобразовать C ++ в JavaScript, чтобы результат работал достаточно быстро. Гораздо лучшая идея — определить подмножество JavaScript, которое является полным в том смысле, что вы можете делать все, что вам нужно, используя его, но такое, которое можно реализовать эффективно.

В этом вся суть asm.js. Это подробная спецификация подмножества JavaScript. Обратите внимание: хотя это означает, что это не новый язык, есть новые функции, которые будут игнорироваться стандартным движком JavaScript. Например, в языке есть только строго типизированные целые числа, числа с плавающей запятой, арифметика, вызовы функций и доступ к куче. Это достигается с помощью аннотаций в форме комментариев и ограниченного набора операций, которые работают только с типом данных — например, логические операторы преобразуют числовые значения в int32.

Тот факт, что asm.js является подмножеством JavaScript, означает, что вы можете взять программу asm.js и запустить ее в стандартном немодифицированном браузере или движке JavaScript. Однако, чтобы получить реальную пользу от его использования, вам нужно, чтобы он запускался с использованием оптимизирующего движка JavaScript. Это вторая половина проекта. Mozilla работает над OdinMonkey, движком JavaScript, который распознает, когда в него загружена программа asm.js, и может применять автоматические оптимизации.

Целью OdinMonkey является запуск скомпилированного кода C ++ из Emscripten не хуже, чем вдвое меньшей скорости. Текущие тесты, кажется, доказывают, что это возможно. Вы также можете попробовать его, скомпилировав с помощью emscripten с переключателем ASM_JS = 1, а затем запустив его с помощью специальной сборки Firefox.

Нажмите, чтобы увеличить версию

Итак, объединяем идеи: компилируйте компиляторы из C ++ и других языков в asm.js и используйте оптимизированные движки JavaScript для запуска кода с почти нативной скоростью. Если в браузере нет оптимизированного движка, код все равно будет работать, потому что это просто JavaScript.

Еще неизвестно, воспользуются ли другие движки JavaScript asm.js. Альтернативой, конечно же, являются NaCL и PNaCL от Google, но, опять же, только один производитель браузеров поддерживает их. Придется подождать, пока они будут бороться.


Добавить комментарий