Вы можете скомпилировать WebAssembly напрямую с помощью cargo build --target wasm32-unknown-unknown
. По сути, это то, что другие инструменты, такие как wasm-pack
и wasm-bindgen
, построены вокруг, и если вы не хотите этого (например, если вы не нацеливаетесь на JavaScript), вы можете просто использовать это для компиляции непосредственно в WebAssembly.
Некоторые предостережения:
- Все взаимодействие между модулем WebAssembly и хостом должно происходить с функциями
extern
. Это означает, что есть только ограниченное количество типов, которые могут быть использованы, в основном примитивные типы (целые числа, числа с плавающей точкой, логические значения и указатели). Вы не сможете передавать сложные типы, если не используете дополнительный уровень абстракции сверху (это то, что делает wasm-bindgen
). - Большие части стандартной библиотеки (включая файловые системы и сети) например) не поддерживается целью
wasm32-unknown-unknown
. Если ваш хост WebAssembly поддерживает WASI (системный интерфейс WebAssembly), вы можете вместо этого использовать цель wasm32-wasi
для компиляции модуля с поддержкой WASI, который поддерживает гораздо больше стандартной библиотеки.