漸進的型付けとは

漸進的型付けとは、プログラマーが静的型付けと動的型付けを選べる手法のこと、らしい。先日、仕事で「漸進的型付けって知ってる?」と聞かれて、正直初耳だったのでイメージがつかなかった。

TypeScript のように、JavaScript を拡張し、型システムを付与した言語はこの漸進的型付けに位置づけられるらしい。

JavaScript が動的型付けなのに対し、TypeScript で型が付けられる(型チェッカーによる制約をつけることができる)のは、一体どういうことなんだろうと言われてみて気になった。

動的型付け

プログラムを書く際に、プログラマーは、変数に対して値(文字列、数値)を代入するが、実際にどの型であるかのアノテーションは行わない。 プログラマーではなく、インタプリタが代入された値を見て型を付けるのが動的型付け。

いわゆるスクリプト型言語(JavaScript, PHP, Python*, Ruby) は動的型付けである。

インタプリタ(コンパイラ)が型を付けるということは、プログラムがコンパイルされるまで変数の型がわからないということである。

※ これらの言語は、言語拡張によって漸進的型付けを備えるようになった

静的型付け

動的型付けとは逆に、変数を宣言する際に型を明示的に定義する。 定義した型以外の値が扱えないようにするもの。

コンパイラ型の言語(C, C#, Java, golang) は静的型付けである。

コンパイルする前に型を付けることで、IDEやエディタが事前にバグとなりうる箇所、またはエラーを検知し、プログラマに知らせてくれる。これは静的型付けのメリットである。

また、型があらかじめわかっていると、コンパイラが最適化したマシン語に変換してくれる。つまり、実行時にとても速く動作する。

あらためて漸進的型付けとは

漸進的型チェッカー は、コンパイル時に型エラーを検出するためにプログラムを部分的にチェックしますが、他の部分はチェックしないといった型チェッカーです。それは型とともにアノテートされたプログラム部分により指示された通りにチェクします。

What is Gradual Typing:漸進的型付けとは何か -Qiita より引用

動的型付言語に後付で型宣言を追加したイメージ。アノテーション(型宣言)のない変数は any 型と仮定する。


参考


/以上