Ao projetar e implantar uma linguagem de programação orientada a objetos, em algum momento é preciso fazer uma escolha sobre a implementação de tipos fundamentais (como int
, float
, double
ou equivalentes) como classes ou outra coisa. Claramente, as linguagens da família C tendem a não defini-las como classes (Java possui tipos primitivos especiais, o C # as implementa como estruturas imutáveis, etc.).
Posso pensar em uma vantagem muito importante quando tipos fundamentais são implementados como classes (em um sistema de tipos com uma hierarquia unificada): esses tipos podem ser subtipos apropriados de Liskov do tipo raiz. Assim, evitamos complicar o idioma com boxe / unboxing (explícito ou implícito), tipos de wrapper, regras especiais de variação, comportamento especial etc.
Claro, eu posso entender parcialmente por que os designers de linguagem decidem da maneira que fazem: as instâncias de classe tendem a ter uma sobrecarga espacial (porque as instâncias podem conter uma tabela de dados ou outros metadados em seu layout de memória), que as primitivas / estruturas não precisam have (se o idioma não permitir herança nesses).
A eficiência espacial (e a localização espacial aprimorada, especialmente em matrizes grandes) são a única razão pela qual tipos fundamentais geralmente não são classes?
Geralmente, eu suponho que a resposta seja sim, mas os compiladores têm algoritmos de análise de escape e, portanto, podem deduzir se podem (seletivamente) omitir a sobrecarga espacial quando uma instância (qualquer instância, não apenas um tipo fundamental) é estritamente estrita. local.
O que foi dito acima está errado ou há algo que esteja faltando?