🎉

【Ruby 3.4 Advent Calender】Ractor 内での require がサポートされた【12日目】

2024/12/12に公開

Ruby 3.4 Advent Calender 12日目の記事です。

これはなに

今年 2024年12月25日にリリースされる予定の Ruby 3.4 の新機能や変更点などを1つずつ紹介していく Advent Calender になります。
基本的には NEWS に載っている機能を紹介すると思うんですがここにない機能についても書くかもしれません。
また、記事を書いてる時点ではまだ Ruby 3.4 はリリースされる前なので Ruby 3.4 がリリースされた時点で機能が変わっている 可能性があるかもしれないので注意してください。
記事のまとめは ここを参照 してください。

Ractor 内で require がサポートされた

Ruby 3.4 Ractorrequire が許可されるようになりました。
次のようなコードは Ruby 3.3 ではエラーになっていたんですが Ruby 3.4 からは動くようになります。

Ractor.new {
  # Ractor 内で require できるようになった
  require "json"
  require "pp"

  json = <<~EOS
    {
      "id": 1,
      "name": "homu",
      "age": 14
    }
  EOS
  pp JSON.parse(json)
  # => {"id" => 1, "name" => "homu", "age" => 14}
}.take

このときの requireRactor のメインプロセスで実行されます。
Ractor 内で pp ができないのが地味に不便だったのでこれは便利ですね。

また、それに付随して Ractor のメインプロセスかどうかを判定する Ractor.main? メソッドも追加されました。

def check
  Ractor.main?
end

p Ractor.main?   # = > 0

Ractor.new {
  p check   # => false
}.take

p Ractor.main?   # = > 0

メインプロセスの場合は true ではなくて 0 が返ってくるんですねー。

関連

GitHubで編集を提案

Discussion