始めに

こんにちは、enzaプラットフォーム事業本部でSREチームのエンジニアをやっている橘田です
こちらは、RubyKaigiTakeout2021 の2日目の午後の速報記事です。

1日目の午前の速報記事はこちら
1日目の午後の速報記事はこちら
2日目の午前の速報記事はこちら

include/prepend in refinements should be prohibited

Refinements はモンキーパッチを限定的に行うためのもので既存のメソッドを拡張するもの
Refinements で include や prepend を使った場合について、include した内側で Refinements の変更は反映されなくて、バグとして上がってきたので修正した話
Rubyの歴史としてパースの歴史があって、新しく入ってきた Refinements がその歴史へと立ち向かっていくという流れ
ソースコードを使いながら、立ち向かっていくので Ruby の実装の流れが確認できるのでリンク先を読んでみると良いかと思います。
将来的には、include や prepend では使えなくなるようなので何かある方は意思表示をとのこと

Ractor’s speed is not light-speed

Ractorを使ってどのようにWebアプリケーションのパフォーマンスを向上させるか
Ractorの機能としては、CPUのコアを並列で実行できるようにして、Ractor間でのobject移動、共有させている
Ractorではどのくらい早くなるのでしょうか、8コアなら8倍になるのか、プロセスをforkするより速いのか
実際にRackサーバーでのデモが実施されました
SinatraをRactorで動かそうとするとunshareableが多すぎて問題が発生します。
Ractorではunshareable objectを参照できないので、デモで2並列で負荷をかけただけでセグフォしてしまう
インスタンス変数を使っていたり、デフォルトインスタンスや frozenもdeepに指定していないとshareableにならないようなので、なかなか対応していくのは大変そうです
既存のライブラリでも対応していかないといけないものは多いのでContributionチャンスですね

Ruby Committers vs the World

Rubyコミッターが色々と答えようのコーナー
Ruby 3.1は例年通りクリスマスにリリースされる。 Ruby 3.0 で色々と機能を出したので Ruby 3.1はツールに専念しようっという形でそうなった形。
今後のRubyの方向性に関してコミッターの方が喧々諤々と話をして聴けるので、ここだけ聴くのでも良い学びになると思います。

最後に

まだまだ、RubyKaigiは続きますが、この記事は一旦ここで終了です。
明日の速報記事も楽しみにしていただければ幸いです。
ドリコムでは一緒に働くメンバーを募集しています!
募集一覧はコチラを御覧ください!