- PVSM.RU - https://www.pvsm.ru -

Новый этап в гонке скоростей JavaScript. Модуль OdinMonkey ускоряет низкоуровневый код в 10 раз

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

Asm.js позволяет в ряде случаев вплотную приблизиться к производительности нативного кода — программа на Си, скомпилированная в Asm.js, обычно работает всего вдвое медленнее оригинала:

Новый этап в гонке скоростей JavaScript. Модуль OdinMonkey ускоряет низкоуровневый код в 10 раз

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/