Skip to content

Instantly share code, notes, and snippets.

@abc0990cba
Forked from MaxGraey/Wasm-FAQ-2019.md
Created January 19, 2024 22:26
Show Gist options
  • Select an option

  • Save abc0990cba/e1c29c75c89a514f38c3e7663ff6a2cc to your computer and use it in GitHub Desktop.

Select an option

Save abc0990cba/e1c29c75c89a514f38c3e7663ff6a2cc to your computer and use it in GitHub Desktop.

Revisions

  1. @MaxGraey MaxGraey revised this gist Jul 28, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@

    # UPD FAQ мигрировал на https://github.com/WebAssembly-Enthusiasts/info/blob/master/FAQ/ru.md
    ## FAQ мигрировал на https://github.com/WebAssembly-Enthusiasts/info/blob/master/FAQ/ru.md

    ### Введение
    Данный FAQ был специально создан для телеграм сообщества https://t.me/WebAssembly_ru.
  2. @MaxGraey MaxGraey revised this gist Jul 28, 2020. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,6 @@

    # UPD FAQ мигрировал на https://github.com/WebAssembly-Enthusiasts/info/blob/master/FAQ/ru.md

    ### Введение
    Данный FAQ был специально создан для телеграм сообщества https://t.me/WebAssembly_ru.

  3. @MaxGraey MaxGraey revised this gist Jul 26, 2020. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -76,7 +76,7 @@ Java-апплеты (через JNI).
    Это уже стало давно проблематично даже для JavaScript, с тех пор как все начали использовать минификаторы и обфускаторы.
    Тем не менее, большинство браузеров сейчас умеют отображать wasm-модули в текстовом представлении, что порой куда более
    понятней, чем минифицированный и обфусцированный JavaScript-код. Кроме того, браузеры и инструменты сборки давно уже
    поддерживают source maps для WebAssembly и ведуться работы над поддержкой [DWARF](https://en.wikipedia.org/wiki/DWARF) секций что позволит делать полноценную символьную отладку.
    поддерживают source maps для WebAssembly и ведутся работы над поддержкой [DWARF](https://en.wikipedia.org/wiki/DWARF) секций что позволит делать полноценную символьную отладку.

    ### 9. WebAssembly это раздолье для криптомайнеров? Могу ли я запретить WebAssembly в своем браузере?

    @@ -159,6 +159,6 @@ WASI (WebAssembly System Interface) - это проект ABI от Mozilla, ко


    #### Автор
    - Max Graey @ 2019
    - Max Graey @ 2020
    - Telegram: @maxgraey
    - Twitter: https://twitter.com/MaxGraey
  4. @MaxGraey MaxGraey revised this gist Jun 3, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -149,6 +149,7 @@ WASI (WebAssembly System Interface) - это проект ABI от Mozilla, ко

    - https://webassembly.github.io/spec/core
    - https://github.com/WebAssembly/proposals
    - https://github.com/mbasso/awesome-wasm
    - https://github.com/appcypher/awesome-wasm-langs#awesome-webassembly-languages-
    - https://github.com/appcypher/awesome-wasm-runtimes#awesome-webassembly-runtimes-
    - https://hacks.mozilla.org/author/lclarkmozilla-com
  5. @MaxGraey MaxGraey revised this gist May 30, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -127,7 +127,7 @@ JavaScript налагает дополнительные расходы. В по
    поддерживает (пока только Chrome) атомарные инструкции и потоки, работающие с
    разделяемой памятью [SharedArrayBuffer](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer);
    - от того, как часто вы вызываете методы хоста (Web API) из под WebAssembly или экспортируемые методы wasm на стороне хоста;
    - и наконец, от [скорости оптимизирующих JIT-компиляторов](https://00f.net/2019/10/22/updated-webassembly-benchmark/) самих виртуальных машин.
    - и наконец, от [скорости оптимизирующих AOT/JIT-компиляторов](https://00f.net/2019/10/22/updated-webassembly-benchmark/) самих виртуальных машин.

    ### 14. Что такое WASI?

  6. @MaxGraey MaxGraey revised this gist May 30, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -124,7 +124,7 @@ JavaScript налагает дополнительные расходы. В по
    - от текущих задач, которые вы стремитесь решить. Как мы уже выяснили манипуляции с DOM у WebAssembly явно не будут быстрее.
    Зато игры, криптография, эмуляторы, CAD-системы, DSP, кодирование/декодирование мультимедиа определенно да!
    Особенно если учесть, что в будущем WebAssembly будет поддерживать SIMD-комманды недоступные для JavaScript и уже
    поддерживает (но только для Chrome под флагом) атомарные инструкции и потоки, работающие с
    поддерживает (пока только Chrome) атомарные инструкции и потоки, работающие с
    разделяемой памятью [SharedArrayBuffer](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer);
    - от того, как часто вы вызываете методы хоста (Web API) из под WebAssembly или экспортируемые методы wasm на стороне хоста;
    - и наконец, от [скорости оптимизирующих JIT-компиляторов](https://00f.net/2019/10/22/updated-webassembly-benchmark/) самих виртуальных машин.
  7. @MaxGraey MaxGraey revised this gist May 9, 2020. 1 changed file with 8 additions and 8 deletions.
    16 changes: 8 additions & 8 deletions Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -147,14 +147,14 @@ WASI (WebAssembly System Interface) - это проект ABI от Mozilla, ко

    #### Полезные ресурсы

    1. https://webassembly.github.io/spec/core
    2. https://github.com/WebAssembly/proposals
    3. https://github.com/appcypher/awesome-wasm-langs#awesome-webassembly-languages-
    4. https://github.com/appcypher/awesome-wasm-runtimes#awesome-webassembly-runtimes-
    5. https://hacks.mozilla.org/author/lclarkmozilla-com
    6. https://madewithwebassembly.com
    7. https://wasmbyexample.dev
    8. https://webassembly.studio
    - https://webassembly.github.io/spec/core
    - https://github.com/WebAssembly/proposals
    - https://github.com/appcypher/awesome-wasm-langs#awesome-webassembly-languages-
    - https://github.com/appcypher/awesome-wasm-runtimes#awesome-webassembly-runtimes-
    - https://hacks.mozilla.org/author/lclarkmozilla-com
    - https://madewithwebassembly.com
    - https://wasmbyexample.dev
    - https://webassembly.studio


    #### Автор
  8. @MaxGraey MaxGraey revised this gist May 9, 2020. 1 changed file with 7 additions and 4 deletions.
    11 changes: 7 additions & 4 deletions Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -149,10 +149,13 @@ WASI (WebAssembly System Interface) - это проект ABI от Mozilla, ко

    1. https://webassembly.github.io/spec/core
    2. https://github.com/WebAssembly/proposals
    3. https://hacks.mozilla.org/author/lclarkmozilla-com
    4. https://madewithwebassembly.com
    5. https://wasmbyexample.dev
    6. https://webassembly.studio
    3. https://github.com/appcypher/awesome-wasm-langs#awesome-webassembly-languages-
    4. https://github.com/appcypher/awesome-wasm-runtimes#awesome-webassembly-runtimes-
    5. https://hacks.mozilla.org/author/lclarkmozilla-com
    6. https://madewithwebassembly.com
    7. https://wasmbyexample.dev
    8. https://webassembly.studio


    #### Автор
    - Max Graey @ 2019
  9. @MaxGraey MaxGraey revised this gist May 9, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -152,6 +152,7 @@ WASI (WebAssembly System Interface) - это проект ABI от Mozilla, ко
    3. https://hacks.mozilla.org/author/lclarkmozilla-com
    4. https://madewithwebassembly.com
    5. https://wasmbyexample.dev
    6. https://webassembly.studio

    #### Автор
    - Max Graey @ 2019
  10. @MaxGraey MaxGraey revised this gist May 9, 2020. 1 changed file with 8 additions and 0 deletions.
    8 changes: 8 additions & 0 deletions Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -145,6 +145,14 @@ WASI (WebAssembly System Interface) - это проект ABI от Mozilla, ко

    Будем надеяться и WebAssembly постигнет такой же успех!

    #### Полезные ресурсы

    1. https://webassembly.github.io/spec/core
    2. https://github.com/WebAssembly/proposals
    3. https://hacks.mozilla.org/author/lclarkmozilla-com
    4. https://madewithwebassembly.com
    5. https://wasmbyexample.dev

    #### Автор
    - Max Graey @ 2019
    - Telegram: @maxgraey
  11. @MaxGraey MaxGraey revised this gist Mar 13, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -48,7 +48,7 @@ Java-апплеты (через JNI).
    ### 5. Могу ли я вызывать tcp-сокеты/операции ввода-вывода/DOM/WebGL и другие API браузера или ОС из под WebAssembly напрямую?

    **Нет!** WebAssembly работает внутри изолированной программной среды браузера или другой VM и может получать доступ только к
    веб-API (так же, как и в JavaScript). Однако emscripten SDK (C++) и web-sys (Rust) предоставляют обертки для многих
    веб-API только косвенно через JavaScript. Однако emscripten SDK (C++) и web-sys (Rust) предоставляют обертки для многих
    распространенных API, что упрощает перенос существующего кода C / C++ / Rust (например, конвертировать TcpSockets-в-WebSockets, OpenGL-в-WebGL, OpenAL-в-WebAudio и т.д.). В дальнейшем, когда будет реализован [interface-types (webidl-bindings) proposal](https://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/Explainer.md) всеми браузерами,
    всего вышеперечисленного не потребуется, и можно будет обращаться непосредственно к Web API или любому другому
    интерфейсу (в случае со standalone VM) непосредственно через WebIDL а так же [WASI](https://gist.github.com/MaxGraey/326b1c04d66de3beb247c2c1e6358fd0#14-%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-wasi) интерфейс.
  12. @MaxGraey MaxGraey revised this gist Feb 7, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -127,7 +127,7 @@ JavaScript налагает дополнительные расходы. В по
    поддерживает (но только для Chrome под флагом) атомарные инструкции и потоки, работающие с
    разделяемой памятью [SharedArrayBuffer](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer);
    - от того, как часто вы вызываете методы хоста (Web API) из под WebAssembly или экспортируемые методы wasm на стороне хоста;
    - и наконец, от скорости оптимизирующих JIT-компиляторов самих виртуальных машин.
    - и наконец, от [скорости оптимизирующих JIT-компиляторов](https://00f.net/2019/10/22/updated-webassembly-benchmark/) самих виртуальных машин.

    ### 14. Что такое WASI?

  13. @MaxGraey MaxGraey revised this gist Feb 7, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -76,7 +76,7 @@ Java-апплеты (через JNI).
    Это уже стало давно проблематично даже для JavaScript, с тех пор как все начали использовать минификаторы и обфускаторы.
    Тем не менее, большинство браузеров сейчас умеют отображать wasm-модули в текстовом представлении, что порой куда более
    понятней, чем минифицированный и обфусцированный JavaScript-код. Кроме того, браузеры и инструменты сборки давно уже
    поддерживают source maps для WebAssembly.
    поддерживают source maps для WebAssembly и ведуться работы над поддержкой [DWARF](https://en.wikipedia.org/wiki/DWARF) секций что позволит делать полноценную символьную отладку.

    ### 9. WebAssembly это раздолье для криптомайнеров? Могу ли я запретить WebAssembly в своем браузере?

  14. @MaxGraey MaxGraey revised this gist Feb 4, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -107,7 +107,7 @@ JavaScript налагает дополнительные расходы. В по
    затраты на сериализацию и десереализацию в случае со структурами или объектами.

    Может возникнуть очень заманчивая идея создать свою реактивную библиотеку работы с DOM (или реализовать лишь diff-алгоритм
    для Virtual DOM) например для Rust, С++ или Go. Не делайте этого! По крайней мере пока. Как показывает опыт таких
    для Virtual DOM) например для Rust, С++ или Go. [Не делайте этого](https://stackoverflow.com/questions/59015066/using-rustwebassembly-for-web-development-how-to-solve-the-extra-cost-of-wasm)! По крайней мере пока. Как показывает опыт таких
    экспериментальных библиотек как yew и asm-dom это зачастую медленее даже самых медлительных JavaScript-библиотек или
    фреймворков, не говоря уже о непосредственной работе с vanilla DOM без дополнительных абстракций.

  15. @MaxGraey MaxGraey revised this gist Oct 9, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -8,7 +8,7 @@
    ### 0. Какие цели у WebAssembly?

    - Определение переносимого двоичного формата с эффективным размером и временем загрузки, который будет служить целью компиляции и выполняться с предсказуемой скоростью и детерменированным поведением в рамках среды выполнения;
    - Позволять портирование и исполнение в web уже имеющегося кода отличного от JavaScript;
    - Позволить портирование и исполнение в web уже имеющегося кода отличного от JavaScript;
    - При всем этом не нарушая целостности уже существующей веб-экосистемы.

    ### 1. WebAssembly это нативный код CPU?
  16. @MaxGraey MaxGraey revised this gist Oct 9, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,7 @@

    ### 0. Какие цели у WebAssembly?

    - Определение переносимого двоичного формата с эффективным размером и временем загрузки, который будет служить целью компиляции и выполняться с предсказуемой скоростью;
    - Определение переносимого двоичного формата с эффективным размером и временем загрузки, который будет служить целью компиляции и выполняться с предсказуемой скоростью и детерменированным поведением в рамках среды выполнения;
    - Позволять портирование и исполнение в web уже имеющегося кода отличного от JavaScript;
    - При всем этом не нарушая целостности уже существующей веб-экосистемы.

  17. @MaxGraey MaxGraey revised this gist Aug 21, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -49,7 +49,7 @@ Java-апплеты (через JNI).

    **Нет!** WebAssembly работает внутри изолированной программной среды браузера или другой VM и может получать доступ только к
    веб-API (так же, как и в JavaScript). Однако emscripten SDK (C++) и web-sys (Rust) предоставляют обертки для многих
    распространенных API, что упрощает перенос существующего кода C / C++ / Rust (например, конвертировать TcpSockets-в-WebSockets, OpenGL-в-WebGL, OpenAL-в-WebAudio и т.д.). В дальнейшем, когда будет реализован [webidl-bindings proposal](https://github.com/WebAssembly/webidl-bindings/blob/master/proposals/webidl-bindings/Explainer.md) всеми браузерами,
    распространенных API, что упрощает перенос существующего кода C / C++ / Rust (например, конвертировать TcpSockets-в-WebSockets, OpenGL-в-WebGL, OpenAL-в-WebAudio и т.д.). В дальнейшем, когда будет реализован [interface-types (webidl-bindings) proposal](https://github.com/WebAssembly/interface-types/blob/master/proposals/interface-types/Explainer.md) всеми браузерами,
    всего вышеперечисленного не потребуется, и можно будет обращаться непосредственно к Web API или любому другому
    интерфейсу (в случае со standalone VM) непосредственно через WebIDL а так же [WASI](https://gist.github.com/MaxGraey/326b1c04d66de3beb247c2c1e6358fd0#14-%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-wasi) интерфейс.

  18. @MaxGraey MaxGraey revised this gist Aug 3, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -55,7 +55,7 @@ Java-апплеты (через JNI).

    ### 6. Могу ли я загрузить или создать нативную DLL-библиотеку в WebAssembly?

    **Нет!** Динамические библиотеки, которые используются в операционной системе являются машинным кодом и, следовательно, не будут работать (без эмуляции соответсвуюшего процессора). Стоит так же заметить, что Blazor, может действительно создавать файлы с расширением `.dll` в браузере, но это CIL-библиотеки Mono-рантайма.
    **Нет!** Динамические библиотеки, которые используются в операционной системе являются машинным кодом и, следовательно, не будут работать (без эмуляции соответсвуюшего процессора). Стоит так же заметить, что Blazor, может действительно загружать файлы с расширением `.dll` в браузере, но это CIL-библиотеки Mono-рантайма которые выполняются в режиме интерпретации.

    В то же время WebAssembly будет поддерживать динамическую линковку между Wasm-модулями, что позволит повторно
    использовать модули совместно используемого кода (идея состоит в том, чтобы уменьшить размер загрузки, перемещая общий код в
  19. @MaxGraey MaxGraey revised this gist Jun 3, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -49,7 +49,7 @@ Java-апплеты (через JNI).

    **Нет!** WebAssembly работает внутри изолированной программной среды браузера или другой VM и может получать доступ только к
    веб-API (так же, как и в JavaScript). Однако emscripten SDK (C++) и web-sys (Rust) предоставляют обертки для многих
    распространенных API, что упрощает перенос существующего кода C / C++ / Rust (например, конвертировать TcpSockets-в-WebSockets, OpenGL-в-WebGL, OpenAL-в-WebAudio и т.д.). В дальнейшем, когда будет реализован [host-binding proposal](https://github.com/WebAssembly/host-bindings/blob/master/proposals/host-bindings/Overview.md) всеми браузерами,
    распространенных API, что упрощает перенос существующего кода C / C++ / Rust (например, конвертировать TcpSockets-в-WebSockets, OpenGL-в-WebGL, OpenAL-в-WebAudio и т.д.). В дальнейшем, когда будет реализован [webidl-bindings proposal](https://github.com/WebAssembly/webidl-bindings/blob/master/proposals/webidl-bindings/Explainer.md) всеми браузерами,
    всего вышеперечисленного не потребуется, и можно будет обращаться непосредственно к Web API или любому другому
    интерфейсу (в случае со standalone VM) непосредственно через WebIDL а так же [WASI](https://gist.github.com/MaxGraey/326b1c04d66de3beb247c2c1e6358fd0#14-%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-wasi) интерфейс.

  20. @MaxGraey MaxGraey revised this gist May 29, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -133,7 +133,7 @@ JavaScript налагает дополнительные расходы. В по

    Префикс "Web" в названии WebAssembly может навести на мысль, что эта технология создавалась исключительно для веба, но это не так. На данный момент уже существует огромное множество [standalone рантаймов для WebAssembly](https://github.com/appcypher/awesome-wasm-runtimes#webassembly-runtimes) способные исполнять wasm не в самом браузере а непосредственно в ОС или в нативном приложении.

    WASI (WebAssembly System Interface) - это проект ABI от Mozilla, который определяет стандартизированный интерфейс взаимодействия ОС с wasm-модулем (такой себе POSIX только для wasm). WASI дает возможность получить доступ к таким функциям как файловая система, сетевые сокеты, таймеры и генераторы случайных чисел. Развитие ABI предполагает независимость от браузера, JavaScript и WebAPI. При этом проект обеспечивает надлежащий уровень изоляции от основной системы и позволяет определять полномочия приложения в стиле CloudABI и Capsicum. Файлы, каталоги, сокеты и другие ресурсы ассоциируются со специальным типом файловых дескрипторов, а для взаимодействия с каждым из ресурсов приложения должен иметь полномочия. Последние обрабатываются иерархически, то есть доступ к каталогу автоматически открывает и доступ ко всем файлам в нем. Кроме того существует polyfill WASI для браузеров и готовиться для node.js. Все это дает возможность писать модули с единым интерефейсом как для десктопных так и для браузерных приложений. Стоит также отметить, что на данном этапе это довольно базовая спецификация, не описывающая пока криптографию, API для работы с GPU, асинхронный I/O и т.д.
    WASI (WebAssembly System Interface) - это проект ABI от Mozilla, который определяет стандартизированный интерфейс взаимодействия ОС с wasm-модулем (такой себе POSIX только для wasm). WASI дает возможность получить доступ к таким функциям как файловая система, сетевые сокеты, таймеры и генераторы случайных чисел. Развитие ABI предполагает независимость от браузера, JavaScript и WebAPI. При этом проект обеспечивает надлежащий уровень изоляции от основной системы и позволяет определять полномочия приложения в стиле CloudABI и Capsicum. Файлы, каталоги, сокеты и другие ресурсы ассоциируются со специальным типом файловых дескрипторов, а для взаимодействия с каждым из ресурсов приложения должен иметь полномочия. Последние обрабатываются иерархически, то есть доступ к каталогу автоматически открывает и доступ ко всем файлам в нем. Кроме того существует polyfill WASI для браузеров и готовиться для node.js. Все это дает возможность писать модули с единым интерефейсом как для десктопных так и для браузерных приложений. Стоит также отметить, что на данном этапе это довольно базовая спецификация, не описывающая пока криптографию, API для работы с GPU, асинхронный I/O, TLS и т.д. кроме работы с процессами, так что IPC и fork не планируются.

    ### 15. WebAssembly это конец гегемонии и смерть JavaScript?

  21. @MaxGraey MaxGraey revised this gist May 24, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -133,7 +133,7 @@ JavaScript налагает дополнительные расходы. В по

    Префикс "Web" в названии WebAssembly может навести на мысль, что эта технология создавалась исключительно для веба, но это не так. На данный момент уже существует огромное множество [standalone рантаймов для WebAssembly](https://github.com/appcypher/awesome-wasm-runtimes#webassembly-runtimes) способные исполнять wasm не в самом браузере а непосредственно в ОС или в нативном приложении.

    WASI (WebAssembly System Interface) - это проект ABI от Mozilla, который определяет стандартизированный интерфейс взаимодействия ОС с wasm-модулем (такой себе POSIX только для wasm). WASI дает возможность получить доступ к таким функциям как файловая система, сетевые сокеты, таймеры и генераторы случайных чисел. Развитие ABI предполагает независимость от браузера, JavaScript и WebAPI. При этом проект обеспечивает надлежащий уровень изоляции от основной системы и позволяет определять полномочия приложения в стиле CloudABI и Capsicum. Файлы, каталоги, сокеты и другие ресурсы ассоциируются со специальным типом файловых дескрипторов, а для взаимодействия с каждым из ресурсов приложения должен иметь полномочия. Последние обрабатываются иерархически, то есть доступ к каталогу автоматически открывает и доступ ко всем файлам в нем. Кроме того существует polyfill WASI для браузеров и готовиться для node.js. Все это дает возможность писать модули с единым интерефейсом как для десктопных так и для браузерных приложений. Стоит также отметить, что на данном этапе это довольно базовая спецификация, не описывающая пока криптогавию, API для работы с GPU, асинхронный I/O и т.д.
    WASI (WebAssembly System Interface) - это проект ABI от Mozilla, который определяет стандартизированный интерфейс взаимодействия ОС с wasm-модулем (такой себе POSIX только для wasm). WASI дает возможность получить доступ к таким функциям как файловая система, сетевые сокеты, таймеры и генераторы случайных чисел. Развитие ABI предполагает независимость от браузера, JavaScript и WebAPI. При этом проект обеспечивает надлежащий уровень изоляции от основной системы и позволяет определять полномочия приложения в стиле CloudABI и Capsicum. Файлы, каталоги, сокеты и другие ресурсы ассоциируются со специальным типом файловых дескрипторов, а для взаимодействия с каждым из ресурсов приложения должен иметь полномочия. Последние обрабатываются иерархически, то есть доступ к каталогу автоматически открывает и доступ ко всем файлам в нем. Кроме того существует polyfill WASI для браузеров и готовиться для node.js. Все это дает возможность писать модули с единым интерефейсом как для десктопных так и для браузерных приложений. Стоит также отметить, что на данном этапе это довольно базовая спецификация, не описывающая пока криптографию, API для работы с GPU, асинхронный I/O и т.д.

    ### 15. WebAssembly это конец гегемонии и смерть JavaScript?

  22. @MaxGraey MaxGraey revised this gist May 17, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -139,7 +139,7 @@ WASI (WebAssembly System Interface) - это проект ABI от Mozilla, ко

    **Нет!** Определенно нет! При всех очевидных преимуществах WebAssembly будет слишком смело ожидать, что то огромное колличество библиотек, фреймворков и инструментов уже созданных для JavaScript экосистемы вдруг начнет переписываться на Rust, C++ или любой другой поддерживающий wasm язык, а огромная армия frontend-разработчиков незамедлительно ринется осваивать системное програмирование и соответствующие ему языки, особенно, если учесть, что в этой области порог вхождения несопостовимо выше чем у JavaScript. Кроме того, как мы уже выяснили далеко не для всех задач WebAssembly целесообразен. Языку Cи уже почти 50 лет и за это время возникло довольно много его надмножеств и прямых конкурентов, которые должны были покончить с ним, но как мы [видим](https://github.blog/2018-11-15-state-of-the-octoverse-top-programming-languages/) этого не произошло и он до сих пор остается в десятке наиболее часто используемых языков.

    Еще одна важная особенность JavaScript состоит в том, что это интерпретируемый язык, поддерживающий очень многие функции полностью или частично недоступные языкам с AOT-компиляцией. Например, в игровой индустрии по-прежнему очень популярны Lua, JS, Python которые используются для описания скриптовых сцен да и игровой механики в целом.
    Еще одна важная особенность JavaScript состоит в том, что это интерпретируемый динамичный язык, поддерживающий очень многие функции полностью или частично недоступные языкам с AOT-компиляцией. Например, в игровой индустрии по-прежнему очень популярны Lua, JS, Python которые используются для описания скриптовых сцен да и игровой механики в целом.

    Кроме того, JavaScript давно вышел за пределы браузера и используется для бэкенда (node.js, deno), мобильной разработки (ReactNative, NativeScript, Cordova) и даже для программирования логики встраиваемых (IoT) устройств.

  23. @MaxGraey MaxGraey revised this gist Apr 18, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -92,7 +92,7 @@ Java-апплеты (через JNI).
    WebAssembly-модуля не будет сильно отличаться от использования обычной JavaScript-библиотеки, вы зачастую даже
    не будете об этом подозревать.

    Так что написание тех частей приложения, которые в последствии будут компилироваться в wasm-модуль можно поручить
    Так что написание тех частей приложения, которые впоследствии будут компилироваться в wasm-модуль можно поручить
    системным разработчикам, уже знакомыми с одним из таких языков. Кроме того, активно развивается TypeScript-подобный язык [AssemblyScript](https://github.com/AssemblyScript/assemblyscript) способный производить WebAssembly-модуль и с которым большинство JavaScript/TypeScript разработчиков будут себя чувствовать в комфортной и знакомой среде.

    Полный список языков, поддерживающих WebAssembly можно посмотреть [здесь](https://github.com/appcypher/awesome-wasm-langs#contents).
  24. @MaxGraey MaxGraey revised this gist Apr 12, 2019. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -8,7 +8,6 @@
    ### 0. Какие цели у WebAssembly?

    - Определение переносимого двоичного формата с эффективным размером и временем загрузки, который будет служить целью компиляции и выполняться с предсказуемой скоростью;
    - Испольнение в той же семантической вселенной, что и JavaScript но и не только, при этом не нарушать уже имеющиеся политики безопасности;
    - Позволять портирование и исполнение в web уже имеющегося кода отличного от JavaScript;
    - При всем этом не нарушая целостности уже существующей веб-экосистемы.

  25. @MaxGraey MaxGraey revised this gist Apr 12, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,7 @@
    - Определение переносимого двоичного формата с эффективным размером и временем загрузки, который будет служить целью компиляции и выполняться с предсказуемой скоростью;
    - Испольнение в той же семантической вселенной, что и JavaScript но и не только, при этом не нарушать уже имеющиеся политики безопасности;
    - Позволять портирование и исполнение в web уже имеющегося кода отличного от JavaScript;
    - При всем этом не нарушая целостности уже имеющейся веб-экосистемы.
    - При всем этом не нарушая целостности уже существующей веб-экосистемы.

    ### 1. WebAssembly это нативный код CPU?

  26. @MaxGraey MaxGraey revised this gist Apr 12, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,7 @@

    ### 0. Какие цели у WebAssembly?

    - Определелени переносимого двоичного формата с эффективным размером и временем загрузки, который будет служить целью компиляции и выполняться с предсказуемой скоростью;
    - Определение переносимого двоичного формата с эффективным размером и временем загрузки, который будет служить целью компиляции и выполняться с предсказуемой скоростью;
    - Испольнение в той же семантической вселенной, что и JavaScript но и не только, при этом не нарушать уже имеющиеся политики безопасности;
    - Позволять портирование и исполнение в web уже имеющегося кода отличного от JavaScript;
    - При всем этом не нарушая целостности уже имеющейся веб-экосистемы.
  27. @MaxGraey MaxGraey revised this gist Apr 12, 2019. 1 changed file with 7 additions and 0 deletions.
    7 changes: 7 additions & 0 deletions Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -5,6 +5,13 @@
    Он базируется на [статье от Andre Weissflog](https://floooh.github.io/2017/06/09/webassembly-demystified.html),
    но так же содержит множество моих дополнений и мыслей, которые могут быть уже не слишком актуальны на момент прочтения. Прошу это учитывать.

    ### 0. Какие цели у WebAssembly?

    - Определелени переносимого двоичного формата с эффективным размером и временем загрузки, который будет служить целью компиляции и выполняться с предсказуемой скоростью;
    - Испольнение в той же семантической вселенной, что и JavaScript но и не только, при этом не нарушать уже имеющиеся политики безопасности;
    - Позволять портирование и исполнение в web уже имеющегося кода отличного от JavaScript;
    - При всем этом не нарушая целостности уже имеющейся веб-экосистемы.

    ### 1. WebAssembly это нативный код CPU?

    **Нет!** WebAssembly - это цель компиляции и промежуточный формат, который скорее похож на байткод в .NET, LLVM IR или
  28. @MaxGraey MaxGraey revised this gist Mar 30, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -127,7 +127,7 @@ JavaScript налагает дополнительные расходы. В по

    Префикс "Web" в названии WebAssembly может навести на мысль, что эта технология создавалась исключительно для веба, но это не так. На данный момент уже существует огромное множество [standalone рантаймов для WebAssembly](https://github.com/appcypher/awesome-wasm-runtimes#webassembly-runtimes) способные исполнять wasm не в самом браузере а непосредственно в ОС или в нативном приложении.

    WASI (WebAssembly System Interface) - это проект ABI от Mozilla, который определяет стандартизированный интерфейс взаимодействия ОС с wasm-модулем (такой себе POSIX только для wasm). WASI дает возможность получить доступ к таким функциям как файловая система, сетевые сокеты, таймеры и генераторы случайных чисел. Развитие ABI предполагает независимость от браузера, JavaScript и WebAPI. При этом проект обеспечивает надлежащий уровень изоляции от основной системы и позволяет определять полномочия приложения в стиле CloudABI и Capsicum. Файлы, каталоги, сокеты и другие ресурсы ассоциируются со специальным типом файловых дескрипторов, а для взаимодействия с каждым из ресурсов приложения должен иметь полномочия. Последние обрабатываются иерархически, то есть доступ к каталогу автоматически открывает и доступ ко всем файлам в нем. Кроме того существует polyfill WASI для браузеров и готовиться для node.js. Все это дает возможность писать модули с единым интерефейсом как для десктопных так и для браузерных приложений. Стоит также отметить что на данном этапе довольно базовая спецификация, не описывающая пока криптогавия, API для работы с GPU, асинхронный I/O и т.д.
    WASI (WebAssembly System Interface) - это проект ABI от Mozilla, который определяет стандартизированный интерфейс взаимодействия ОС с wasm-модулем (такой себе POSIX только для wasm). WASI дает возможность получить доступ к таким функциям как файловая система, сетевые сокеты, таймеры и генераторы случайных чисел. Развитие ABI предполагает независимость от браузера, JavaScript и WebAPI. При этом проект обеспечивает надлежащий уровень изоляции от основной системы и позволяет определять полномочия приложения в стиле CloudABI и Capsicum. Файлы, каталоги, сокеты и другие ресурсы ассоциируются со специальным типом файловых дескрипторов, а для взаимодействия с каждым из ресурсов приложения должен иметь полномочия. Последние обрабатываются иерархически, то есть доступ к каталогу автоматически открывает и доступ ко всем файлам в нем. Кроме того существует polyfill WASI для браузеров и готовиться для node.js. Все это дает возможность писать модули с единым интерефейсом как для десктопных так и для браузерных приложений. Стоит также отметить, что на данном этапе это довольно базовая спецификация, не описывающая пока криптогавию, API для работы с GPU, асинхронный I/O и т.д.

    ### 15. WebAssembly это конец гегемонии и смерть JavaScript?

  29. @MaxGraey MaxGraey revised this gist Mar 30, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -127,7 +127,7 @@ JavaScript налагает дополнительные расходы. В по

    Префикс "Web" в названии WebAssembly может навести на мысль, что эта технология создавалась исключительно для веба, но это не так. На данный момент уже существует огромное множество [standalone рантаймов для WebAssembly](https://github.com/appcypher/awesome-wasm-runtimes#webassembly-runtimes) способные исполнять wasm не в самом браузере а непосредственно в ОС или в нативном приложении.

    WASI (WebAssembly System Interface) - это проект ABI от Mozilla, который определяет стандартизированный интерфейс взаимодействия ОС с wasm-модулем. WASI дает возможность получить доступ к таким функциям как файловая система, сетевые сокеты, таймеры и генераторы случайных чисел. Развитие ABI предполагает независимость от браузера, JavaScript и WebAPI. При этом проект обеспечивает надлежащий уровень изоляции от основной системы и позволяет определять полномочия приложения в стиле CloudABI и Capsicum. Файлы, каталоги, сокеты и другие ресурсы ассоциируются со специальным типом файловых дескрипторов, а для взаимодействия с каждым из ресурсов приложения должен иметь полномочия. Последние обрабатываются иерархически, то есть доступ к каталогу автоматически открывает и доступ ко всем файлам в нем. Кроме того существует polyfill WASI для браузеров, что дает возможность писать модули с единым интерефейсом как для десктопных так и для браузерных приложений.
    WASI (WebAssembly System Interface) - это проект ABI от Mozilla, который определяет стандартизированный интерфейс взаимодействия ОС с wasm-модулем (такой себе POSIX только для wasm). WASI дает возможность получить доступ к таким функциям как файловая система, сетевые сокеты, таймеры и генераторы случайных чисел. Развитие ABI предполагает независимость от браузера, JavaScript и WebAPI. При этом проект обеспечивает надлежащий уровень изоляции от основной системы и позволяет определять полномочия приложения в стиле CloudABI и Capsicum. Файлы, каталоги, сокеты и другие ресурсы ассоциируются со специальным типом файловых дескрипторов, а для взаимодействия с каждым из ресурсов приложения должен иметь полномочия. Последние обрабатываются иерархически, то есть доступ к каталогу автоматически открывает и доступ ко всем файлам в нем. Кроме того существует polyfill WASI для браузеров и готовиться для node.js. Все это дает возможность писать модули с единым интерефейсом как для десктопных так и для браузерных приложений. Стоит также отметить что на данном этапе довольно базовая спецификация, не описывающая пока криптогавия, API для работы с GPU, асинхронный I/O и т.д.

    ### 15. WebAssembly это конец гегемонии и смерть JavaScript?

  30. @MaxGraey MaxGraey revised this gist Mar 30, 2019. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion Wasm-FAQ-2019.md
    Original file line number Diff line number Diff line change
    @@ -45,7 +45,7 @@ Java-апплеты (через JNI).
    веб-API (так же, как и в JavaScript). Однако emscripten SDK (C++) и web-sys (Rust) предоставляют обертки для многих
    распространенных API, что упрощает перенос существующего кода C / C++ / Rust (например, конвертировать TcpSockets-в-WebSockets, OpenGL-в-WebGL, OpenAL-в-WebAudio и т.д.). В дальнейшем, когда будет реализован [host-binding proposal](https://github.com/WebAssembly/host-bindings/blob/master/proposals/host-bindings/Overview.md) всеми браузерами,
    всего вышеперечисленного не потребуется, и можно будет обращаться непосредственно к Web API или любому другому
    интерфейсу (в случае со standalone VM) непосредственно через WebIDL или [WASI](https://gist.github.com/MaxGraey/326b1c04d66de3beb247c2c1e6358fd0#14-%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-wasi) интерфейс.
    интерфейсу (в случае со standalone VM) непосредственно через WebIDL а так же [WASI](https://gist.github.com/MaxGraey/326b1c04d66de3beb247c2c1e6358fd0#14-%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-wasi) интерфейс.

    ### 6. Могу ли я загрузить или создать нативную DLL-библиотеку в WebAssembly?