Parece eminentemente possível criar um sistema de tipos que categorize a característica de desempenho dos tipos(por exemplo, "rápido / lento para acesso serial", rápido / lento para acesso aleatório "," memória eficiente / ineficiente "). Essas características podem ser tipos abstratos colocados na hierarquia de maneira que os tipos mais concretos herdados deles. No entanto, o desempenho de qualquer programa usando esses tipos depende da maneira como eles são realmente usados / acessados.Para o sistema de tipos fazer declarações sobre o próprio programa, o uso de (acesso a) esses tipos deve ser representado como tipos Isso significaria renunciar ao uso de estruturas de controle internas (por exemplo, loops for / while) e, em vez disso, usar tipos que as implementam.Portanto, a hierarquia pode ter um tipo de acesso serial abstrato e uma lista descendente de acesso serial, árvore-serial tipos de acesso e assim por diante.A eficiência do uso pode então ser pelo menos parcialmente expressa pela combinação e aplicação desses tipos um ao outro.
Em uma linguagem funcional como Haskell - que quase não tem estruturas de controle - isso me parece bastante prático e obrigatório. Em Java, no entanto, tal sistema uma parece muito menos realizáveis (não tão muito com a implementação a partir da exigibilidade / confiabilidade do resultado).
Haskell já nos permite declarar definitivamente quanto de um programa é puro e fornece maneiras de limitar atividades específicas dentro de caixas seladas. Como o paralelismo / simultaneidade em Haskell é implementado por meio do sistema de tipos , pode-se argumentar que ele já faz parte do caminho para lá (do que você deseja). Por outro lado, linguagens imperativas (mesmo as estaticamente tipadas como Java) oferecem ao codificador muitas e muitas maneiras de subverter qualquer tentativa de fazê-lo.
if condition then expensive_operation else cheap_operation
?