https://github.com/ruby/ruby.wasm/pulls?q=+author%3Aledsun+is%3Amerged+created%3A%3E2023-01-01 で一覧できます。 6件でした。 時系列で見ていきます。
JavaScriptのオブジェクトを、newメソッドで作れるようにしました。 それまでは、次のようにJavaScript側でnewメソッドを呼ぶ必要がありました。
JS.eval 'return new URLSearchParams(location.search)'
次のようにRubyの中でnewメソッドを呼べるようにしました。
JS.global[:URLSearchParams].new(JS.global[:location][:search])
JavaScriptのtrue, falseとRubyのtrue, falseは異なるオブジェクトです。 ですので、次の比較は常にfalseになります。
if searchParams.has('phrase') == true ... end
これを簡単に書くために、JavaScriptのtrueを定数にしました。 次のように書けます。
if searchParams.has('phrase') == JS::True ... end
WebAssembly.complieStreamingというwasmバイナリのダウンロードとコンパイルを同時に実行するAPIを使うようにしました。 40ms速くなりました。 ダウンロードの方が400msぐらい掛かって支配的です。 今のところはそんなに効果はないですが、将来効果が大きくなるといいですね。
ruby.wasmはビルドの途中でzlibのソースコードをダウンロードします。 zlib 1.3がリリースされたときに、旧バージョンのソースコードがダウンロードできなくなりました。 ruby.wasmのビルドも通らなくなったので、その修正です。
Kernel#require_relative
をパッチするためのメソッドとして、RequireRemote#load
を追加しました。
自作のRubyスクリプトを読み込むだけなら次のパッチで行けます。
require 'js/require_remote' module Kernel def require_relative(path) = JS::RequireRemote.instance.load(path) end
これだけだと組み込みgemでつかっているrequirue_relative
が壊れます。
もうちょっと複雑なパッチが必要です。
ruby.wasm/packages/npm-packages/ruby-wasm-wasi/example/require_relative/index.html at 6acf40356079463b9b8d545031e8562a9b3931d2 · ruby/ruby.wasm · GitHub を見てください。
require_remoteをruby.wasmのbundled gemにする計画があります。
そうしたら、このパッチもgemに入れてもいいのかもしれません。
まあ、もう少し先の話なので、一先ずはRequireRemote#load
を組み込んだ自作のアプリケーションを作ります。
ruby.wasmのnpmパッケージの名称が変わりました。 そのときのテストコードの修正漏れの対応です。