Практическое введение в Web Assembly с использованием C
WebAssembly — это низкоуровневый двоичный формат для Интернета, разработанный, чтобы быть быстрым, безопасным для памяти и открытым. Такие языки, как C, Rust и C++, компилируются в WebAssembly и запускаются в браузере.
Эта статья представляет собой краткое практическое руководство по созданию и использованию двоичных файлов веб-сборки в JavaScript. Для получения дополнительной информации, пожалуйста, обратитесь к ссылкам, приведенным в конце статьи.
Установка Эмдск
Ниже приведены основные команды для установки компилятора в Linux.
$ git clone https://github.com/emscripten-core/emsdk.git $ cd emsdk $ git pull $ ./emsdk install latest $ ./emsdk activate latest $ source ./emsdk_env.sh
Посетите официальный веб-сайт Emscripten, чтобы узнать больше о загрузке компилятора emsdk для вашей конкретной платформы.
Привет, мир
Мы начнем с традиционной программы hello world, чтобы начать наш проект.
$ emcc hello.c
После компиляции будут сгенерированы файлы a.out.js
и a.out.wasm
. Чтобы запустить код, просто запустите.
$ node a.out.js Hello, World!
Добавить два числа
EMSCRIPTEN_KEEPALIVE
необходимо добавить для любой функции, которую необходимо экспортировать. Теперь, чтобы создать отдельный файл WASM, в котором нет файла main.
$ emcc add.c -o add.wasm --no-entry
Чтобы запустить код:
$ node add.js 30
Для асинхронного создания WASM мы можем использовать следующее:
Линейный поиск
$ emcc linearsearch.c -o linearsearch.wasm — no-entry
Когда мы создаем Int32Array
, экземпляр wasm создает буфер памяти, начиная с ячейки памяти 0. Буфер памяти предоставляется JavaScript как ArrayBuffer
через memory.buffer
. Мы указываем длину как 5
.
$ node linearsearch.js 2
Умножить массив
$ emcc multiply.c -o multiply.wasm --no-entry
$ node a.js [ 4, 10, 18 ]