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からの変更点を含め詳細はこちらで確認可能です。
タイトル | Ruby | |
---|---|---|
公式サイト | http://www.ruby-lang.org/ja/ | |
ソフトアンテナ | https://softantenna.com/softwares/1964-ruby | |
説明 | オブジェクト指向スクリプト言語。 |