@ledsun blog

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

ruby.wasmのJS::Objectをハックするときのテクニック

ruby.wasmでJavaScriptのオブジェクトをnewメソッドで初期化する - @ledsun blognewメソッドを試作しました。 せっかくなので、ruby.wasm本体に組み込みたいです。 で、ためしていて気が付きました。

ruby.wasmのJS::Objectをハックしてみる - @ledsun blogrubiesディレクトリを消せばruby.wasmをリビルドして、JS::Objectへの変更が反映されると書きました。 嘘です。 rake build:cleanしないとダメでした。 このリビルドすると僕のPCでは1400秒、20分強掛かります。 試しながら進むには不便です。

そこで考えました。 JS::Objectのテストコードは https://github.com/ruby/ruby.wasm/blob/b2fa9289f89dd6a00c03ede9f47445ea01315ee9/packages/npm-packages/ruby-wasm-wasi/test/unit/test_object.rb です。 このファイルの中に https://github.com/ruby/ruby.wasm/blob/f61c620567d8e37785fc5748fed52e6e65f960d5/ext/js/lib/js.rb#L91-L135 にあるJS::Objectの実装をコピーします。 コピーした実装をハックします。 新しい実装をテストするテストコードをtest_object.rbに書きます。

rake npm:ruby-head-wasm-wasi:checkを実行すると、JS::Objectが再定義されテスコードが実行されハックがうまく出来ているか確認できます。 20秒ぐらいで終わります。 60倍速く開発できます。