问题标签 [assemblyscript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
278 浏览

javascript - 使用内存来获取字符串会产生不正确的结果

我正在关注此处的解决方案: 如何从 WebAssembly 函数返回 JavaScript 字符串 和此处: 如何在 WebAssembly 中从 Rust 返回字符串(或类似的)?

但是,当从内存中读取时,我没有得到想要的结果。

AssemblyScript 文件,helloWorldModule.ts:

索引.html:

这将返回 32 的偏移量。最后产生一个开始太早并且在“Hello World”的每个字母之间有空格的字符串:

在此处输入图像描述

但是,如果我将数组更改为 Int16Array,并在偏移量(即 32)上加 8,则偏移量为 40。像这样:

然后我们得到正确的结果: 在此处输入图像描述

为什么第一组代码不像我提供的链接中那样工作?例如,为什么我需要将其更改为与 Int16Array 一起使用以消除“H”和“e”之间的空格?为什么我需要向偏移量添加 8 个字节?

总之,这里到底发生了什么?

编辑:另一个线索,如果我在 UInt8 数组上使用 TextDecoder,解码为 UTF-16 看起来比解码为 UTF-8 更正确: 在此处输入图像描述 在此处输入图像描述

0 投票
2 回答
76 浏览

assemblyscript - 从 index.ts 以外的文件中导出类

我制作了一个assembly/Vec3.ts用此内容调用的文件:

然后通过构建它npm run asbuild

但是该文件只是被忽略并且不包含在untouched.wasm.

是否可以从所有文件中导出类?

0 投票
1 回答
3574 浏览

javascript - 如何将 ArrayBuffer 从 JS 传递到 AssemblyScript/Wasm?

我有一段非常简单的 Typescript 代码,可以解析特定的数据格式,输入是 UInt8Array。我已经尽可能地对其进行了优化,但我认为这个相当简单的解析器应该能够比我让它作为 JS 运行得更快。我想尝试使用 AssemblyScript 在 Web 汇编中编写它,以确保我没有遇到任何 Javascript 引擎的怪癖。

正如我现在所知道的,我不能只将 TypedArray 传递给 Wasm 并让它自动工作。据我了解,我可以将指针传递给数组,并且应该能够直接从 Wasm 访问它而无需复制数组。但我不能让它与 AssemblyScript 一起使用。

以下是一个最小示例,显示了我如何无法将 ArrayBuffer 传递给 Wasm。

设置 Wasm 导出的代码主要来自自动生成的样板:

下面的代码调用了 WASM,index.js 就是上面的胶水代码。

编译成 WASM 的 AssemblyScript 如下:

当我执行该代码时,我得到一个“RuntimeError:内存访问越界”。

主要问题是我从 Wasm 得到的错误对我自己解决这个问题没有帮助。我显然错过了幕后实际运作的一些主要方面。

如何使用 AssemblyScript 将 TypedArray 或 ArrayBuffer 从 JS 传递到 Wasm?

0 投票
2 回答
906 浏览

typescript - 使用 Assemblyscript 将类从 WebAssembly 导出到 JavaScript?

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

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

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

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

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

0 投票
1 回答
134 浏览

webassembly - 优化的 AssemblyScript 仍然是 4K,用于简单的乘法

我正在使用 AssemblyScript 来生成 WebAssembly,但我不确定为什么“优化的”WebAssembly 模块如此之大。我将基础教程中的简单加法函数修改为乘法函数,如下所示:

我可以找到在 optimize.wat 文件中定义的这个函数:

但是,模块中有大量额外的代码。模块总大小超过1800行。似乎有很多我不需要的额外东西。示例文件夹中的 WAT 文件都很好而且很小。Mandlebrot 示例只有 200 行 WAT,而 Game of Life 示例只有 400 行。为什么简单的乘法会产生 1800 行?是否有我缺少的优化设置?

谢谢

0 投票
1 回答
408 浏览

assemblyscript - 如何在 AssemblyScript / Near 中打印数组的长度?

我正在附近尝试简单的汇编脚本,似乎找不到打印数组长度的方法。这是最小的复制品:

不编译

虽然toString()明确存在于 上i32,例如以下代码段编译并工作:

0 投票
1 回答
120 浏览

lambda - 从匿名函数汇编脚本访问全局变量

我正在尝试使用功能语法处理汇编脚本数组。

但是,当我尝试访问函数范围之外的变量时,会出现错误:

例子

Cannot find name 'ts'我收到函数内ts.someField访问的错误。

如何将 ts 添加到匿名函数的闭包中?

0 投票
1 回答
673 浏览

assemblyscript - 通过引用从 JS 传递数组以供 WASM 编辑?

在 AssemblyScript 中传递和返回浮点数组的最佳方法是什么?

我可以传递一个数组形式 JS(通过引用)供 WASM 编辑吗?

以下是我现在所拥有的。忽略实现细节,它会返回 2000,然后将其增加到 8000ish。

返回一组新值的最佳方法是什么?

0 投票
1 回答
136 浏览

assemblyscript - AssemblyScript 中的 TypedArray 与 Array

在使用 AssemblyScript 编程时,您会在哪些情况下选择其中一种?

就我而言,我正在尝试从浮点数元组列表中构建 Kd 树。因为我需要重新排列和排序传入的元组列表,所以我的第一个选择是使用,Array<Array<f64>>因为我可以轻松地从中添加和删除数据。 [

0 投票
2 回答
531 浏览

assemblyscript - 在 AssemblyScript 中实例化数组的三种不同方法

我正在编写一个智能合约并希望使用数组来操作数据,但是查看 AssemblyScript 文档,我不确定最好的方法。

对我来说似乎很好,只需使用:

但是当我查阅汇编脚本文档时,推荐了三种创建数组的方法:

我什么时候想使用一种类型的实例化而不是另一种类型的实例化?为什么我不总是使用我一开始介绍的版本?