객체 지향 프로그래밍 언어를 디자인하고 함축 할 때, 어떤 시점에서 기본 유형 (예 int
: float
, double
또는 등가물)을 클래스 또는 다른 것으로 구현하는 방법을 선택해야합니다 . 분명히 C 패밀리의 언어는 클래스로 정의 하지 않는 경향이 있습니다 (자바에는 특수한 기본 유형이 있고 C #은이를 불변의 구조체로 구현합니다).
기본 유형이 클래스로 구현 될 때 (통합 계층 구조가있는 유형 시스템에서) 매우 중요한 이점을 생각할 수 있습니다. 이러한 유형은 루트 유형의 적절한 Liskov 하위 유형이 될 수 있습니다. 따라서 우리는 언어를 boxing / unboxing (명시 적 또는 암시 적), 랩퍼 유형, 특수 분산 규칙, 특수 동작 등과 복잡하게 만드는 것을 피합니다.
물론 언어 디자이너가 자신의 방식을 결정하는 이유를 부분적으로 이해할 수 있습니다. 클래스 인스턴스는 메모리 레이아웃에 vtable 또는 기타 메타 데이터가 포함될 수 있기 때문에 약간의 공간 오버 헤드가있는 경향이 있습니다. (언어가 상속을 허용하지 않는 경우).
기본 유형이 종종 클래스 가 아닌 유일한 이유는 공간 효율성 (및 특히 큰 배열에서 향상된 공간 위치) 입니까?
필자는 일반적으로 대답이 '예'라고 가정했지만 컴파일러에는 이스케이프 분석 알고리즘이 있으므로 인스턴스 (기본 유형이 아닌 모든 인스턴스)가 엄격하게 입증되면 공간 오버 헤드를 생략 할 수 있는지 여부를 추론 할 수 있습니다 노동 조합 지부.
위의 내용이 잘못 되었습니까? 아니면 누락 된 것이 있습니까?