RBS v3.3.0がリリースされたのでリリースノートを読んでみたいと思います。
https://github.com/ruby/rbs/wiki/Release-Note-3.3
Add rbs diff
command
新コマンド追加です。
https://github.com/ruby/rbs/issues/1448
にPR作者の意気込みが書かれていますね。
例えばgem_rbs_collectionへPRを出す時に、RBSの自動生成をしたものだと差分が大きくて何が変わったのか、なにか抜け落ちてないか見抜くのは困難になります。そこで、結局何が変わったのかメソッド単位で差分を突き合わせて、「増えたもの」「減ったもの」「変わったもの」を抜き出して表示する。しかもPRに貼り付けることを意識してのmarkdown table形式や、CLI出力を意識しての色付きdiff形式等、出力形態も選べるようです。しかもこういう調査は結果さえわかればいいので手軽に実行したい。なのでいちいちスクリプトを書いて実行するのはしんどい。よって新コマンド追加というわけですかね。
なるほど、現実的な課題に向かい合った結果の機能追加というわけですね。
Add --todo
option to rbs prototype runtime
これもPR作者の意気込みが書かれた文章が見つかりました。
https://github.com/ruby/rbs/issues/1449
内容をエスパーすると、最初の動機は上記のrbs diff
コマンドを実験していた時に実際に実行したときのinstance_methods
なりとRBS定義とをdiffで比較してみると、意外とRBSの定義漏れを発見できて便利なんじゃないか?と思ったようですね。
そこからrbs diff
コマンドとは分離して、rbs todo
コマンドを想像したようですが、pockeさんから「rbs prototype runtime
と絡めるといいんじゃないか」という助言をもらい、rbs prototype runtime
のオプションとする案に落ち着いたようです。あくまでエスパーです。
このオプションを使うと、実際には存在するんだけど、RBSはまだ無いものだけをプロトタイプとして生成してくれるもののようです。
実際のデモでもIO
のような組み込みクラスでも、まだ実装されていないメソッドが見つかっています。
「RBSになにか貢献したいなあ」と思っている方も、これを使ってまだ無いメソッドを探してPRで追加することができそうですね。
Add __todo__
type
これは名前から察するに、上記の--todo
オプションと関連するかと思いきや、実は関係ない変更です。たまたま名前が被ったようですね。
__todo__
は、ほぼuntyped
と同じですが、"なんでもいいよ"という意味のuntyped
と、"まだ決めれてないよ"という意味のuntyped
を分けて管理できるようにしたんじゃないかと思います。
prototypeの出力こそまさに__todo__
向きかも?
Additional syntactic validation with rbs validate
rbs validate
でチェックする項目が増えました。引数にvoid
を使ったり、定数にself
を使ったり等、型の使い方を間違えていると教えてくれるようになったようです。間違うとどう動くんだろ。
新しく追加されたエラーはwarning的な扱いですが、将来的には文法エラーとして実装予定らしいのでこのエラーを見たらすぐに修正するとよさそうです。
Delete sources:
section from rbs_collection.lock.yaml
rbs_collection.lock.yaml
ファイルのsources:
セクションは実はもう使ってないので削除されたようです。
ついでのCHANGELOGも読む
Signature updates
coreの型が数多く修正されています。ほとんど同じ人がやっていて、数がすごい。
Library changes
バグ修正が多いですが、少しピックアップしてみましょう。
Show location of type by method command (#1537)
rbs method
コマンドの出力として、型情報が記述されているファイルの場所が出力されるようになったようです。型情報を直したい時にすぐに見つけれて便利かも。
Better support for inherited class of Struct
or Data
by prototype runtime #1571
Struct
やData
を継承したclassの場合にいい感じにプロトタイプが出力されるようになったようです。
This will be one of the most important improvements in RBS 3.3. 🎉
なんかすごそうですね。
Struct
やData
によって作られたclassの型をどう書くかという問題は度々議論に上がっていましたが、この変更によってある程度の回答とできそうですね。
[prototype runtime] Add --autoload
option (#1561)
rbs prototype runtimeはautoload
の壁を越えれないという弱点があったのですが、--autoload
というオプションをつければ限界を超えれるようです。将来的にデフォルトで有効になりそうな感じで書かれています。
[prototype runtime] Optimize performance (#1495)
マイクロベンチマークによると、classが1万個ある場合だと、100sから1sと100倍早くなってます。Railsアプリケーションとかだとそれぐらいいくので嬉しそうです。
[Collection] Simple colorize collection text like Bundler (#1558)
rbs collection
コマンドでBundlerのように色がつくようになったみたいです。色がつくとなんかちゃんとしてる感があっていいですね。