Ruby 3.0.0 RC1がリリース - 12月25日公開予定のRuby 3.0に向けたリリース候補

S 20201221 93926

Ruby開発チームは12月20日、Ruby 3.0シリーズ初のリリース候補「Ruby 3.0.0 RC1」を公開しました(ruby-lang.org)。12月25日公開予定のRuby 3.0に向け、フィードバックを得るためのリリースと位置づけられています。

Ruby 3.0には、多くの新機能やパフォーマンスの改良が含まれています。

まず、Rubyプログラムの型を記述することができるRBSがサポートされ、クラスやモジュールの定義をファイルに書き出し、RBSをサポートしているタイププロファイラやその他ツールから利用することが可能となっています。Ruby 3.0には、RBS言語で書かれた型定義を処理するためのライブラリであるrbs gemが同梱されています。

module ChatApp
  VERSION: String
  class Channel
    attr_reader name: String
    attr_reader messages: Array[Message]
    attr_reader users: Array[User | Bot]              # `|` は `User` か `Bot` のインスタンスを表現する「ユニオン型」です
    def initialize: (String) -> void
    def post: (String, from: User | Bot) -> Message   # メソッドオーバーロードを記述することもできます
            | (File, from: User | Bot) -> Message
  end
end

また、実験的な機能としてTypeProfと呼ばれる型解析ツールが同梱されています。TypeProfを使用し、型注釈の無い普通のRubyコードから、型シグネチャのプロトタイプをRBSフォーマットで生成することが可能となります。

さらに、スレッドセーフを考慮することなく並列実行機能を利用するために設計された、アクターモデルのような並列抽象化機能であるRactorが試験的機能として追加されています。開発者は複数のRactorを作成して並列に実行することができ、通常のオブジェクトを共有することができないため、スレッドセーフな並列プログラムを簡単に作ることができます。Ractor間の通信にはメッセージパッシングを利用します。

require 'prime'

# n.prime? with sent integers in r1, r2 run in parallel
r1, r2 = *(1..2).map do
  Ractor.new do
    n = Ractor.recv
    n.prime?
  end
end

# send parameters
r1.send 2**61 - 1
r2.send 2**61 + 15

# wait for the results of expr1, expr2
p r1.take #=> true
p r2.take #=> true

その他、ブロッキング操作をインターセプトするためのThread#schedulerの導入や、1行パターンマッチの「in」から「=>」への変更、一行メソッド定義「def square(x) = x * x」の追加、findパターンの追加、Hash#exceptの組み込み、パフォーマンスの改良などさまざまな新機能が追加されています。

2.7からの変更点を含め詳細はこちらで確認可能です。

Pc タイトル Ruby
公式サイト http://www.ruby-lang.org/ja/
ソフトアンテナ https://www.softantenna.com/softwares/1964-ruby
説明 オブジェクト指向スクリプト言語。

スポンサーリンク