Ruby3.0がリリースされました。Ruby2の3倍の速度です。

数ヶ月前、Rubyプログラミング言語の作成者兼チーフデザイナーである松本幸弘(松本幸弘)は、Ruby  3.0がクリスマスの日リリースされると述べましたが、公式情報によると、バージョンは予定どおりに到着します。

松本氏によると、Ruby3はRuby2の3倍の速度です。

このリリースの主な目標は次のとおりです。

  • パフォーマンス
    • MJIT
  • 同時
    • リアクター
    • ファイバースケジューラ
  • タイプ(静的分析)
    • RBS
    • TypeProf

RBS

RBSは、Rubyプログラムの種類を記述するための言語です。タイプチェッカー(タイプアナライザーやRBSをサポートするその他のツールを含む)は、RBS定義を使用してRubyプログラムをよりよく理解します。開発者は、クラスとモジュールの定義(クラスで定義されたメソッド、インスタンス変数とそのタイプ、および継承/混合関係)を書き留めることができます。RBSの目標は、Rubyプログラムで一般的なパターンをサポートすることです。これにより、ユニオンタイプ、メソッドオーバーロード、ジェネリックなどの高度なタイプを記述できます。また、インターフェイスタイプを使用したダックタイピングもサポートしています。

Ruby 3.0にはrbsgemが付属しており、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はRubyの構文にいくつかの制限を導入します。次のプログラムは、2つのリアクターを使用してprime?を並列に計算します。これは、約2倍高速です。

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ブロッキング操作をインターセプトするために導入され、既存のコードを変更せずに軽量の同時実行を可能にします。

現在サポートされているクラス/メソッド:

  • Mutex#lock、  Mutex#unlock、 Mutex#sleep
  • ConditionVariable#wait
  • Queue#pop、 SizedQueue#push
  • Thread#join
  • Kernel#sleep
  • IO#wait、  IO#read、 IO#write など、および関連する方法、  #wait_readable、  #gets、 #puts 
  • サポートしません IO#select 

Ruby 3は、単一行マッチングモードも再設計しました。

追加=>:

0 => a
p a #=> 0

{b: 0, c: 1} => {b:}
p b #=> 0

inはtrue / falseを返すために使用されます。

# version 3.0
0 in 1 #=> false

# version 2.7
0 in 1 #=> raise NoMatchingPatternError

詳細については、リリースノートを参照してください。

https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released

ダウンロード:

  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.gz

    SIZE: 19539509
    SHA1: 233873708c1ce9fdc295e0ef1c25e64f9b98b062
    SHA256: a13ed141a1c18eb967aac1e33f4d6ad5f21be1ac543c344e0d6feeee54af8e28
    SHA512: e62f4f63dc12cff424e8a09adc06477e1fa1ee2a9b2b6e28ca22fd52a211e8b8891c0045d47935014a83f2df2d6fc7c8a4fd87f01e63c585afc5ef753e1dd1c1
    
  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.tar.xz

    SIZE: 14374176
    SHA1: c142899d70a1326c5a71311b17168f98c15e5d89
    SHA256: 68bfaeef027b6ccd0032504a68ae69721a70e97d921ff328c0c8836c798f6cb1
    SHA512: 2a23c2894e62e24bb20cec6b2a016b66d7df05083668726b6f70af8338211cfec417aa3624290d1f5ccd130f65ee7b52b5db7d428abc4a9460459c9a5dd1a450
    
  • https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.0.zip

    SIZE: 23862057
    SHA1: 2a9629102d71c7fe7f31a8c91f64e570a40d093c
    SHA256: a5e4fa7dc5434a7259e9a29527eeea2c99eeb5e82708f66bb07731233bc860f4
    SHA512: e5bf742309d79f05ec1bd1861106f4b103e4819ca2b92a826423ff451465b49573a917cb893d43a98852435966323e2820a4b9f9377f36cf771b8c658f80fa5b
    

おすすめ

転載: www.oschina.net/news/124640/ruby-3-0-released
おすすめ