私が歌川です

@utgwkk が書いている

人間の注意力には限界があり,どうしても型エラーは回避できない. そういったときに,静的型の言語であればコンパイル時に,あるいは IDE の機能によってエラーを出す,といった運用が可能である. 動的型の言語でも最近では型ヒントやすごい IDE の力によってそういったことができるようになってきつつあるように感じるが,それはそうとしてプログラムは依然として実行可能である. 動的型であれば型を気にせず書ける,というのはやはり幻想であるという思いを強くしており,それに近いのは型推論機構のある静的型言語である. 型を何も気にしなくてもよい,というのは言いすぎであるが,型推論が自動でふさわしい型を判定してくれるため,我々はそれに従って書くことに注力できる. 間違った型が混在したプログラムは実行されない.

つい最近にも,動的型の言語を書いているとどうしてもつらいんです,という思いを吐露したことがあり,それでもやはり長く書いているためサクッと書くことができるのだが,製品レベルのコードになると,静的型がない分のコストがかかっているという印象がある*1. 漸進的型付けという選択肢は,動的型であり続けたいが,しかし保守のコストをもう少し下げたい,という思いから来ているのではなかろうか. 構文レベルで型ヒントを導入する,とあるが,しかしやはり依然としてドキュメントとしての型に過ぎず,実際に制約をかける存在としての型ではない*2

大学の実験で型推論機構付きインタプリタを書いていて,型推論の仕組みが少しだけ分かってきたという段階にある.

*1:違う型のオブジェクトが投げられたらエラー,というテストを書くのにも嫌気がさしてくる.

*2:もちろん mypy のチェックに落ちたら絶対にデプロイさせない,みたいな選択はできるだろう.