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



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



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



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



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




  1. это asm.JS-код, компиляции во времени и работать? Скомпилированы во что?

  2. другое, чем АСМ.JS в текстовом и былм (веб-узел) быть бинарными, какие различия между 2?

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


    • код python скомпилирован в wasm? или

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



338   3  

3 ответов:

- это asm.JS-код, компиляции во времени и работать? Скомпилированы во что?

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

каковы различия между asm и wasm (кроме text vs binary)?

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

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

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

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

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

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

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

- это 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 работает в коде wasm и вручную управляет линейной памятью wasm. Там уже были экспериментальные проекты, чтобы добавить asm.JS backend to PyPy [5] (что может работать так же хорошо для wasm). В настоящее время он сталкивается с ограничениями asm.js, которые могут быть решены с помощью динамическое связывание будущей функции из wasm. Идя дальше, wasm стремится обеспечить оба интеграция GC и поддержка компиляции JIT оба из которых позволили бы более эффективную и естественную интеграцию с веб-платформой.

Comments

    Ничего не найдено.