Как мне скомпилировать проект Rust в Wasm без использования wasm-pack? - PullRequest
1 голос
/ 02 апреля 2020

Я хотел бы скомпилировать программу / проект Rust в Wasm для использования в моем приложении Python, используя python -ext-wasm . Существующие учебники предполагают, что это для сети и предлагают wasm-pack. Есть ли другой способ просто скомпилировать Rust в Wasm без JavaScript привязок?

Например, если у меня есть программа Rust (myproject/math.rs).

#[no_mangle]
pub extern fn sum(x: i32, y: i32) -> i32 {
    x + y
}
  1. Как мне преобразовать это в wasm файл без webpack?

  2. Как мне взять весь проект (с его зависимостями библиотеки) и скомпилировать все из них в Wasm ?

1 Ответ

2 голосов
/ 02 апреля 2020

Вы можете скомпилировать 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, который поддерживает гораздо больше стандартной библиотеки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...