AssemblyScript:动态本地数组大小

Posted

技术标签:

【中文标题】AssemblyScript:动态本地数组大小【英文标题】:AssemblyScript: Dynamic local array size 【发布时间】:2021-04-16 10:41:28 【问题描述】:

尝试创建一个大小为从 JS 导入的变量的数组似乎不起作用。 例如:

AssemblyScript:

export declare arrSize: u32

const arr = new Uint32Array(arrSize)

export function init (): void 
  unchecked(testArr[0]) = 1
  store<u32>(0, unchecked(testArr[0]))

JS:

const memory = new WebAssembly.Memory( initial: 1 )
WebAssembly.instantiateStreaming(fetch('module.wasm'), 
  env:  memory ,
  index:  arrSize: 2 
).then(module => 
  const  init  = module.instance.exports
  init()
  const arr = new Uint32Array(memory.buffer, 0, 2)
  console.log(arr)
)

而如果我在 AssemblyScript 文件中更改 const arr = new Uint32Array(2),它会起作用。

有没有办法在 WebAssembly 模块中设置动态大小的本地数组?

【问题讨论】:

【参考方案1】:

这行得通:

export declare const count: i32;

const arr = new Array<i32>(count);
export function getCount(): i32 
    return arr.length;

WebAssembly.instantiate 的导入对象中,您应该有:


    index: 
        count: 22
    

前提是你的汇编脚本文件名为index.ts

【讨论】:

以上是关于AssemblyScript:动态本地数组大小的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 AssemblyScript 通过引用操作画布数据(类型化数组)

分配 65536 个元素的数组后,AssemblyScript / WebAssembly 分配失败

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

如何在 AssemblyScript 中为 NEAR 合约创建 UID?

三等号(===)在AssemblyScript中的行为是否不同?