ruby.wasmでrequire_relativeするやつの進捗状況 - @ledsun blogでSystemStackErrorがでると書きました。 ruby.wasmのリポジトリのissueで次の情報を見つけました。
https://github.com/ruby/ruby.wasm/issues/133#issuecomment-1365825417
evalAsync internally uses Fiber, and its stack size 256kb is smaller than main stack (16mb).
evalAsyncを使うと、スタックサイズが小さくなるそうです。 関係がありそうです。
const wasi = new WASI({ args, env: { "GEM_PATH": "/gems:/home/me/.gem/ruby/3.2.0+2", "GEM_SPEC_CACHE": "/home/me/.gem/specs", "RUBY_FIBER_MACHINE_STACK_SIZE": String(1024 * 1024 * 20), }, preopens: { "/home": "/home", "/dev": "/dev", }, bindings: { ...WASI.defaultBindings, fs: wasmFs.fs, path: path, } });
こんな感じで、WASI
のコンストラクターの引数で環境変数を指定するとスタックサイズを大きくできるそうです。
というわけで
const wasi = new WASI({env: { "RUBY_FIBER_MACHINE_STACK_SIZE": String(1024 * 1024 * 20), }});
こんな風にスタックサイズを指定してみます。
うお、やったぜ!一歩前進。
Add example for require_relative · ledsun/ruby.wasm@b418a31 · GitHub <- 動くコミットをメモしておきます。