Экспорт классов из WebAssembly в JavaScript с помощью Assemblyscript? - PullRequest
1 голос
/ 11 июня 2019

Я экспериментирую с компиляцией TypeScript в WebAssembly с использованием Assemblyscript и пытаюсь экспортировать класс из 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

Так что мне интересно, если кто-нибудь знает способ достижения этой (или хотя бы аналогичной) функциональности?

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Мне удалось найти решение, и я решил опубликовать его здесь. Основной автор (по крайней мере, мне так кажется) AssemblyScript написал загрузчик, который является частью проекта, который я сначала не нашел.

Его можно найти здесь: https://github.com/AssemblyScript/assemblyscript/tree/master/lib/loader

С кратким руководством по его использованию для экспорта классов из Wasm в JavaScript здесь: https://github.com/AssemblyScript/docs/blob/master/basics/loader.md

0 голосов
/ 11 июня 2019

WebAssembly имеет очень простую систему типов, которая имеет только четыре числовых типа. Для того, чтобы скомпилировать даже самые базовые типы, такие как строки, в WebAssembly, требуется создать довольно много «связующего кода» (в случае строк данные обмениваются через линейную память).

Достижение того, что вы описываете, возможно, но потребует создания большего количества «связующего кода», который в настоящий момент способен создавать AssemblyScript.

...