asm.js — новый язык?
Нет, это просто подмножество JavaScript. Программа на asm.js одинаково поведёт себя и в существующих движках JavaScript, и в движке с предварительной
Какой выигрыш в производительности можно ожидать от asm.js?
Сейчас ещё рано утверждать. Однако наши предварительные измерения производительности программ, скомпилированных из Си в asm.js, показывают не более чем двукратное замедление по сравнению с компилированными в машинный код
Как я могу следить за ходом реализации?
Мозилла работает над первой реализацией оптимизирующего компилятора asm.js для SpiderMonkey. В вики Фонда Мозиллы также опубликован план разработки дальнейших выпусков и оптимизаций. Если авторы других движков JavaScript опубликуют собственные планы реализации компиляторов asm.js, мы их здесь упомянем.
Почему бы вам не разработать синтаксис байткода вместо необычного диалекта джаваскрипта?
Для компиляторов наподобие Emscripten
То обстоятельство, что asm.js — это JavaScript, не обернётся ли непредсказуемым выполнением кода?
Предварительная (ahead-of-time, AOT) компиляция asm.js может генерировать код, выполнение которого весьма предсказуемо, потому что валидный код asm.js ограничен крайне небольшим подмножеством JavaScript, состоящим только из строго типизированных целых чисел, чисел с плавающей точкою, арифметических операций, вызовов функций и обращения к куче.
Почему бы тогда не NaCl или PNaCl вместо этого? Вы просто упорствуете насчёт JavaScript?
Принципиальным достоинством asm.js по сравнению с новыми технологиями вроде NaCl и PNaCl является то, что asm.js работает сегодня: существующие движки JavaScript ужé неплохо оптимизируют код, написанный в таком стиле. Что означает, что разработчики могут выпускать код на asm.js сегодня, а со временем его работа будет ускоряться. Другою важною пользою является заметно бóльшая простота реализации, для которой потребуется совсем немного дополнительных механизмов поверх существующих движков JavaScript — и не понадобится слой совместимости API.
Почему бы тогда вместо этого не продолжать оптимизацию JIT-компиляторов JavaScript?
А и нет нужды останавливать её! Однако поведение
Разве не неэффективно — прогонять код через интерпретатор JavaScript, а затем через компилятор?
Пролог-директива позволяет движку JavaScript немедленно распознать код asm.js на этапе компиляции и немедленно переводить его на язык ассемблера. Такой код вообще не попадает в интерпретатор.
Какая обратная связь предусматривается для разработчиков на тот случай, если их код не проходит валидацию?
Пролог-директива указывает на намерение разработчика считать последующий код валидным asm.js. Если код не проходит валидацию, то об ошибке движок может сообщить разработчику, например, в отладочной консоли, или другими средствами.
Как разработчики могут отлаживать код asm.js?
В целом эта проблема ещё не решена по отношению к языкам, компилируемым для WWW. Карты исходного кода (source maps) могут помочь делу, но браузерам предстоит ещё много работы по улучшению процессов отладки компилированного кода.
Может ли asm.js служить виртуальной машиною для управляемых языков, наподобие JVM или CLR?
В настоящее время код asm.js не имеет прямого доступа к данным, подвергаемым сборке мусора: программа на asm.js может обращаться ко внешним данным лишь косвенно, по числовым идентификаторам их. В будущих версиях мы намерены внедрить сборку мусора и структурированные данные на основе API структурированных двоичных данных ES6, что повысит привлекательность asm.js в качестве средства выполнения управляемых языков.
Совместим ли asm.js с вызовами eval и Function? Можно ли динамически запускать компилятор asm.js?
Безусловно! Компиляция модуля asm.js происходит во время обработки его исходного кода. Если вы запустите эту обработку, вызвав eval
Сколь велики издержки, вызываемые временем компиляции asm.js?
Валидация и компиляция происходят довольно быстро, но всё же это приводит к некоторым издержкам, хотя и только по отношению к коду asm.js: если код JavaScript не содержит директивы-пролога asm.js, то не подвергается никакой дополнительной обработке. Если вы желаете избегнуть задержки, связанной с немедленной валидацией и компиляцией кода asm.js, то можете позже использовать eval
Может ли asm.js благотворно повлиять на время запуска приложений?
Мы планируем предложить дополнительные API, которые обеспечат веборазработчикам возможность компиляции asm.js в фоне, а также сохранение результатов компиляции в оффлайновое хранилище, что ускорит последующие начальные запуски приложения.
ссылка на оригинал статьи http://habrahabr.ru/post/171561/
Добавить комментарий