RubyKaigi2026
Day1
RubyBox
古いlibと新しいlibを別のBoxに隔離して動かせそう
taiseiue.icon つまりグローバル変数的なものは全部とじるということ
パッケージングへの布石になりそう
クラスやメソッドはBoxに所属する
所属しているBoxを検出する必要がある
taiseiue.icon こういう操作感
code:rb
box = new Box();
box.import("hoge");
box.hoge.foo();
基底状態ではmainというBoxに所属していることになっている
mainからboxにコンテキストが動く
内部では変数と同じ理屈になっている
コントロールフレーム内部にENVというのがあって、それが環境情報を保持していそう
Stackの扱い
メモリ空間を0,1,... とコントロールフレームが、last,last-1とENVが消費する
Multiverse Ruby
Back to the roots of date
Dateライブラリのメンテナがいなくて大変
Dateライブラリの実装もやめたい
mruby on C#
2階建ての製品って結構おおい
WeztermがRustにluaのってたりとか
GHAがC#にYAMLのってたりとか
C#/Unityなゲームで動かしたい
ゲームは出荷時から変更しづらい
相互運用していそうなコード
GCが管理のために使っていそうな値をいれるとこわれる
パフォーマンス改善
バイトマシンでオペコードが1つずつくる
パースせずにダイレクトコピーするといい
structを用意しておく
Rapid Start: Faster Internet Connections, with Ruby's Help
ACKが返るたびに倍に帯域を増やしていく
返らなくなれば増加をやめる
Kingdom of the Machine
Prism話題
Pratt Parser
結合規則(Binding power)
素朴にやるとあいまい性が発生する
LR Parser
現在と次のBinding powerを比較して処理する
Anti-BNF
1...みたいな構文について
Rustにはトークンを始められるかを判定する関数がある
Digits * Digits * Digits
1*2*....*1000*1001とかだと、
1*2*3*4*5*6よりも、(1*2) * (3 * 4)と最適化できる
A Faster FFI
ForingFunction Interface
いわゆるネイティブコールのこと
ネイティブ関数の呼出規則はアーキテクチャに依存するためいい感じにマーシャリングしてやる必要がある C拡張の速さと同じくらいにするにはJITが必要
型変換をJITでできれば速くなるのでは?