De Rust para WebAssembly

Com Rust

Arquivo: index.html
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Exemplo de WebAssembly</title>
</head>
<body>

<script>
const    arquivo    = 'exemplo.wasm';
WebAssembly
.instantiateStreaming(fetch(arquivo))
.then(wasm => {
    const { instance } = wasm;

const {
    soma
} = instance.exports;
// 12
alert(soma(5, 7));
});
</script>

</body>
</html>
Arquivo: exemplo.rs
// Instale o compilador Rust
// Insira o seguinte comando abaixo
// rustup target add wasm32-unknown-unknown

#[no_mangle]
pub extern "C" fn soma(numero_a: u8, numero_b: u8) -> u8{
    numero_a + numero_b
}
Arquivo: comando.bat
rustc exemplo.rs --target wasm32-unknown-unknown --crate-type=cdylib
Resultado: http://localhost/webassembly/index.html (tem que usar um servidor)

Com o Cargo

Arquivo: index.html
Observação: O arquivo exemplo.wasm está no diretório: exemplo/target/wasm32-unknown-unknown/release/
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Exemplo de WebAssembly</title>
</head>
<body>

<script>
const    arquivo    = 'exemplo/target/wasm32-unknown-unknown/release/exemplo.wasm';
WebAssembly
.instantiateStreaming(fetch(arquivo))
.then(wasm => {
    const { instance } = wasm;

const {
    soma
} = instance.exports;
// 12
alert(soma(5, 7));
});
</script>

</body>
</html>
Para criar a Estrutura de Pasta do Cargo, insira o comando abaixo:
cargo new exemplo --lib
Vai criar uma Estrutura de Pastas assim:
Arquivo: /exemplo/src/lib.rs
Observação: o arquivo lib.rs está na pasta /exemplo/src/
// Instale o compilador Rust
// Insira o seguinte comando abaixo
// rustup target add wasm32-unknown-unknown

// cargo new exemplo --lib
// comando.bat

#[unsafe(no_mangle)]
pub extern "C" fn soma(numero_a: u8, numero_b: u8) -> u8{
    numero_a + numero_b
}
Arquivo: /exemplo/Cargo.toml
Observação: o arquivo Cargo.toml está na pasta /exemplo/

[package]
name = "exemplo"
version = "0.1.0"
edition = "2024"

[lib]
crate-type = ["cdylib"]

Arquivo: /exemplo/.cargo/config.toml
Observação: o arquivo config.toml está na pasta /exemplo/cargo/
[build]
target = "wasm32-unknown-unknown"
Arquivo: comando.bat
cd exemplo
cargo build --release
cd ..
Resultado: http://localhost/webassembly/index.html (tem que usar um servidor)