【问题标题】:Exporting classes from WebAssembly to JavaScript with Assemblyscript?使用 Assemblyscript 将类从 WebAssembly 导出到 JavaScript?
【发布时间】:2019-10-25 20:38:41
【问题描述】:

我正在尝试使用 Assemblyscript 将 TypeScript 编译为 WebAssembly,并且我正在尝试从 WebAssembly 导出一个类,以便它可以在 JavaScript 中使用。澄清一下,我希望能够在 .js 文件中构造该类的新实例,即使该类是在 .wasm 中定义的。

我已经做了一些研究和实验,似乎 Assemblyscript 会将类方法导出为函数,而不是作为一个整体导出类。

这就是我希望它在 WebAssembly 方面的外观:

export class Point {
  public x: i32;
  public y: i32;

  constructor(x: i32, y: i32) {
    this.x = x; 
    this.y = y;
  }
}

这就是我想在 JavaScript 端完成的事情:

// Omitted code for instatiating the Wasm Module

var exports = object.instance.exports; // The exports of the Wasm instance
var Point = exports.Point; // The Point class

let point = new Point(0, 0) // Construct a new Point

所以我想知道是否有人知道实现此(或至少类似)功能的方法?

【问题讨论】:

    标签: typescript webassembly assemblyscript


    【解决方案1】:

    我设法找到了解决方案,并认为我应该将其发布在这里。 AssemblyScript 的主要作者(至少我是这么认为的)编写了一个加载器,它是我一开始没有找到的项目的一部分。

    可以在这里找到: https://github.com/AssemblyScript/assemblyscript/tree/master/lib/loader

    这里有一个关于如何使用它来将类从 Wasm 导出到 JavaScript 的简短指南: https://github.com/AssemblyScript/docs/blob/master/basics/loader.md

    【讨论】:

      【解决方案2】:

      WebAssembly 有一个非常基本的类型系统,它只有四种数字类型。为了将最基本的类型(如字符串)编译为 WebAssembly,需要创建相当多的“胶水代码”(在字符串的情况下,数据是通过线性内存交换的)。

      实现您所描述的目标是可能的,但需要创建 AssemblyScript 目前能够生成的更多“胶水代码”。

      【讨论】:

      • 谢谢,我想我需要为此手动生成一些胶水代码。我已经使用 Rust 导出了这样的类,并尝试查看 Rust 的 wasm-pack 生成的胶水代码。我感到很迷茫,所以我希望有人能指出我正确的方向。
      猜你喜欢
      • 2023-01-16
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 2021-03-05
      • 1970-01-01
      相关资源
      最近更新 更多