2019年4月18日から20日まで、福岡国際会議場でRubyKaigi 2019が開催されました。1日目の基調講演は、Rubyの作者である、まつもとゆきひろさんです。
まつもとさんは「The Year of Concurrency」というタイトルで、Ruby3で取り入れる改善点とRubyのこれからについて発表しました。Ruby3についての構想は以前から話がありましたが、今回の発表ではより現実味を帯びた内容となりました。
静的解析の導入
Rubyと同様のスクリプト言語(インタープリタ型言語)であるPython、PHP、Perlでは静的型を導入しており、Rubyも型を導入するべきでは、と長年言われてきました。しかしまつもとさんは「Rubyに型を取り入れたくない(DRYではないから)」、「型宣言することはコンピュータに使われているような気になる」と述べ、Rubyでは静的型は導入しない方針を示しました。その代わり、静的解析を導入し、型チェックを行えるようにすることを明らかにしました。
Ruby3の静的解析は、以下によって実現します。
- 型を定義するための外部ファイル(.rbi ファイル)
- ライブラリの型定義
- プログラムから型情報を集め、すでに存在する型情報との矛盾を判定するTypeProfiler
- solbetやsteepなどの静的型チェックツール
これによりRubyのプログラムはそのままで、型のチェックが行えるようになります。
また、TypeProfilerやYARDの情報から.rbiファイルを自動生成することも現在検討中とのこと。
静的解析に期待してほしい、とまつもとさんは述べました。
パフォーマンスの改善
Rubyは「遅い」と昔から言われてきました。しかし、Ruby2.6でMJITを導入するなど、速度の改善に力を入れています。Ruby3ではさらなるパフォーマンス改善を目指します。
パフォーマンスのボトルネックはメモリ、CPU、I/Oでそれぞれ抱えており、問題を解消する対処方法は異なります。
メモリの問題を解消するためにはガベージコレクションの改善が重要になり、CPUの問題を解消するためには本基調講演のタイトルでもあるConcurrency(並行実行)を改善する、より良いモデルを提供していく必要があるとまつもとさんは言います。
これまでのRubyのConcurrencyモデルは、マルチプロセス、マルチスレッド、マルチファイバーを提供していますが、パフォーマンス改善の点でそれぞれ課題があります。そこでRuby3では、より良い安全なConcurrencyモデルとして、マルチコアに対応したGuildを導入すると述べました。これまでRubyはスレッドセーフを実現するためマルチコアの恩恵を受けることができませんでしたが、Guildは書き換え不可能なオブジェクトと一部の特殊オブジェクトをマルチコア間で共有できるため、大幅なパフォーマンス改善を可能にします。
最後にI/Oの問題を解消するためには、シングルスレッドで高速処理を実現するNode.jsのノンブロッキングI/Oを参考に改善策を検討していると述べました。
賢く前進する
まつもとさんは「マルチコアの時代を予想できず、Rubyにスレッドを入れたことは後悔している」、「Ruby2で導入したキーワード引数には問題点が多く、Ruby3では非互換の変更を予定している」など、これまでの選択で失敗だったと思うことがたくさんあると語りました。
現在のRubyは多くのユーザが使っており、一度決めた判断を覆すことが難しいと言います。だからこそ今後は、一つ一つの選択をないがしろにせず、進むスピードが遅くなったとしても賢く選択し前進していく方針であると述べました。
Rubyを前進させる理由は「大好きなRubyが時代遅れになってほしくない」、「ユーザにRubyを使い続けて良かったと思ってもらいたい」からだと伝え、賢く前進するため「もっとこうしてほしい」、「こういう場合はどうなるか?」など、多くのアイディアを積極的に教えてほしいと呼びかけました。
まとめ
最後にまつもとさんは「Rubyは多くのコミッターのおかげで本当に良い言語になった。Ruby3は大幅なパフォーマンス改善がされるので期待してほしい。そして、今後もRubyはより良い世界を作り続けます」と締めくくりました。
(写真提供=RubyKaigi 2019)