wasm

提供加载和运行 WASM 模块的实用程序

基于 Wasmer 运行时构建。

设置

首先安装构建Wasmer运行时所需的工具

基本用法

作为一个简单的例子,我们将尝试使用
package:wasm从 Dart 调用一个简单的 C 函数。有关使用 WASI 的更详细示例,请查看
示例目录。

  1. 首先创建一个新的 Dart 应用文件夹:dart create wasmtest

  2. pubspec.yaml中添加wasm包的依赖项,然后运行dart pub get

  3. 接下来运行dart run wasm:setup来构建Wasmer运行时。这需要几分钟时间。

  4. 然后添加一个新文件square.cc,内容如下:

    extern "C" int square(int n) { return n * n; }
    
  5. 我们可以使用较新版本的
    clang编译器将此C++代码编译为WASM:

    clang --target=wasm32 -nostdlib "-Wl,--export-all" "-Wl,--no-entry" -o square.wasm square.cc
    
  6. 将你的 Dart 程序(bin/wasmtest.dart)的内容替换为

    import 'dart:io';
    import 'package:wasm/wasm.dart';
    
    void main() {
      final data = File('square.wasm').readAsBytesSync();
      final mod = WasmModule(data);
      print(mod.describe());
      final inst = mod.builder().build();
      final square = inst.lookupFunction('square');
      print(square(12));
    }
    
  7. 运行 Dart 程序:dart run。这应该会打印

    export memory: memory
    export function: int32 square(int32)
    
    144
    

GitHub

https://github.com/dart-lang/wasm