ruby.wasmでrequire_relativeを使えるようにしたい - Qiita の続きです。
2回呼ぶとPromiseの完了待ちが無限にブロックされます
と言う状況でした。 ruby/ruby.wasm側でコミットが進んでいるので、ここにリベースしてみます。 ですがmainブランチの最新はコンフリクトします。
Install webrick explicitly · ruby/ruby.wasm@14a4f83 · GitHub まではリベースできるのでここで試してみます。
b.rbのなかでrequire_relative "../c"
してみます。
動きました。 なにかが修正されています。 それっぽいコミットをさがしてみます。
Prohibit await in non-async context and remove unnecessary loop fiber · ruby/ruby.wasm@32cbe2f · GitHub でPromiseSchedulerを修正しています。 これが関係ありそうです。
JS.global.queueMicrotask -> { @loop_fiber.transfer }
していたのをcurrent.transfer(value, :success)
に置き換えています。
@loop_fiber
は、専用のFiberです。
一旦、ループ用のFiberを通していたのをやめたようです。
代わりにRubyVM.eval
で実行したRubyスクリプト中で、Promiseをawaitすると例外がおきるようになっています。
どうも、RubyVM.eval
でエラーが起きないような、優しいインターフェースにしていたのを、素の薄い振る舞いにしたようです。
このコミットにリベースして動くか試してみます。
このコミットがブロックを解消したわけではなさそうです。