Скажем, модуль WebAssembly (формат wat
) будет создан с большим количеством данных. Как только программа запускается, данные будут динамически изменяться и изменяться во время выполнения. Не совсем уверен, что понимаю, куда поместить эти данные в сгенерированный модуль WebAssembly.
Я пытаюсь выполнить (в WebAssembly) то, что демонстрирует этот JavaScript:
var data = [
100.1, 100.2, 200.1, 200.2,
300.12, 300.123, ...
]
И я со временем сделаю что-то вроде:
var subset = data.slice(2, 4)
storeSubset(subset)
data[5] = 500.3
subset[2] = 600
... но в WebAssembly не JavaScript, где data
и subset
являются локальными переменными для некоторой функции; они не являются глобальными переменными. Хотя, возможно, существует один глобальный набор данных, если это необходимо.
Хотите знать, где разместить данные в сгенерированном модуле. Таким образом, в программу будут встроены эти данные с самого начала. В основном, есть некоторые данные инициализации, которые будут динамически изменяться во время выполнения.
Вот что я пытаюсь выполнить в псевдокоде:
(module
(load float16 memorylocation, 200.1)
(load float16 memorylocation, 200.2)
... for every piece of data
)
Не уверен (а), если это должно быть сделано аналогично этому (по одной части за раз), или (б) это может быть сделано как-то навалом. Как это:
(module
(static memorylocation, 0101010110101...) ;; the bytes of all the `data`
(block (loop ...)) ;; loop through it and do `(load ...)` for each,
;; not sure if that would be better / performance / etc.
...
)
Загрузить все байты в одном месте и перебрать их?
Или, может быть, есть более стандартная функция .data
, например сборка (хотя я не уверен, подходит ли она для динамических данных).
(module
(data float16 memorylocation, 200.1)
(data float16 memorylocation, 200.2)
...
)
Я пока понимаю, как выполнять функции в WebAssembly, но не то, как обращаться с данными инициализации, потому что кажется, что он сгенерирует lot WebAssembly, и не уверен что это за WebAssembly.