Parece eminentemente posible crear un sistema de tipos que clasifique la característica de rendimiento de los tipos(por ejemplo, "rápido / lento para acceso en serie," rápido / lento para acceso aleatorio "," memoria eficiente / ineficiente "). Esos rasgos podrían ser tipos abstractos colocados en la jerarquía de tal manera que los tipos más concretos heredaran de ellos. Sin embargo, el rendimiento de cualquier programa que use esos tipos dependerá de la forma en que realmente se usen / accedan. Para que el sistema de tipos haga declaraciones sobre el programa en sí, el uso de (acceso a) esos tipos debería representarse como tipos Esto significaría renunciar al uso de estructuras de control integradas (por ejemplo, bucles for / while) y, en su lugar, usar tipos que las implementen. Por lo tanto, la jerarquía podría tener un tipo de acceso en serie abstracto y un acceso en serie descendente, en serie en árbol -tipos de acceso, etc.La eficiencia del uso podría expresarse, al menos en parte, mediante la combinación y aplicación de estos tipos entre sí.
En un lenguaje funcional como Haskell, que casi no tiene estructuras de control de todos modos, esto me parece bastante práctico y exigible. En Java, sin embargo, un sistema de ese tipo parece mucho menos alcanzable (no por lo tanto de la aplicación como de la aplicabilidad / fiabilidad del resultado).
Haskell ya nos permite establecer definitivamente cuánto de un programa es puro y proporciona formas de limitar actividades particulares dentro de cajas selladas. Dado que el paralelismo / concurrencia en Haskell se implementa a través del sistema de tipos , se podría argumentar que ya es parte del camino (a lo que desea). Por el contrario, los lenguajes imperativos (incluso los de tipo estático como Java) ofrecen al codificador muchas, muchas formas de subvertir cualquier intento de hacerlo.
if condition then expensive_operation else cheap_operation?