Ruby 3における型 - 新しい型記述言語 RBS を紹介します。
(developer.squareup.com)Ruby 3からTypeScriptのような型アノテーションが追加されます。MatzとRubyコミッターチームがRubyに静的型を導入するにあたって、どのような課題を検討し、どのような解決方法を使ったのかを説明した記事です。以下は要約です。
Ruby 3では新しい言語であるRBSが追加され、これはRuby 3とともに提供されます。
RBSはRubyの型アノテーションのための言語です。
- 導入の背景
( untype は動的型として訳しています。)
型付きと動的型付けはプログラミング言語における長年の対立であり、動的型付けは素早い開発が可能ですが、チームやコードベースを拡大する際に問題があり、型付きは大規模開発には適していますが、柔軟性は下がります。
両方式の長所を得るために、C#は実行時まで型チェックを遅らせる dynamic 機能を、PHPとPythonは型検査オプションを、TypeScriptは型が指定されていない言語のための型言語を選びました。
Rubyは両方式の長所を得るために、標準の型記述言語であるRBSを作りました。
- RBSはどのようなものですか?
RBSはC/C++/ObjCの .h やTypeScriptの .d.ts に似ています。この方式の利点は、既存のRubyファイルを修正せずに型チェックの恩恵を受けられることです。
RBSではそのクラスの属性やメソッドの型を定義します。RBSはRubyプログラムの構造を説明する言語であり、開発者にコードの概要と定義されたクラスおよびメソッドを提供します。最大の利点は、実装と実行の両方に対して型定義を確認できることです。
- RBSの中核機能
動的言語の型システム開発は、すでに静的に型付けされた言語とは異なります。すでに世の中には多くのRubyコードがあり、Ruby向けの型システムは可能な限り多くのコードをサポートする必要がありました。
そこで、Rubyコードの二つの重要な特性と、RBSの解決方法を紹介します。
- ダックタイピング
ダックタイピングは型は分からなくても、特定のメソッドがあることを前提に書く手法です。RBSはこの手法をサポートするために interface を導入し、引数がそのメソッドを持っているか確認できるようにしました。
- 非均一性
式が異なる型の値を持てるようにする別のコードパターンです。Rubyでも人気があり、RBSもunion型のサポートとメソッドオーバーロードによってこれを可能にします。
- 型とともに行うRubyプログラミング
RBSの主な利点を紹介します。
-
より多くのバグを見つけられる。
-
Nil安全性
-
より良いIDE統合。
-
ダックタイピングのガイド
3件のコメント
https://crystal-lang.org - CrystalがRBSとどのような関係を持つのか気になりますね。(CrystalはRubyの文法を取り入れたコンパイル言語です。)
; m; 文章が途中で何度も切れてしまったため、コードはすべて削除しました。意図せずスパムのようになってしまい、申し訳ありません T_T..
あっ、コード内の < が原因みたいですね。この記事の本文にコードが入ることは想定していなかったので ^^;
今後はMarkdownの一部だけを導入して拡張してみようかと思っていますが、そのときに検討します。