Subtyping sagt, wenn ein Ausdruck eines Typs gegeben ist, können wir ihm auch einen anderen Typ geben. Wir sagen, das erstere ist ein Subtyp des letzteren und diese Subtyp-Beziehung induziert viele andere Beziehungen. In Symbolen ist
Γ⊢E:SS<:TΓ⊢E:T
Der Schlüssel hier (und der Grund, warum ich es überprüft habe) ist, dass der gleiche Ausdruck zwei verschiedene Typen hat. In parametrisch polymorphen Sprachen mit impliziter Typinstanziierung haben wir die folgende Subtypisierungsbeziehung:
(∀α.τ)<:τ[T/α]T
{ℓ1:A,ℓ2:B}<:{ℓ2:B,ℓ1:A}{ ℓ1: A , ℓ2: B } ≅{ ℓ2: B , ℓ1: A }S≅T⟺S< : T∧ T< : S{ ℓ1: A , ℓ2: B } = { ℓ2: B , ℓ1: A }T< : T
Normalerweise , wenn wir über eine Sprache sprechen , mit Subtypisierung wir meinen eine mit einem nicht-triviale Subtyping Beziehung auf Bodentypen, dh Typen ohne freie Variablen (die, natürlich, kann und wird Subtypisierung Beziehungen für Nicht-Boden - Typen erzeugen). Ein System mit Zeilenpolymorphismus wie Roys ist also keine Sprache mit Subtypisierung in diesem Sinne, obwohl es die nicht-triviale Subtyp-Beziehung hat, die aus einer implizit instanziierten parametrischen polymorphen Sprache stammt. Bei der strukturellen Untertypisierung werden nicht-triviale Untertypisierungsbeziehungen für Bodentypen explizit angegeben.
( ≅)oben impliziert die strukturelle Untertypisierung Zeilentypen, aber nicht umgekehrt. Der parametrische Polymorphismus ist orthogonal zu Zeilentypen oder strukturellen Untertypen. Ein System mit struktureller Untertypisierung + parametrischem Polymorphismus subsumiert den Zeilentyp + parametrischen Polymorphismus (unter der Annahme einer Art "Datensatzvereinigung") in dem Sinne, dass jeder Ausdruck in letzterem mit demselben Typ in ersteren typisiert werden kann. Ersterer kann nur mit weiteren Typen tippen. Brians Beispiel Verwendung in einem System mit strukturellen Subtyping und parametrischer Polymorphismus answer
hätte den gleichen Typ wie in der Reihe der Eingabe - Version, aber es hätte auch den Typ der Subtyping Version als auch .
ρ{ c : Number }
information: Beim Übergang von einem Untertyp zu einem Supertyp gehen (Typ-) Informationen verloren. Dies kann oft das sein, was Sie wollen: Es gibt einen gemeinsamen Typ, den Sie interessieren, und alles andere sind irrelevante Details. Meine Neigung besteht darin, so viele Typinformationen wie möglich beizubehalten und sie nur explizit zu verwerfen. Die Nachteile des Ansatzes von Subtyping werden oft durch Programme deutlich, die typrichtig sind, aber nur, weil Typen auf einen (n informationslosen) "oberen" Typ verschoben wurden, z. B. den leeren Datensatz. Wiederholender, parametrischer Polymorphismus bewahrt (im Allgemeinen) Typinformationen, Subtypisierung verliert sie absichtlich.