@ledsun blog

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

ruby.wasm

環境変数で大きなスタックサイズを指定したらrequire_relativeが動いた

ruby.wasmでrequire_relativeするやつの進捗状況 - @ledsun blogでSystemStackErrorがでると書きました。 ruby.wasmのリポジトリのissueで次の情報を見つけました。 https://github.com/ruby/ruby.wasm/issues/133#issuecomment-1365825417 evalAsync intern…

ruby.wasmでrequire_relativeするやつの進捗状況

今は、ruby.wasmでrequire_relativeを使えるようにしたい - Qiitaからそんなに状況は変わっていません。 少し違うのは、このときは 2回呼ぶとPromiseの完了待ちが無限にブロックされます でした。 いま*1は SystemStackErrorがでます。 requrie_relativeは再…

RubyVM.evalAsyncの中でRubyVM.evalAsyncを呼ぶとエラーが起きる

JS::Object.awaitが返らないときがある? - @ledsun blog にて次のような疑問を持ちました。 this.vm.evalAsync(script.ScriptBody)の中でthis.vm.evalAsync(script.ScriptBody)するのがよくないのでしょうか? 素朴にevalAsyncの中でevalAsyncを呼ぶとどう…

JS::Object.awaitが返らないときがある?

JS::Object.await ふたたび - @ledsun blog で、JS::Object.awaitの使い方がわかりました。 そこでfetchを使ってrequire_relativeを実装します。 import { RubyScript } from "./RubyScript"; import { EvaluatedScriptStack } from "./EvaluatedScriptStack…

ruby.wasmクイズ

次のスクリプトはエラーになるでしょうか? <html> <script src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@0.5.0/dist/browser.script.iife.js"></script> <script type="text/ruby"> require "js" JS::global.send(:require, 'erb') erb = ERB.new("Hello <%= val %>!") puts erb.result_with_hash val: "world" </script> </html> ヒ…

JS::Object.await ふたたび

JS::Object.await - @ledsun blog に対してフォローをもらいました。 すごーく遅レスですが、最近追加したメソッドまで追っていただいてありがとうございます!コメントが大変紛らわしい書き方だったんですが、Ruby側でJSのPromiseを待てるもの、という認識…

ruby.wasmに対する思いとか、企んでいることとか

ruby.wasmについて、現時点で僕が思っていることを記録しておきます。 思っていること 主にonブラウザ 僕がruby.wasmに興味があるのは、ブラウザで動かす方です。 エッジワーカーで動かす方は今のところあまり興味がありません。 また、ruby.wasmがプロダク…

ruby.wasmではファイルに書き込めない

require_relativeはパッチれない - @ledsun blog で、Rubyスクリプトの実行前に、Rubyスクリプトを静的にあつかってrequire_relativeを置き換えることにしました。 そこで次のアイデアを思いつきました。 Rubyスクリプトの実行前に、require_relativeの参照…

JS::Object.await

fetchは非同期だった - @ledsun blog でfetchの完了をRuby側で待てなくて、require_relativeの順番の制御が上手く行きませんでした。 ruby.wasmでJS::Object.awaitという関数を見つけました。 名前からするとPromiseを待てそうな関数です。 これを使えばfetc…

require_relativeはパッチれない

requrie_relativeをハックしたい require_relativeの相対参照の起点となるもの - @ledsun blog でRubyスクリプトのURLを保持する必要があるとわかりました。 そこで次の感じでURLを保持したVMクラスを作りました。 import { RubyScriptAndSourceURL } from "…

require_relativeの相対参照の起点となるもの

ruby.wasmのrequire_relativeでfetchする - @ledsun blog fetchは非同期だった - @ledsun blog の続きです。前回fetchで実装してみたところ、非同期APIではrequire_relativeの同期性*1を保証できないことに気が付きました。 ブラウザから同期でHTTPリクエス…

fetchは非同期だった

ruby.wasmのrequire_relativeでfetchする - @ledsun blog で良い感じに require_relative をfetchに置き換えられました。 ところがfetchは非同期関数なのです。 次のようなRubyスクリプトがあります。 require_relative "a-1" require_relative "a-2" p 'a l…

ruby.wasmのrequire_relativeでfetchする

ruby.wasmをブラウザで動かす時require_relativeを相対パスへのfetchに置き換えられる? - @ledsun blog で ruby.wasm ハックアイデアを思いつきました。 実際にやってみます。 packages/npm-packages/ruby-wasm-wasi/src/browser.script.ts に次のようなコ…

ruby.wasmのハックの仕方

ruby.wasmをブラウザで動かす時require_relativeを相対パスへのfetchに置き換えられる? - @ledsun blog で、ruby.wasmをハックしようと考えました。 実際どうすればハック出来るのかよくわかりません。 irb.wasm がgem関数でgemインストール出来ることがわ…

ruby.wasmをブラウザで動かす時require_relativeを相対パスへのfetchに置き換えられる?

Enable src attribute in script tag in browser.script.iife.js. by ledsun · Pull Request #49 · ruby/ruby.wasm · GitHub が取り込まれたので使ってみました。 <script defer src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@0.3.0-2022-10-01-a/dist/browser.script.iife.js"></script> <script type="text/ruby" src="main.rb">…

久しぶりに見知らぬリポジトリにプルリクエストを作成した

プルリクエストを作りました RubyをWebAssemblyで動かすruby.wasmを、ブラウザで動かす時に便利なJavaScriptにbrowser.script.iife.jsがあります。 <script type="text/ruby">にインラインで書いたRubyスクリプトを実行してくれます。 これにsrc属性の対応を追加するパッチです。 アイ…

https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@0.3.0-2022-09-06-f/dist/browser.script.iife.js のsrc属性対応

ruby.wasm/browser.script.ts at d92d1a82256c12604a1e6e15e1269f6d11a81af3 · ruby/ruby.wasm · GitHub を次のようにすれば良いじゃん簡単じゃん?と思っていました。 if (tag.type === "text/ruby") { if (tag.hasAttribute('src')){ const response = awa…

RubyスクリプトをWebAssembly化したRubyランタイムで動かす

wordleの候補をgrepするRubyスクリプト - @ledsun blogをブラウザで動くようにしたいと思います。 ruby.wasm/lucky.html at main · ruby/ruby.wasm · GitHub を参考にして実装していきます。 <html> <script src="https://cdn.jsdelivr.net/npm/ruby-head-wasm-wasi@0.3.0-2022-09-06-f/dist/browser.script.iife.js"></script> <script type="text/ruby"> require "js" di…</html>