Estoy tratando de portar mi biblioteca simple de detección de colisiones de JavaScript a WebAssembly para aumentar la velocidad. Después de buscar lenguajes que se compilan en WASM, AssemblyScript parecía ser perfecto ya que solo necesitaba agregar tipos a mi archivo JS. Toda la biblioteca es una Class y después de agregar tipos, traté de compilarla pero no se compila correctamente. Por ejemplo, al compilar esto usando el comando npx asc path/to/main.ts -o wasm.wasm --exportRuntime -t wasm.wat --bindings esm :
export class Test { constructor() { console.log('Successful!'); } };Resultó en este error:
WARNING AS235: Only variables, functions and enums become WebAssembly module exports. export class Test { ~~~~ in main.ts(1,14)Después de ver el error, traté de solucionarlo haciendo:
class Test { constructor() { console.log('Successful!'); } }; export function getTest(): Test { return Test; };Pero eso resultó en otro error:
ERROR AS234: Expression does not compile to a value at runtime. return Test; ~~~~ in main.ts(8,12) FAILURE 1 compile error(s)Así que traté de hacer esto:
class Test { constructor() { console.log('Successful!'); } }; export function getTest(): Test { return new Test(); }; Eso se compiló con éxito y después de llamar a getTest desde JavaScript obtuve un resultado Successful! en la consola pero no devolvió la clase iniciada, en su lugar obtuve esto: [Number (Internref): 18624] .
Así que busqué en Internet una solución y encontré esto . Pero la solución aceptada allí es usar AssemblyScript Loader , que está en desuso. También sé acerca de as-bind , pero afirma que envuelve AssemblyScript Loader, por lo que, indirectamente, también está en desuso. Entonces, ¿cómo puedo exportar clases desde AssemblyScript?
Por lo tanto, actualmente no hay forma de exportar clases. Sin embargo, puede llamar a métodos en una clase desde JavaScript o llamar a un método get o set para modificar datos. No sé si puedo responder más, pero recomendaría consultar con dcode en AssemblyScript Discord.