Uma coisa que me ocorreu no outro dia, são tipos específicos ainda necessários ou um legado que está nos impedindo. O que quero dizer é: realmente precisamos de short, int, long, bigint etc etc.
Eu entendo o raciocínio, variáveis / objetos são mantidos na memória, a memória precisa ser alocada e, portanto, precisamos saber quão grande pode ser uma variável. Mas, realmente, uma linguagem de programação moderna não deveria ser capaz de lidar com "tipos adaptativos", isto é, se algo é alocado apenas no intervalo curto, ele usa menos bytes e se algo é alocado repentinamente em um número muito grande, a memória é alocada de acordo com essa instância em particular.
Flutuação, reais e duplos são um pouco mais complicados, pois o tipo depende da precisão de que você precisa. No entanto, as strings devem ser capazes de ocupar menos memória em muitos casos (em .Net), onde ascii é usado principalmente, mas as strings buth sempre ocupam o dobro da memória devido à codificação unicode.
Um argumento para tipos específicos pode ser que isso faz parte da especificação, ou seja, por exemplo, uma variável não deve ser maior que um determinado valor, portanto, definimos isso como abreviação. Mas por que não ter restrições de tipo? Seria muito mais flexível e poderoso poder definir intervalos e valores permitidos em variáveis (e propriedades).
Percebo o imenso problema em renovar a arquitetura de tipos, uma vez que é tão fortemente integrada ao hardware subjacente e coisas como serialização podem se tornar realmente complicadas. Mas, do ponto de vista da programação, deve ser ótimo, não?
type hour is range 0 .. 23;