Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
172 views
in Technique[技术] by (71.8m points)

javascript - AssemblyScript: Dynamic local array size

Trying to create an array with a size that is a variable imported from the JS doesn't seem to work. For example:

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)
})

Whereas if I change const arr = new Uint32Array(2) in the AssemblyScript file, it works.

Is there a way to have dynamically sized local arrays in the WebAssembly module?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

This works:

export declare const count: i32;

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

And in the imports object for WebAssembly.instantiate you should have:

{
    index: {
        count: 22
    }
}

provided that you assemblyscript file is named index.ts


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.7k users

...