1291 подписчик
Немного про WASM. Решил пояснить, как работает эта связка с WEB.
Во-первых, WASM, он же WebAssembly - это, скорее, низкоуровневый код. Ну, то есть он, совершенно точно, низкоуровневый, вот только обычно, говоря про "низкий уровень" - все думают про сильное увеличение эффективности; однако это не всегда бывает так. Задача весьма тривиальна: берёшь какую-то кодовую базу, транслируешь её в WASM и подключаешь к web-приложению. Очень удобно; не нужно переписывать на JS огромную кучу функций.
Во-вторых, это я использую Rust для WASM, но ничто не мешает превращать C++ код в то же самое. Для этого используется Emscripten. Вообще про это почитать можно тут. Я выбрал Rust только потому, что мне он кажется интересным и перспективным, хотя пока что используется он не слишком активно, хоть и многим нравится. Заявляется, что он работает быстрее, чем C/C++, но тут, думаю разработчики языка немного лукавят.
В-третьих, превращённый в байт-код исходник, написанный на Rust (или другом языке) - следует подключить. Я не буду останавливаться на том, что собрать байт-код, порой, дело не очень простое. Например, нельзя (на сегодняшний день) использовать стандартный генератор случайных чисел; зато можно использовать генератор случайных числе от JS-движка (V8, SpiderMonkey или какого-то иного), который встроен в браузер или обрабатывает серверный код. Подключение wasm-файлов в проект - дело тоже непростое. Вернее не так, это дело непростое, когда делаешь всё в первый (второй, третий) разы; дальше всё тривиально. Через package.json подключается папка с сборкой wasm (обычно, там несколько файлов, как сгенерированных автоматически, так и построенных на базе написанного кода).
В-четвёртых, нельзя вот так вот взять и подключить wasm файлы напрямую: они должны быть загружены асинхронно после того, как приложение запустится (сперва грузится основной файл, потом подтягивает приложение). Возможно, это можно обойтись поигравшись с атрибутами тэга script, но я не пробовал.
1 минута
16 сентября 2022