@ledsun blog

無味の味は佳境に入らざればすなわち知れず

ruby.wasmの最新版を試す その1

ruby.wasmでrequire_relativeを使えるようにしたい - Qiita の続きです。

2回呼ぶとPromiseの完了待ちが無限にブロックされます

と言う状況でした。 ruby/ruby.wasm側でコミットが進んでいるので、ここにリベースしてみます。 ですがmainブランチの最新はコンフリクトします。

Install webrick explicitly · ruby/ruby.wasm@14a4f83 · GitHub まではリベースできるのでここで試してみます。

b.rbのなかでrequire_relative "../c"してみます。

cの次にHello, world!が表示されます。

動きました。 なにかが修正されています。 それっぽいコミットをさがしてみます。

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でエラーが起きないような、優しいインターフェースにしていたのを、素の薄い振る舞いにしたようです。

このコミットにリベースして動くか試してみます。

c loaded!で止まります。

このコミットがブロックを解消したわけではなさそうです。