Webassembly実践-rust to wasm
2555 ワード
ターゲット
環境 rustc rustup cargo(rust-langの開発コンパイルツール) nodejs(wasm-pack生成packageのパブリッシュ) wasm-packのインストール
cargoを使用してプロジェクトを作成する
cdからblake 2 b-wasmディレクトリ
編集カーゴtoml
srcディレクトリのlibを編集します.rs
ユニットテストの実行
次の結果が表示されたら、次のwebassemblyのコンパイルが可能であることを示します.
wasm-packを使用してソースファイルをwasm形式にパッケージ化
コンパイルが完了するとpkgディレクトリが生成されます.これはnpmに直接パブリッシュして使用できます.ブラウザで使用する場合は、コンパイル時に--target browserを使用して生成されたディレクトリを指定することもできます.-d browser_pkg
nodejsをインストールした場合は、このディレクトリの下にtestを作成できます.jsファイルはさっきコンパイルしたwasmパッケージをテストします
test.js
rust lib - blake2b-simd, js 。 js rust 。
環境
cargo install wasm-pack
cargoを使用してプロジェクトを作成する
cargo new --lib blake2b-wasm
cdからblake 2 b-wasmディレクトリ
編集カーゴtoml
[package]
name = "blake2b-wasm"
version = "0.1.0"
authors = ["foo "]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
blake2b_simd = "0.5.8"
srcディレクトリのlibを編集します.rs
use blake2b_simd::{blake2b, Params};
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn blake2b_encode(input: &[u8], length: usize) -> String {
if length == 0 {
return blake2b(input).to_hex().to_string()
}
let hash = Params::new().hash_length(length).hash(input);
hash.to_hex().to_string()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let expected = "ca002330e69d3e6b84a46a56a6533fd79d51d97a3bb7cad6c2ff43b354185d6d\
c1e723fb3db4ae0737e120378424c714bb982d9dc5bbd7a0ab318240ddd18f8d";
let hash = blake2b(b"foo");
assert_eq!(expected, &hash.to_hex());
}
}
ユニットテストの実行
cargo test
次の結果が表示されたら、次のwebassemblyのコンパイルが可能であることを示します.
Finished dev [unoptimized + debuginfo] target(s) in 0.09s
Running target/debug/deps/blake2b_wasm-8c79ae2ec6adeb5b
running 1 test
test tests::it_works ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
wasm-packを使用してソースファイルをwasm形式にパッケージ化
wasm-pack build --scope foo --target nodejs
コンパイルが完了するとpkgディレクトリが生成されます.これはnpmに直接パブリッシュして使用できます.ブラウザで使用する場合は、コンパイル時に--target browserを使用して生成されたディレクトリを指定することもできます.-d browser_pkg
nodejsをインストールした場合は、このディレクトリの下にtestを作成できます.jsファイルはさっきコンパイルしたwasmパッケージをテストします
test.js
const { blake2b_encode } = require('./pkg')
const assert = require('assert')
const encodeString = blake2b_encode(Buffer.from("foo"))
const expectedString = "ca002330e69d3e6b84a46a56a6533fd79d51d97a3bb7cad6c2ff43b354185d6dc1e723fb3db4ae0737e120378424c714bb982d9dc5bbd7a0ab318240ddd18f8d"
assert.equal(encodeString, expectedString)