使用 Assemblyscript 将类从 WebAssembly 导出到 JavaScript?
Posted
技术标签:
【中文标题】使用 Assemblyscript 将类从 WebAssembly 导出到 JavaScript?【英文标题】:Exporting classes from WebAssembly to JavaScript with Assemblyscript? 【发布时间】: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
所以我想知道是否有人知道实现此(或至少类似)功能的方法?
【问题讨论】:
【参考方案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 生成的胶水代码。我感到很迷茫,所以我希望有人能指出我正确的方向。以上是关于使用 Assemblyscript 将类从 WebAssembly 导出到 JavaScript?的主要内容,如果未能解决你的问题,请参考以下文章
将类从 navbar-light 更改为 navbar-dark 隐藏导航栏