Una cosa que se me ocurrió el otro día, son tipos específicos que aún son necesarios o un legado que nos está frenando. Lo que quiero decir es: ¿realmente necesitamos short, int, long, bigint, etc., etc.
Entiendo el razonamiento, las variables / objetos se mantienen en la memoria, la memoria debe asignarse y, por lo tanto, necesitamos saber qué tan grande puede ser una variable. Pero, en realidad, un lenguaje de programación moderno no debería ser capaz de manejar "tipos adaptativos", es decir, si algo solo se asigna en el rango abreviado, usa menos bytes, y si algo se asigna repentinamente a un número muy grande, la memoria se asigna acordemente para ese caso particular.
Flotante, real y doble son un poco más complicados ya que el tipo depende de la precisión que necesite. Sin embargo, las cadenas deberían ser capaces de ocupar menos memoria en muchos casos (en .Net) donde se usa principalmente ascii, pero las cadenas siempre ocupan el doble de memoria debido a la codificación unicode.
Un argumento para tipos específicos podría ser que es parte de la especificación, es decir, por ejemplo, una variable no debería ser mayor que un cierto valor, por lo que lo configuramos como shortint. Pero, ¿por qué no tener restricciones de tipo? Sería mucho más flexible y poderoso poder establecer rangos y valores permisibles en variables (y propiedades).
Me doy cuenta del inmenso problema de modernizar la arquitectura de tipos, ya que está tan estrechamente integrado con el hardware subyacente y cosas como la serialización pueden volverse realmente complicadas. Pero desde una perspectiva de programación, debería ser genial, ¿no?
fuente
type hour is range 0 .. 23;