継承とパラメトリックポリモーフィズム(「ジェネリック」)の概念を、特に分散に関してだけでなく、どのように(「構文」)どこで(使用サイト/宣言サイト)行う必要があるかという観点からも、一般的に統一できるのではないかと思います。定義されますか?
この観点を考慮してください:
- たとえば、サブタイピング
S <: T
は共変動作として認識できます。これは、受け入れる入力引数T
がも受け入れるためS
です。 - 「継承モデルの分散」を不変に変更することは、サブタイピングを禁止することによって定義側でのみ可能です(たとえば
final
、クラス定義に修飾子を追加する)。ほとんどの場合、逆分散は不可能です。 - パラメトリックポリモーフィズムはデフォルトでは不変ですが、共/逆変にすることができます
考慮して、両方の間に無視できない概念の不一致があるようです
- 「安全でない」共分散を許可することによって言語が生み出した苦痛(
String[] <: Object[]
Java / C#など) - 継承と比較して、継承/パラメトリック多型が宣言および使用される方法の違い
一部の言語では、両方がうまく連携していることがわかります。
class Foo extends Ordered[Foo]
順序付け/比較動作を実装します。
- 継承とパラメトリックポリモーフィズムの概念を統一して、同じデフォルトの分散動作を取得できると考えられますか(たとえば、デフォルトで共分散、または代わりにほとんどのタイプを不変アノテーションでマークする必要があるため、醜さを別のポイントに移動するだけです) )?これは、データ構造もデフォルトで不変になるかのように、より実用的でしょうか?
- これが健全であることが証明されている正式なシステムはありますか?
- 具体的なプログラミング言語に関係なく、どの構文オプション/変更が最も必要になる可能性がありますか?
- これ/類似のものがすでに機能しているいくつかの実用的な例または言語はありますか?