オブジェクト指向プログラミング言語を設計し、implentingすると、いくつかの点で1が基本型(のような実装の選択をする必要がありint
、float
、double
クラスまたは何か他のものとして、または同等の)。明らかに、Cファミリーの言語はそれらをクラスとして定義しない傾向があります(Javaには特別なプリミティブ型があり、C#はそれらを不変の構造体として実装します)。
基本型が(統一された階層を持つ型システムで)クラスとして実装される場合、非常に重要な利点を考えることができます。これらの型は、ルート型の適切なLiskovサブタイプになります。したがって、ボクシング/アンボクシング(明示的または暗黙的)、ラッパータイプ、特別な分散ルール、特別な動作などで言語を複雑にすることは避けます。
もちろん、言語デザイナーがその方法を決定する理由を部分的に理解することができます:クラスインスタンスは、空間のオーバーヘッドを持っている傾向がある(インスタンスのメモリレイアウトにvtableまたはその他のメタデータが含まれている可能性があるため) have(言語がそれらの継承を許可しない場合)
基本型がクラスではないことが多いのは、空間効率(および特に大きな配列での空間的局所性の向上)だけですか?
私は一般的に答えがイエスであると仮定しましたが、コンパイラにはエスケープ分析アルゴリズムがあり、インスタンス(基本タイプだけでなく任意のインスタンス)が厳密に証明されたときに空間的オーバーヘッドを(選択的に)省略できるかどうかを推測できます地元。
上記は間違っていますか、それとも私が見逃しているものがありますか?