6
将基本类型(如int)实现为类的注意事项是什么?
设计和implenting面向对象的编程语言时,在某些时候你必须做出有关实现基本类型的选择(例如int,float,double或等价物)类或其他什么东西。显然,C系列语言倾向于不将其定义为类(Java具有特殊的原始类型,C#将其实现为不可变的结构,等等)。 当基本类型实现为类时(在具有统一层次结构的类型系统中),我可以想到一个非常重要的优势:这些类型可以是根类型的适当Liskov子类型。因此,我们避免使用装箱/拆箱(显式或隐式),包装器类型,特殊方差规则,特殊行为等使语言复杂化。 当然,我可以部分理解语言设计者为什么要决定他们的工作方式:类实例往往会有一些空间开销(因为实例可能在其内存布局中包含vtable或其他元数据),因此原语/结构不需要拥有(如果语言不允许继承这些语言)。 空间效率(以及改善的空间局部性,尤其是在大型阵列中)是基本类型通常不是类的唯一原因吗? 我通常认为答案是肯定的,但是编译器具有转义分析算法,因此当实例(任何实例,不仅仅是基本类型)被证明是严格的时,它们可以推断出是否可以(有选择地)忽略空间开销本地。 以上是错误的,还是我还缺少其他东西?