Closed5

Ruby 3.3.0のアップデートについて調べる

nasanasa

パーサー

新しいパーサーPrismがdefault gemとして導入された。

default gemはRuby本体に同梱しているgemでという意味。
つまり新しくgemをインストールせずに下記のコードが動く。

require 'prism'

pp Prism.parse("100.times { puts it }")

PrismはまだRuby本体(今後CRubyと呼ぶ)では利用されておらず試験段階。
--parser-prismオプションを指定することで利用できる。

$ ruby --help
...
  --parser={parse.y|prism}
  --parser=prism
                  the parser used to parse Ruby code (experimental)

現在のパーサー(parse.y)と比べたPrismのメリットは下記が挙げられている。

  • ポータビリティ
  • エラートレラント
  • 保守性

パーサー開発者やRubyでの開発時にはPrismの恩恵が得られそう。
また、本番で使ってみることに対してはそこまで恩恵が無さそう?

速くなっているのであれば使ってみたいがプログラム全体の速度改善への寄与度は低そう。

計測せずに喋っちゃっているので誰か計測してみて欲しい

もっと知りたい方向けリンク

nasanasa

M:Nスケジューラー

RubyスレッドのスケジューラーとしてM:Nスケジューラーが追加された。
こちらもデフォルトではまだ有効になっていない。

M:NスケジューラーはN個のネイティブスレッド(OSスレッド)の上でM個のグリーンスレッド(Rubyスレッド)を動かすってやつ。

https://zenn.dev/nasa/articles/compare_rust_go_concurrency から引用

あまり理解出来ていないがRactorのパフォーマンス向上を目的としているもののRactorスケジューラーではなくRubyスレッドのスケジューラーっぽい?

Ractorはgroutineのようなタスクの単位だと思っているけどあっているのかな?
その場合 OSスレッド、Rubyスレッド、Ractorの三段構造になっている?
うーん。分からぬ。

もっと知りたい方向けリンク集

nasanasa

YJIT

いろんなパフォーマンス改善が入っている。

  • JITコンパイルされたコードのメタデータでメモリを食っていたがこれを減らした
  • 様々な速度改善(よく分からなかったので無視。。)
    • Rubyで書かれたNESエミュレーターの実行速度がインタプリタと比較して3倍になったらしい(すごい)

YJITはあまり詳しくないので詳細なブログのリンクを

このスクラップは2024/01/01にクローズされました