#wasm-module #wasm #suite #utility #javascript #js

rust-wasm-utils

Rust 和 JavaScript 工具集,用于编写 WebAssembly 模块

1 个不稳定版本

使用旧的 Rust 2015

0.3.0 2018 年 1 月 19 日

#44 in #suite

MIT 许可证

2KB

rust-wasm

Build Status

Rust 和 JavaScript 工具集,用于编写 WebAssembly 模块。

  • 编写具有近似自动字符串处理和内存管理的函数
  • 如果您想避免不必要的分配,则具有人体工程学内存管理 API
  • 无需额外的构建时工具——使用 Cargo 和您的 JavaScript 打包器

注意: 这处于早期阶段,目前预计 API 会频繁更改。


lib.rs

extern crate rust_wasm_prelude;
use rust_wasm_prelude::*;

pub use rust_wasm_prelude::exports::*;

#[no_mangle]
pub fn to_uppercase(ptr: JsString) -> JsString {
    let mut s: String = js_string_input(ptr);
    s = s.to_uppercase();
    js_string_output(s)
}

index.js

import { Prelude, types } from '@rust-wasm/prelude'
import loadWasm from './lib.rs'

const prelude = new Prelude()

loadWasm()
  .then(module => module.instance.exports)
  .then(exports => {
    prelude.withExports(exports)

    const toUppercase = prelude.wrap(
      types.string,
      types.string,
      exports.to_uppercase
    )

    console.log('uppercase of `test` is', toUppercase('test'))
  })

安装

将 Rust 依赖项添加到您的 Cargo.toml

rust-wasm-prelude = "0.3.0"
rust-wasm-utils = "0.3.0"

使用 yarn/npm 安装 JavaScript 依赖项

yarn add @rust-wasm/prelude @rust-wasm/utils

示例

  • 基础:一个可构建的演示项目,展示 API 基础知识
  • 内存管理:与 basic 相同,但展示了如何在 JS 端手动管理内存

鸣谢

  • HelloRust 展示了字符串传递函数如何由 JavaScript 和 Rust 使用

依赖关系

~0–1.4MB
~31K SLoC