型の互換性
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/30 09:44 UTC 版)
静的型付き言語の型検査では、すべての式の型がその式が現れた文脈で期待される型と一貫しているか、検証しなければならない。たとえば、x := eという代入文では式eの推論される型は変数xの宣言型または推論型と一貫していなければならない。この一貫性の概念を互換性といい、プログラミング言語ごとに固有のものである。 明らかなように、eとxの型が同一でかつその型への代入操作が許可されているなら、これは正当な式である。したがって最も単純な型システムでは、2つの型が互換であるかどうかは2つの型が同一である(または等価である)かどうか(等価性)という単純な問題に置き換えることができる。別の言語では2つの式が同じ型を持つと理解されるのに別の基準を採用している。これら、型の「同一性理論」は非常に多岐にわたっており、2つの対極の例は構造的型システムと名前的型システムとである。構造的型システムとは外部に見せている構造(インタフェース、特に暗黙的なもの)が同じものを持つ値を同じ型であるとするもので、名前的型システムとは型宣言の構文からのみ型の同一性を判定する(型が同じ「名前」を持たなければならない)ものである。 オブジェクト指向言語のように基底型と派生型の関係がある言語では、互換性の関係はより複雑なものとなる。型Derivedが型Baseの派生型であるとすると、Derived型の値はBase型の値が必要とされる文脈で使用することができる(リスコフの置換原則)。しかし逆は真ではない。等価性と同様に派生型の関係はプログラミング言語によって異なった方法で定義され、多くのバリエーションが存在しうる。@media screen{.mw-parser-output .fix-domain{border-bottom:dashed 1px}}パラメータ付けされたまたはアドホックなポリモーフィズムを持つ言語の存在は型の互換性に何らかの意味を持つのかもしれない。[要説明]
※この「型の互換性」の解説は、「型システム」の解説の一部です。
「型の互換性」を含む「型システム」の記事については、「型システム」の概要を参照ください。
- 型の互換性のページへのリンク