- PVSM.RU - https://www.pvsm.ru -
Модуль OdinMonkey — часть движка IonMonkey, отвечающая за оптимизацию и компиляцию низкоуровневого Asm.js — 21 марта был включён [1] в состав сборки Firefox Nightly. Что такое Asm.js? — это подмножество языка JavaScript, позволяющее программировать «на уровне ассемблера» — без динамической типизации и выделения памяти. В каком-то смысле Asm.js аналогичен технологии Google Native Client, только с обратной совместимостью — код, написанный по спецификации Asm.js, является корректным кодом JavaScript и будет выполняться на любом движке, только медленнее, чем при наличии OdinMonkey.
Asm.js позволяет в ряде случаев вплотную приблизиться к производительности нативного кода — программа на Си, скомпилированная в Asm.js, обычно работает всего вдвое медленнее оригинала:

Asm.js использует для указания типов редко используемые конструкции языка, наподобие "|0 [2]". Они подобраны так, чтобы не влиять на семантику выражений стандартного JavaScript, именно благодаря этому код Asm.js заработает в любом браузере уже сегодня, а завтра, если в нём появится поддержка «ассемблера JavaScript», просто начнёт выполняться раз в 10 быстрее. Вот пример кода на Asm.js:
function foo(x, y) {
var x = x|0; // x имеет тип int
var y = +y; // y имеет тип double
return +(x * y); // функция возвращает double
}
Стандарт Asm.js и модуль OdinMonkey прежде всего обязаны своим существованием Люку Вагнеру, автору Emscripten — популярного компилятора из LLVM в JavaScript, который не раз упоминался на Хабре [3]. Код, генерируемый этим компилятором, стал основой спецификации Asm.js. Кстати, ответы на часто задаваемые вопросы [4] про Asm.js недавно перевёл читатель Mithgol [5].
В данный момент OdinMonkey можно включить только в Firefox Nightly на платформах x86/x64 под десктопными ОС Windows и Linux, вскоре должна появиться поддержка MacOS X и ARM. Для включения надо установить флаг javascript.options.experimental_asmjs в about:config. Так как Asm.js в первую очередь предназначен для автоматической генерации компиляторами, писать на нём код вручную не слишком удобно. В будущем команда Mozilla рассчитывает добавить поддержку более эргономичного низкоуровневого синтаксиса, например на основе Low-Level JavaScript [6].
Чтобы поближе познакомиться с Asm.js, можно начать с этой презентации [7] и этой статьи [8]. А продолжить можно, изучая официальную спецификацию [9].
Автор: ilya42
Источник [10]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/30336
Ссылки в тексте:
[1] был включён: http://blog.mozilla.org/luke/2013/03/21/asm-js-in-firefox-nightly/
[2] |0: http://habrahabr.ru/post/172731/
[3] упоминался на Хабре: http://habrahabr.ru/search/?q=emscripten
[4] часто задаваемые вопросы: http://habrahabr.ru/post/171561/
[5] Mithgol: http://habrahabr.ru/users/mithgol/
[6] Low-Level JavaScript: http://lljs.org/
[7] этой презентации: http://kripken.github.com/mloc_emscripten_talk/#/
[8] этой статьи: http://www.2ality.com/2013/02/asm-js.html
[9] спецификацию: http://asmjs.org/spec/latest/
[10] Источник: http://habrahabr.ru/post/174175/
Нажмите здесь для печати.