行の多型とサブタイピングの主な違いは何ですか


20

行多型はサブタイピングよりも優れたアプローチであるとよく耳にしますが、それらを詳細に比較するものを見つけるのは困難です。システムのユーザーの観点に特に興味があります。

このブログ記事に出くわしましたが、以前よりも多くの質問が残されています。たとえば、サブタイピングを備えたシステムは1つのタイプを割り当て、行タイプを備えたシステムは別のタイプを割り当てると主張します。これは、サブタイピングを意図しているシステムが「行タイピング」タイプを割り当てた場合、それが誤って主張していることを意味しますか?

私が見ている1つの大きな違いは、行の型付けにより引数の型を揃えることができることです(つまり、引数のaフィールドのみに関係するが、引数は同じフィールドを持つ必要がある2つの引数関数を書く) 。

回答:


10

サブタイピングでは、あるタイプの式が与えられた場合、別のタイプも与えることができます。前者は後者のサブタイプであり、このサブタイプ関係は他の多くの関係を誘発すると言います。記号で、

ΓESS<:TΓET

ここで重要なこと(および私がレビューした理由)は、同じ式に2つの異なるタイプが与えられていることです。パラメトリック多型言語で暗黙タイプのインスタンス我々は、次のサブタイプの関係を有する: すべてのタイプのT。タイプFがSystem Fのように明示的にインスタンス化されている場合、このサブタイプ関係は保持されません。ατ<:τ[T/α]T

{1A2B}<:{2B1A}{1A2B}{2B1A}STS<:TT<:S{1A2B}={2B1A}T<:T

通常、サブタイピングのある言語について話すときは、グラウンドタイプ、つまり自由変数のないタイプ(もちろん、非グラウンドタイプのサブタイピングリレーションシップを生成できる)で非自明なサブタイピング関係を持つものを意味します。したがって、Roy'sのような行ポリモーフィズムを持つシステムは、この意味でサブタイピングを持つ言語ではありませんが、暗黙的にインスタンス化されたパラメトリックポリモーフィック言語に由来する重要なサブタイプの関係はあります。一方、構造的サブタイピングでは、地盤タイプの重要なサブタイピング関係を明示的に示します。

行タイプ、Iは同等以上説明したように非自明な統一を有することを意味します。これがないと、行タイプはネストされたタプルにすぎません。行タイプはパラメトリック多相性に依存しないことに注意してください。行変数を意味するわけではありません。についての議論から上記では、構造的サブタイピングは行タイプを意味しますが、その逆は意味しません。パラメトリック多相性は、行タイプまたは構造的サブタイピングと直交しています(持つことができるかどうかという意味で、間違いなく相互作用があります)。構造的サブタイピング+パラメトリックポリモーフィズムを備えたシステムは、行タイプ+パラメトリックポリモーフィズム(ある種の「レコード結合」を想定)を包含し、後者のすべての用語は前者の同じタイプで入力できるという意味です。前者は、追加のタイプを入力することもできます。ブライアンの例を使用すると、構造サブタイプとパラメトリック多型answerを持つシステムでは、行タイプバージョンと同じタイプになりますが、サブタイプバージョンのタイプもあります。

ρ{ c : Number }情報:サブタイプからスーパータイプに移行すると、情報が失われます(タイプ)。多くの場合、これはあなたが望むものです。あなたが気にする共通のタイプがあり、他のすべては無関係な詳細です。私のバイアスは、可能な限り多くの型情報を維持し、明示的にのみ破棄することです。サブタイプのアプローチの欠点は、タイプが正しいが、タイプが(情報のない)「トップ」タイプ(空のレコードなど)にプッシュされたためだけのプログラムによってしばしば証明されます。繰り返しますが、パラメトリック多相性(一般的に)は型情報を保持し、サブタイプは意図的にそれを失います。


詳細な対応ありがとうございます!別の質問:構造サブタイプ+パラメトリック多型が行タイピング+パラメトリック多型を包含する場合、なぜ後者を使用するのでしょうか?
アレックスR

@AlexRブライアンが彼のブログ投稿で述べたように、サブタイピングは、型推論や、私が述べた人間工学の問題など、他の多くの側面との相互作用が非常に不十分です。実装と言語の複雑さの問題もあります。公平を期すために、「行タイプ」とサブタイピングの両方に幅広いデザインスペースがあるため、「subsumes」は大まかな説明です。
デレクエルキンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.