ドリコムのエンジニアの伊波です。
こちらの記事では、RubyKaigi2018の2日目に発表されたセッションの中から2つを紹介したいと思います。
Guild Prototype
Ruby 3で導入予定の並列処理モデルGuildについてのセッションでした。
Guildは複数のThreadで構成され、異なるGuildは並列に実行されるというモデルです。
例えば以下のコードでは2つのGuild を生成しており、expr1とexpr2 は並列に実行されます。
g1 = Guild.new do expr1 end g2 = Guild.new do expr2 end
セッションでは
・Guild間のobjectのやり取りで使用されるshareableとnon-shareableなobjectの考え方、実際のデータのやり取りの方式(Actor Model) 等のGuildの詳細
・実際にGuildでフィボナッチ数列やwordcountを実行した際のベンチマーク結果の考察
等がありました。
現在のGuild自体はまだまだ課題はあるようで、同期処理を減らしたり、 GC を行うとグローバルなロックが発生し、全てのGuildの実行を止めてしまうので、Guild 単体での GC の実装をしなければならないとのことでした。
extend your own programming language
RubyでつくるRubyという書籍で登場するRubyで書かれた小さなRubyインタプリタ(minruby)を拡張していくというセッションでした。
このminruby は小さいインタプリタですが、bootstrap(minrubyでminrubyを動かす)にも対応しています。
セッションでは最初はArrayを操作するbuiltin funcitonの追加から、末尾呼び出し最適化、最終的にはLindaという並列処理糊言語のevalをminruby上で実装して、並列処理を記述できるところまでminrubyの拡張を行っていました。
私自身この書籍を読んだことがあり、minrubyの存在を知っていたため、自分でも好きな機能を拡張したいと感じました。
2日目の感想
2日目は並列処理モデルのGuildやTypeChecker, Type ProfilerなどのRuby 3に大きく関わるセッションもあり、面白い内容でした。
明日でイベント自体は終了ですが、楽しんでいきたいと思います。
また、明日はドリコムのスポンサーセッションもあるのでぜひ会場に足をお運びください。