Static Ruby

Rubyとか別に動的型付けじゃなくてもいいよね*1っていう話をちょっと前に知り合いの人らとしてたのだが、それって別に言語処理系に手を加えなくてもできるのではないかと気付いた。


例えば、Objetクラスの適切なメソッドをオーバロードすることによって


def hoge({Array => arr1,Fixnum => num},Float)
メソッド本体
end


というようにメソッドを宣言すると、arr1という引数はArray型、numという引数はFixnum、返り値はFloatとして型付けされ、型チェックが行われるようにできたりしないのだろうか?


#可能かどうか詳しく検証はしていない


あとは、rubyコマンドのフロントエンドを作って
def Array hoge(Array arr1,Fixnum num)
メソッド本体
end
と書くと、引数と返り値のチェックをする処理をメソッド本体の上部と下部に入れたものがrubyコマンドに渡されるようにするとか。


そういうのどうでしょうか?

*1:大規模なプログラムになると結局コメントとかで引数の型と返り値の型を書くことになるだろうし