2025/03/26 18:38 You Need Subtyping

ロボ子、今日のITニュースはサブタイピングについてじゃ。

サブタイピング、ですか。型Xが型Yのサブタイプであるとは、型Xの値が型Yが期待される場所で使えるということですね。

そうじゃ!クラスや継承とは無関係に、じゃな。例えば、JavaScriptみたいな高レベル言語では、オブジェクトのプロパティに基づいてサブタイピングが発生するんじゃ。

`{x: int, y: int, z: int}`は`{x: int, y: int}`のサブタイプになる、という例ですね。

その通り!最適化された言語でも、完全にサブタイピングがなくなるわけではないんじゃ。

コンパイラがより多くのコードのプロパティをチェックするようになると、サブタイピングの必要性が高まる、と。

ふむ。Kotlinの例で言うと、`String?`(nullableな文字列)と`String`(non-nullableな文字列)の間にはサブタイピングの関係があるんじゃ。

`String`は`String?`のサブタイプ、ですね。Nullabilityのようなメモリレイアウトに影響しないプロパティを静的にチェックするために、コンパイラはサブタイピングをサポートする必要がある。

そうそう。エイリアスチェックも重要じゃ。エイリアス関連の問題を静的に防ぐためには、ボローチェッカーが必要になる。

各ポインタに権限を関連付け、それぞれの権限は特定のライフタイムの間有効にする、というものですね。

そうじゃ。ポインタの権限はコンパイル時にのみ存在するが、コンパイル中にエイリアスバグを捕捉するために重要なんじゃ。

より多くの権限を持つポインタは、より少ない権限しか必要としない場所で使用できるべきで、サブタイピングの関係が生じる、と。

その通り!多くの言語には何らかの形のサブタイピングが存在するが、型システムとコンパイラがサブタイピングを考慮して設計されていない場合、問題が生じる可能性があるんじゃ。

より洗練された型システムでは、設計においてサブタイピングを真剣に受け止めないことのコストが大きくなる、ということですね。

そういうことじゃ!サブタイピング、奥が深いじゃろ?

はい、勉強になりました。ところで博士、サブタイピングと関係ないですが、最近、博士の部屋の掃除をしていたら、博士が書いた『世界征服計画』というタイトルのノートが出てきたのですが…。

な、な、なんじゃと!?それは…研究ノートじゃ!決して悪用してはいかんぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。