Подтвердить что ты не робот

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

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

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

https://brendaneich.com/2015/06/from-asm-js-to-webassembly/

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

  1. Является ли код asm.js скомпилированным во время и выполненным Скомпилировано во что?
  2. Кроме asm.js, являющегося текстом и wasm (веб-сборка), являющегося двоичным, каковы различия между двумя?
  3. Что это значит для других языков сценариев, работающих в браузере? Возьмите Python, например, это будет
    • код Python, скомпилированный в wasm? или же
    • интерпретатор Python (Cpython) скомпилирован в wasm и интерпретировать Python?
4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

веб-сборка - это двоичный формат для JS, все JS, а не только asm.js. Это не байт-код, это двоичное кодирование АСТ, которое вычисляет парсер. Он имеет 2 больших преимущества:

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

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

Ответ 3

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

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

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

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

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

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

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

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

Ответ 4

Таким образом, разработчикам не нужно выбирать между WebAssembly и JavaScript для своих приложений. Несмотря на это, мы ожидаем, что инженеры обменяют части своего кода JavaScript для WebAssembly. введите описание ссылки здесь