Ruby 3.0.0 Preview 1がリリース - RBSやRactor、Schedulerなど多数の新機能が追加

S 20200926 91615

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からの変更点を含め詳細はこちらで確認可能です。

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

スポンサーリンク