型システム
典型的には、プログラム中ではすべての値には1つの特定の型が付けられる(1つの型が複数の派生型を持つ場合でも)。オブジェクトやモジュール、通信路、依存関係、及び型自身にさえ型が付けられることもある。
また、型システムの理念であるコンパイル時に重点を置いたフォールトアヴォイダンスを更に推し進めている拡張的な形式体系にエフェクトシステム(英語版)というものがある。こちらではプログラム副作用をも体系化して一種の型として扱っている。
明示的(explicit)と暗黙的(implicit)は、静的型付けでのプログラム要素の型を宣言(declare)する際の性質である。
明示的な型付けとは、プログラマがその型を指名して変数を定義(宣言)するスタイルである。これはFORTRANやC言語などの手続き型プログラミングに適したものであり、大抵のプログラミング言語はこちらを採用している。
暗黙的な型付けとは、型を指名しないで変数を定義(宣言)するスタイルである。その変数の型は、等号式で結び付けられたリテラル、他の変数、リテラルと他の変数を引数にした関数、関数の組み合わせなどを再帰的に辿って解釈することで、コンパイラによって自動的に導き出される。これは型推論と呼ばれる。型推論は、関数型プログラミングの参照透過性に準拠したatom(初期リテラル)とvalue(評価値)によるデータ値表現に適したものであり、MLやHaskellなどで採用されている。従来の手続き型やオブジェクト指向プログラミング言語においても、型推論の機能を導入するケースが増えている。
コード中の数値や文字列のリテラルおよび式は型を暗示する。例えば、式 3.14 はおそらく浮動小数点数を暗示し、式 1, 2, 3 はおそらく整数のリスト(主に配列)を暗示する。リテラルがどのような型になるかは言語によって異なる。ユーザー定義のリテラルを記述することができる言語もある。リテラル自体がオブジェクトであり、変数に束縛することなくメソッドやプロパティを使用できる言語もある。