Кажется, в высшей степени возможно создать систему типов, которая классифицирует характеристику производительности типов(например, «быстрый / медленный для последовательного доступа», «быстрый / медленный для произвольного доступа», «эффективная / неэффективная память»). Эти характеристики могут быть абстрактными типами, помещенными в иерархию таким образом, что более конкретные типы наследуются от них. Однако производительность любой программы, использующей эти типы, будет зависеть от того, как они на самом деле используются / к которым обращаются. Для системы типов, которая делает заявления о самой программе, использование этих типов (доступ к ним) должно быть представлено в виде типов. Это означало бы отказ от использования встроенных управляющих структур (например, для циклов for / while) и вместо этого использования типов, которые их реализуют. Следовательно, иерархия может иметь абстрактный тип последовательного доступа и наследующий список последовательный доступ, дерево последовательный типы доступа и так далее.Тогда эффективность использования может быть, по крайней мере, частично выражена сочетанием и применением этих типов друг к другу.
В функциональном языке, таком как Haskell, который в любом случае практически не имеет структур управления, это выглядит для меня довольно практичным и осуществимым. В Java, однако, такая система кажется гораздо менее достижимым (не так много от реализации , как от исполнимости / достоверности результата).
Haskell уже позволяет нам окончательно заявить, насколько чистая программа, и предоставляет способы ограничить определенные действия в запечатанных коробках. Поскольку параллелизм / параллелизм в Haskell реализуется через систему типов , можно утверждать, что это уже часть пути (к тому, что вы хотите). Напротив, императивные языки (даже статически типизированные, такие как Java) предлагают кодеру много, много способов подорвать любую попытку этого.
if condition then expensive_operation else cheap_operation
?