Wasm Rust 初学者
wasm可以理解成一个虚拟机, 和宿主机之间通过 Memory, Table 来通信, 实例化wasm对象时, 可以导入导出数据.
安装 cargi install wasm-pack
直接下载 工具 wabt和bineryen 放到 PATH 中即可.
rust 示例
编译 wasm-pack build
extern crate wasm_bindgen;
use std::ops::Add;
use sha2::{Digest, Sha512};
use sha2::digest::Update;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern {
pub fn alert(s: &str);
}
#[wasm_bindgen]
pub fn greet(name: &str) {
println!("收到参数: {}", name);
alert(&format!("Hello, {}!", name));
}
#[wasm_bindgen]
pub fn add(a: i32, b: i32) -> i32 {
return a + b;
}
#[wasm_bindgen]
pub fn get_name(data: &str, callback: String) -> String
{
return String::from(data).add(&callback);
}
#[wasm_bindgen]
pub fn sha2_512(data: String) -> String
{
let mut s2 = Sha512::new();
Update::update(&mut s2, data.as_bytes());
let rs = s2.finalize();
return format!("{:x}", rs);
}
#[wasm_bindgen]
pub fn error(message: &str) -> Result<String, String>
{
return Err(message.to_string());
}
js代码
添加依赖
{
"dependencies": {
"vue": "^3.5.13",
"wasmpkg": "file:../wasm-ru/pkg"
}
}
import * as wasmpkg from 'wasmpkg'
console.log(wasmpkg)
const sha2512 = wasmpkg.sha2_512(text.value)