Sound, Heuristic Type Annotation Inference for Ruby
Ruby向けの型推論をするにあたって、型システムにstructural typesが入っているとmedian: [sort!: () -> Array<Numeric>; size: () -> Numeric; '[]': (Numeric) -> Numeric] -> Numericみたく長い型が付いてしまうが、普段使う分にはmedian: Array<Numeric> -> Numericみたいなnominalな型がついた方が使いやすそう。Nominalな型をつけるとmost general typeではなくなってしまうけど。このような場合に対応するためのヒューリスティクスを入れてみた、という話。 たとえばstrutural typesが出てくるところについて、そのメソッドたちを持っているクラスの数が充分少ないなら、その部分をそのクラスのnominal typesで置き換えるような制約を追加した上で再度制約解消する。単に置き換えるのではなくて制約解消をしているのでsoundnessは守られる。
他にも、Railsとかでよく見られるように_countをsuffixとするような変数はIntegerだと決め打ちしちゃう、とかも入れている。
nekketsuuu.icon そもそもstructural typesが無ければこの問題は起きない訳だけど、どのくらい必要なんだろうな。