1K Views
March 24, 25
スライド概要
mirror
hello world
Fukuoka.rb #397 2025.03.19 於 SmartHR 九州支社
Fukuoka.rb .where(location: “SmartHR”) .first
RubyKaigiで通らなかった方の プロポーザル 2025.03.19 Fukuoka.rb なんと397回 近藤 うちお (@udzura) SmartHR プロダクトエンジニア
自己紹介 近藤 宇智朗 (@udzura) 株式会社 SmartHR プロダクトエンジニア 労務基本機能担当 RubyKaigi 2025 Speaker!! 好きなRubyメソッド : String#unpack 好きなSmartHRの機能: 申請
RubyKaigi プロポーザルの様子です
もう一つのプロポーザル ...
前提知識
https://rubykaigi.org/2024/presentations/udzura.html#day2
mruby/edge とは何だったのか ・Rustで書いたmruby VM ・Rustで全部書いてるので、WASMにコンパイルするのが簡単
プロポーザルの要約 : mruby/edgeをComponent Model 対応させたり色々の話
プロポーザルの要約 : mruby/edgeをComponent Model 対応させたり色々の話
WASM Component Model? ・WASM同士や、WASMと外部プログラムをいい感じに 連携するための仕組み(極めて大雑把な説明) ・WASM Componentを組み合わせて別のComponentを 作ったりもできる
Gemini に説明を書かせたよ WebAssembly Component Modelとは WebAssembly Component Modelは、Wasmモジュールを相互運用可能な形で組み合わ せるためのアーキテクチャです。従来の Wasm Core仕様では、モジュール間の相互運用 性が乏しく、実装者が注意深く開発する必要がありました 。Component Modelは、この課 題を解決するために、高水準な標準インターフェースを定義することで、 Wasmモジュール の再利用性と相互運用性を向上させます。 ...
例: WASI と Component Model ・WASI = WasmでOSの機能を使う規約的なやつ ・WASI preview 1 (0.1) は素朴なimport関数 ・WASI preview 2 (0.2) は... Component のインタフェースとして定義されている(WIT) どれをサポートするか、実装は正しいか、など対応しやすく
https://qiita.com/tomoyafujita/items/d6c2e6029d6a133c3674
WASI と Component Model ・WITという形式で インタフェースを定義している ・protobuf/gRPCのような側面
イメージ画像 wasmCloudの説明より https://wasmcloud.com/
Component Model is 難しい... ・要するにシンプル組み合わせでアプリを作りやすくなるよ! ということではありますが... 過渡期なので情報もなく... ・Component Modelが普及したら言語問わずWASMを作れて 組み合わせることが簡単・安全になるよ!という理解でOK
まあ難しい話は 置いときましょう
mruby/edgeの 進捗報告
RubyKaigi 2024 段階
これは動く
2024 時点でのマイルストーンというか ... ・ぶっちゃけ「Demo用のfib()が動く」がゴール... ・でも、WASMらしく動かすための機能は作っておいた 🆗 ・関数のimport/export対応 ・最低限文字列の取り扱い
時は流れ
最近実装したもの
まず、VM 書き換えをした ・mruby/c 1.2の実装を ガン見してRust化した https://udzura.hatenablog.jp/entry/2025/01/03/192950
mruby/edge の最近実装した機能 https://udzura.hatenablog.jp/entry/2025/02/11/212824
この後実装した機能 ・例外の実装 ・まあまあ ちゃんと動く❓ ・setjmp使ってません (Resultベース)
つまり? ・ほぼRubyになった ・なんなら、 mruby/c よりちょっとRubyめいている
mruby/c では このコードは動かない (よね?はず)
細かい話 ・mruby/c はProcオブジェクトを作った環境が捨てられてしまったら、 もう参照できない。 ・環境をキャプチャする分のメモリを節約するため、捨てている ※ エスパー含む感想です (レジスタをスタックが積まれるごとにシフトしてるイメージ) ・これは、mruby/edgeでは動くようにした。 https://qiita.com/HirohitoHigashi/items/14ffd29e1c23e6989191#%E3%82 %AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3 参照
今後やりたいこと ・普通のRubyの機能実装(せめてmruby/c 3.0ぐらいには) ・Module, 各種メタプロ, キーワード引数, break あたり優先 ・何より標準ライブラリをね... ・逆にTimeとかRandomとかサポートしてもいいと思ってる (WASIビルドfeatureには対応してる)
コントリビュータ募集中です
Demoがてら: wasmbotsの話
wasmbots とは...
Gemini 、頼むよ WasmBots:WebAssemblyで動くボットによるマルチプレイヤーゲーム 想像してみてください。ダンジョン探索ゲームで、あなたのコーディングスキルが成功を左右する世界を。 WasmBotsは、まさにそんな世界を実現する、進 行中のプロジェクトです。WebAssembly(Wasm)モジュールを使用して、軽量なダンジョン探索ゲームをプレイすることができます。 ランダムに生成され たダンジョンを、それぞれ異なるプログラミング言語( Zig、Go、C、Rustなど)で書かれた複数のボットが探索します。全てのボットが同じように賢いわけで はなく、中には円を描いて走り回っているだけのボットもいるかもしれません。しかし、 WasmBotsはAIの賢さよりも、システムの機能性について焦点を当て ています。 WasmBotsは、Shane Liesegang氏によって開発されています。WasmBotsの開発の歴史については、に記載されている "history.md" ファイルで詳しく 知ることができます。WasmBotsの最新ビルドは常にGitHub Pagesで公開されていますが、正式なデプロイ先は別のサイトです。 WasmBotsはマルチプレイヤーゲームであり、全てのプレイヤーはボットとして参加します。 プレイヤーは、Wasmモジュールを使用して独自のボットを作 成し、ダンジョンに送り込むことができます。ボットは、ダンジョン内を移動したり、アイテムを収集したり、他のボットと戦ったりすることができます。
動いている様子
https://shaneliesegang.com/projects/wasmbots/app/
wasmbotsの対応言語 ・C/C++ ・Rust ・Zig ・AssemblyScript ・tinygo、など...
実は、 Rubyでも遊べます
コードです (画面に映し ながら説明) https://github.com/udzura/mrubyedge/tree/master/mec/examples/wasmbots
本当に動くよ! demo https://shaneliesegang.com/projects/wasmbots/app/
まとめ
最近やったことの紹介でした ・RustでmrubyのVMを作った ・割とRubyになった ・標準的 or WASIなwasmバイナリを吐き出せる ・色々と使えるはず(プラグイン用WASMとかね)
コントリビュータ募集中です