型システム
型システム(かたシステム、英: type system)は、コンピュータプログラミングの数々の構成要素および値に対して、型(type)と呼ばれる特性を付与するための数々の規則群から成立している形式体系である。型の付与は、型付け(typing)と言われる。例えば、変数・式・関数・モジュール・オブジェクトなどが型の付与対象になり、それらの型付け要素を規則的な関係でまとめたデータ構造にも型は付与されてカテゴライズされる。
型システムの目的は、プログラムエラーとバグの発生を抑止することである。そのための型安全性とは、各計算および各オペレーションでの型エラー(不正計算、ロジックエラー、バッファオーバーフロー、不正ポインタなど)の発生を防止することと同義になる。
型システムは、一般的に型理論をベースにしている。
明示的型変換によって、ビット列と数値型を変換する。アドレス値と数値型を変換する。文字型/文字列と数値型を変換する。レコードのバイト列を切り詰めたり拡張したりして基底レコードと派生レコードを変換するなど。
静的(static)と動的(dynamic)は、プログラム要素の型を検査(check)する際の性質である。これは検査タイミングを示している。
プログラムの実行前(コンパイル時、インタプリタ開始時)に型検査を行うのが静的型付けであり、プログラムを実行しながら型検査を行うのが動的型付けである。Javaは一般に静的型付け(静的型付き言語)であるが、ダウンキャストは明示する必要があり実行時に型検査を受ける。Common Lispは一般に動的型付け(動的型付き言語)だが、type specifierという静的に型を指定する文法も持っている。このように、ある程度は混在している言語もある。さらに、静的検査が行われるタイミングについても、コンパイル時の他リンク時やインタプリタのソースコード読み込み時といった場合もありえるため、簡単に見た目では分類できないこともある。