Ruby3.0リリース!
去年の話になりますが、Ruby3.0がリリースされました!
https://www.ruby-lang.org/ja/news/2020/12/25/ruby-3-0-0-released/
まだ実際に触れていないですが、今回のアップデートで気になる点を記載していきます。
パフォーマンスの向上
これがまずでかいアップデートですね。
Ruby2.0から比べて3倍のパフォーマンスになっているとのこと。
Rubyは実装のしやすさと、書きやすさや、Railsの便利さから、速度重視で開発したい場合に向いている言語として扱われてきましたが、やっぱりパフォーマンスはいつまで経っても気になる要素ではありました。
毎回改善されていますが、今回は大幅に改善されたみたいですね。これは期待大!!
並行処理の実装
並行処理がRubyの言語仕様として実装されたのもでかいですね。
今まではPararellなどのgemを使う必要がありましたが、Ractorが試験的に導入されて、並行処理ができるようになりました。
実際のコード例として、以下のようなものが書かれていますね。
def tarai(x, y, z) =
x <= y ? y : tarai(tarai(x-1, y, z),
tarai(y-1, z, x),
tarai(z-1, x, y))
require 'benchmark'
Benchmark.bm do |x|
# sequential version
x.report('seq'){ 4.times{ tarai(14, 7, 0) } }
# parallel version
x.report('par'){
4.times.map do
Ractor.new { tarai(14, 7, 0) }
end.each(&:take)
}
end
Benchmark result:
user system total real
seq 64.560736 0.001101 64.561837 ( 64.562194)
par 66.422010 0.015999 66.438009 ( 16.685797)
逐次実行したときよりも、並列化によって3.87倍の高速化しているとのことで、だいぶ処理が早くなっていますね。
また、Fiber Schedulerが導入されたことで、既存のコードを変えずに、簡単な並列処理が実施されるとのこと。
これによって、Ruby3.0にアップデートするだけで、処理がブロックされていたところで並列処理がされるようになるのは便利ですね。
普通は実装時に並列処理をするかどうか検討するものですが、様々なスタートアップの企業のコードを見てきて思うのが、速度重視で開発したことで、そういうことを検討せずに実装しているところも多いな、ということでした。
そういうところにとっては、いいアップデートですね。(ただ、そういうところの場合、Ruby3.0にアップデートするのだけでも一苦労な気もしますが、、)
静的型解析の実装
Rubyといえば、動的型付けの権化みたいな存在でしたが、とうとう静的型解析がRubyの言語仕様としてできるようになりました。
元Javaエンジニアとしては、結構こういうアップデートは好きだったりします笑(Javascriptではなく、TypeScriptのほうが好きなので)
静的型解析の方法として、「RBS」と「TypeProf」が導入されました。
「RBS」はRubyの型定義を記述する言語で、インタフェースを宣言できたりとか、言語として型で縛ることができるようになりました。
「TypeProf」はRubyパッケージに同梱された型解析ツールで、「Ruby」の柔軟性はそのまま、堅牢な静的型付け言語のメリットを享受できる未来を目指しています。こちらはまだ試験段階ということを公式のプレスリリースでも言っていますね。
他にも、2.7で警告が出ていたコードが3.0では正式に使えなくなったりしているようです。アップデートするときに一番苦戦するのはここかもですね。メジャーバージョンをアップデートするのは、レガシーなコードになればなるほど大変なので。。。
以上が、Ruby3.0でアップデートされた注目の機能でした。
個人的な所感も交えて書きましたが、全体的にはアップデートできるならしたほうがいいかなという感想です。
ただ、2.7で警告出ていたコードが使えないってなると、大規模システムになるほど難しそう。。。
こういうことがあるので、普段からなるべく警告出ているコードは使わないようにしたほうがいいですね。
また色々な記事を書いていこうと思います。