В чем разница между asm.js и WebAssembly?

Я недавно читал об asm.js и WebAssembly:

http://ejohn.org/blog/asmjs-javascript-compile-target /

https://brendaneich.com/2015/06/from -asm-JS-к-webassembly /

Я все еще запутался в нескольких вещах:

  1. Код asm.js скомпилирован во время и запущен? Скомпилировано во что?
  2. Кроме asm.js, являющегося текстом, а wasm (веб-сборка) - двоичным, чем отличаются эти два?
  3. Что это значит для других языков сценариев, работающих в браузере? Возьмите Python, например, это будет
    • код Python, скомпилированный в wasm? или
    • интерпретатор python (Cpython), скомпилированный в wasm и интерпретирующий python?
75 голосов | спросил NeoWang 19 J000000Sunday15 2015, 18:00:44

3 ответа


0
  

Является ли код asm.js скомпилированным во время и запущенным? Скомпилировано во что?

asm.js - это обычный код javascript, который всегда компилируется в байт-код интерпретатором JS. Тем не менее, интерпретатор с поддержкой asm должен выполнять преждевременную компиляцию и, возможно, генерировать более эффективное представление кода из-за статической типизации. Подробности смотрите в http://asmjs.org/.

  

В чем различия между asm и wasm (кроме текста и двоичного кода)?

Пока нет. wasm должен быть обратно-совместимым, компилироваться в asm (который снова исполняется как обычный JS ). Однако он может быть расширен с помощью дополнительных функций в будущем по мере роста его поддержки.

  

Что это значит для других языков сценариев, работающих в браузере?

Последнее, скорее всего, так как Python все еще нуждается в интерпретации. Языки сценариев, которые не нуждаются в интерпретаторе, могут, конечно, быть напрямую скомпилированы в (w) asm, учитывая, что есть компилятор (цепочка), который поддерживает его как цель.

ответил Bergi 19 J000000Sunday15 2015, 18:26:58
0

asm.js - это подмножество JS с «высокооптимизируемыми» инструкциями. По сути, вы можете объявить тип (int, float), и движок js (в браузерах, но также и в node.js) будет выполнять инструкции быстрее. Это имеет преимущества, если ваше приложение выполняет много вычислений или графики, если используется вместе с WebGL.

веб-сборка - это двоичный формат для JS, все JS, а не только asm.js. Это не байт-код, это двоичная кодировка AST, которую вычисляет анализатор. У этого есть 2 больших преимущества:

  • движок JS может пропустить этап разбора
  • это намного более компактно, чем исходный код JS

Мы уже можем написать код для браузеров, который не является JS: EMSCripten может компилировать код C ++ в коде JS. Другие транскомпиляторы уже доступны для компиляции вашего кода в JS. Используя asm.js, этот код может выполняться быстрее, когда он выполняет математические операции. При использовании веб-сборки этот код будет более компактным, и браузер сможет обрабатывать его быстрее (поскольку он сможет пропустить синтаксический анализ). У вас не будет нового плагина для загрузки, такого как DirectX, JavaApplets, Flash или Silverlight, потому что все будет работать в песочнице JS.

ответил cristian v 13 PM00000060000000831 2015, 18:02:08
0
  

Является ли код asm.js скомпилированным во время и запущенным? Скомпилировано во что?

Различные браузеры компилируют код asm.js по-разному. По состоянию на август 2015 года:

  • Firefox компилирует asm.js в машинный код (и кэширует машинный код для будущих загрузок того же asm.js) [ 1 ].
  • В Windows 10 в качестве экспериментального флага Edge также выполнит некоторую опережающую проверку и компиляцию asm.js [ 2 ].
  • Chrome специально распознает директиву «использовать asm» в начале asm.js для более быстрого анализа и анализа кода и настройки эвристики компиляции.
  • Safari не выполняет специальной обработки asm.js.
  

Кроме asm.js, являющегося текстом, а wasm (веб-сборка) - двоичным, чем отличаются эти два?

asm.js - это просто JavaScript, поэтому он должен вести себя точно в соответствии со спецификацией JavaScript. В качестве нового стандарта WebAssembly способна исправить некоторые угловые случаи, когда поведение JavaScript не является идеальным (с точки зрения производительности или компиляции) [ 3 ]. В будущем [ 4 ] WebAssembly сможет добавлять функции, которые иначе было бы трудно выразить в JavaScript.

  

Что это значит для других языков сценариев, работающих в   браузер? Возьмите, например, python, это будет

     
  • код Python, скомпилированный в wasm? или
  •   
  • интерпретатор python (Cpython), скомпилированный в wasm и интерпретирующий python?
  •   

В v.1 самый простой способ запустить Python в браузере - это, как вы сказали, скомпилировать интерпретатор Python для wasm. Это означает, например, что Python GC работает в коде wasm и вручную управляет линейной памятью wasm. Уже были экспериментальные проекты по добавлению серверной части asm.js в PyPy [ 5 ] (что также может сработать для wasm). В настоящее время он сталкивается с ограничениями asm.js, которые могут быть устранены динамическое связывание будущей функции из wasm. В дальнейшем, wasm стремится обеспечить как интеграцию ГХ , так и Поддержка компиляции JIT оба из которых позволили бы более эффективную и естественную интеграцию с веб-платформой.

ответил Luke 20 J000000Monday15 2015, 09:37:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132