Запускаем WASM на платформе SimpleOne

При помощи использования модулей на wasm возможно кардинально улучшить возможности системы.

Предлагаю пример возможного использования. Калькулятор больших чисел. Разрядность чисел ограничена всего 10к разрядов.

Математический модуль написан на rust, потом скомпилирован в модуль wasm. Для загрузки модуля в память он был преобразован в формат base64 и прямо вставлен в код клиентского скрипта.

Специально делал не в виде виджета, а в виде клиентского скрипта для использования на формах и в UI-действиях. Но не сложно и в виде виджета оформить.

PS. Из того, что не взлетело. Не смог запустить модуль в виде серверного скрипта.

PPS. В приложенном архиве также есть исходник модуля на rust. Прошу сильно за него не пинать - не стояло задачи сделать,чтобы считало на 100% правильно. Но на небольших числах с калькулятором сходится.

big-math-wasm.zip (68,0 КБ)

4 лайка

Вот пример серверного исполнения:

var wasmCode = new Uint8Array(
\[0,97,115,109,1,0,0,0,1,134,128,128,128,0,1,96,1,127,1,127,3,130,128,128,128,0,1,0,4,132,128,128,128,0,1,112,0,0,5,131,128,128,128,0,1,0,1,6,129,128,128,128,0,0,7,144,128,128,128,0,2,6,109,101,109,111,114,121,2,0,3,102,105,98,0,0,10,203,128,128,128,0,1,197,128,128,128,0,1,1,127,2,64,32,0,65,1,106,34,1,65,3,79,13,0,32,1,65,2,116,65,12,106,40,2,0,15,11,2,64,32,0,65,1,72,13,0,32,0,65,127,106,16,0,32,0,65,126,106,16,0,106,15,11,32,0,65,2,106,16,0,32,1,16,0,107,11,11,146,128,128,128,0,1,0,65,12,11,12,1,0,0,0,0,0,0,0,1,0,0,0\]);
var wasmModule = new WebAssembly.Module(wasmCode);
var wasmInstance = new WebAssembly.Instance(wasmModule, [ ]);
print(wasmInstance.exports.fib(10)); //55
2 лайка