Tracemonkeyの発想を借りる事になるけど、
最初は型情報をソースコード中に書いてなくても
一度でも実行すれば少なくともメソッドの引数の型くらいは分かるわけだし
型情報を実行してからメタすればいいんじゃねとか思う
最初にメタされた型以外が渡されたら警告でも出す

型が分かってるなら部分的にネイティブコンパイルも可能になる
型安全性を高めたい時のみ
.rbのソースコード本体とは別に .rb_neitive とかいう型情報のファイルをおいて
.rb_neitiveの型情報を見ながら.rbを実行させていく

.rb_neitiveはスクリプト本体をテスト走行させた時に実行したメソッドに渡された型などを集積して生成する
そしてネイティブコンパイル出来るメソッドは引数型固定してネイティブにしてしまう

これによって失うものは
def func a
end
func 1
func "test"
とかいう最初と2回目以降で違う型の引数を(基本的に)渡してはいけなくなる事
もし渡された場合は、そこでエラーとして扱って実行をとめるか、ネイティブではなくインタプリタ側のコードを実行するか

得られるものは、
.rb_neitiveに集積できたメソッドに関してだけは速度と型安全性が高まる事