Вы уже описали, что это такое . Дело в том, что это низкоуровневый язык, который работает во всех браузерах, довольно быстрый в большинстве и очень быстрый в некоторых. То, что вы делаете из этого, так же открыто, как и любой другой язык программирования.
Сценарий использования Mozilla, по-видимому, наиболее заинтересован в следующем: уже есть способы компиляции языков с бэкэндами LLVM (особенно C и C ++) в JavaScript через Emscripten. asm.js очень близок к тому, что Emscripten уже испускает, поэтому это позволяет коду Emscripten (который уже впечатляюще быстр в современных JIT-компиляторах JavaScript) стать еще быстрее, продвигая цель переноса существующих баз кода в сеть. Опять же, для чего именно вы используете это ваше решение. Портирование игр - один из вариантов использования (в котором Mozilla, по-видимому, активно участвует), но на C и C ++ написано бесчисленное множество вещей, довольно много из которых могут пригодиться для чьего-либо веб-сайта. Некоторые из них, которые я видел, бросались (плюс некоторые из моих собственных разработок), без каких-либо гарантий относительно осуществимости:
- Портирование алгоритмов общего назначения (например, zlib, libjpeg, openssl, реализации FFT) для расширения возможностей JavaScript / веб-сайтов для выполнения большего, без необходимости создания нового веб-стандарта и в зависимости от отдельных браузеров для его реализации.
- Портирование интерпретаторов, так что в браузере могут работать языки, отличные от JavaScript, с меньшими издержками и минимальными усилиями по переносу.
- Использование asm.js в качестве бэкэнда для большего количества компиляторов, особенно тех, которые плохо отображаются на JavaScript и не нуждаются в большинстве его функций и накладных расходов. Примером может служить язык, предназначенный для быстрой числовой работы без выделения памяти.
- Использование asm.js для создания JIT в JavaScript. Он может реализовывать любой язык вообще - например, ActionScript .
- В том же духе портирование существующих JIT-компиляторов для запуска в браузере (см. Перенос интерпретаторов с фактически нулевыми накладными расходами по сравнению с JS). Это, вероятно, возможно только тогда, когда JIT-компиляторы генерируются автоматически, как в PyPy.
Представьте себе ASM.js как большой двоичный ArrayBuffer, называемый кучей и набором модулей JavaScript, которые начинаются с директивы пролога
"use asm";
и выполняют быстрые низкоуровневые операции с необработанными двоичными данными, аналогично языкам ассемблера. Эти модули могут быть написаны вручную или лучше скомпилированы из кода LLVM такими скриптами, как Emscripten. Их производительность может быть повышена благодаря движку Mozilla OdinMonkey, но они обратно совместимы с большинством современных интерпретаторов ECMAScript.ASM.js не ограничивается играми, вы даже можете запускать целые приложения Qt в своем браузере, как эти !
источник