Ruby開発チームは9月25日、Ruby 3.0シリーズの最初のプレビュー版である「Ruby 3.0.0-preview1」を公開しました(ruby-lang.org)。現在公式サイトよりソースコードをダウンロード可能です。
プレビュー版は年末の正式リリースに向け、新機能のテストやフィードバックを集めるために提供されるもので、多くの新しい機能やパフォーマンスの改善が含まれています。
3.0.0 Preview 1の新機能としてはまず、Rubyプログラムの型を記述することができるRBSのサポートがあげられます。クラスやモジュールの定義をファイルに書き出し、RBSをサポートしているタイププロファイラやその他ツールから利用することが可能です。
module ChatApp VERSION: String class Channel attr_reader name: String attr_reader messages: Array[Message] attr_reader users: Array[User | Bot] # `|` means union types, `User` or `Bot`. def initialize: (String) -> void def post: (String, from: User | Bot) -> Message # Method overloading is supported. | (File, from: User | Bot) -> Message end end
またスレッドセーフを考慮することなく並列実行機能を利用するために設計されたアクターモデルのような並列抽象化機能である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
がブロッキング操作をインターセプトするために導入されました。これによりコードを変更することなく、軽量な同時実行が可能となります。
その他、右代入演算子「fib(10) => x
」や、endなしのメソッド定義「def square(x) = x * x
」、Findパターンの追加、Hash#exceptの組み込み、パフォーマンスの改良などさまざまな新機能が追加されています。
2.7からの変更点を含め詳細はこちらで確認可能です。
タイトル | Ruby | |
---|---|---|
公式サイト | http://www.ruby-lang.org/ja/ | |
ソフトアンテナ | https://softantenna.com/softwares/1964-ruby | |
説明 | オブジェクト指向スクリプト言語。 |