性能类型系统


11

是否存在试图使程序的性能特征形式化的(静态)类型系统?我似乎找不到找到这样的尝试。

由于类型系统是程序员中有关程序声明的最强大的工具(之一),并且由于在许多情况下性能至关重要,因此想像已尝试进行尝试似乎并不为过。创建一个类型系统,尝试至少对程序的存储和运行时特性做出一些声明。


1
您的类型系统会对的性能说些if condition then expensive_operation else cheap_operation什么?
svick 2015年

我知道使用抽象解释自动推断出代码(和终止)的最坏情况下的复杂性已有发展。您可能对此感兴趣...
Bakuriu 2015年

并不完全相关,但仍然:kernelnewbies.org/FAQ/LikelyUnlikely在Linux内核/ gcc编译器中,可能/不太可能使用宏来优化某些路径。EGif (likely(operation_went_fine)) { // Do something } else if (unlikely(error_occured)) { // Do something else }
AmazingDreams

我想到了C中的volatile和register关键字。
mattnz

Answers:


6

您可以想象一个足以与WCET或程序复杂度相关的类型系统。然后,问题是要使声音类型分析器(或检查器)(即键入规则)使其成为可能,并有效地实施它以使其合理地有用。

大多数类型系统都很简单,可以在实践中快速计算(至少对于人类开发人员可以手动编写的合理程序集)。

一些学术编程语言(例如AGDA)具有非常复杂的类型系统,这些系统是图灵完备的,因此它们的编译器可能会花费大量(也许是无限的)时间。

(如果我理解得很好,JérémieSalvucci在巴黎LIP6上正在进行的博士工作与您的问题很相关;我已向他发送了一封电子邮件给您;您可能会寻找地区和类型...)。

但是要注意赖斯定理停止问题。类型系统可能并不总是您想成为的灵丹妙药(请参阅旧的无灵丹妙药书)。


4
在这种情况下,WCET是“最坏案例执行时间”(万一我想知道的话)
Klaas van Schelven 2015年

9
相依类型的语言(例如Agda,Coq,Epigram,Guru,Isabelle等)通过不具备图灵完备性来“解决”停止问题,赖斯定理和朋友。通过构造(即不可能编写无限循环/非终止递归),或者要求所有程序必须以终止检查器可以证明终止的方式编写,或者要求程序员提交一个机器可检查的终止证明。
约尔格W¯¯米塔格

3

这似乎突出地可以创建一个类型系统categorises的性能特性类型(例如,“快速/慢速进行串行访问,”快速/慢速进行随机访问”,“内存有效/效率低下”)。这些特征可以是抽象类型,可以将抽象特性从层次结构继承而来。但是,使用这些类型的任何程序的性能都取决于它们的实际使用/访问方式,为了使类型系统对程序本身进行声明,使用(访问)这些类型的方法必须将自身表示为类型这将意味着放弃使用内置的控制结构(例如for / while循环),而是使用实现它们的类型,因此该层次结构可能具有抽象的串行访问类型和后代list-serial-access,tree-serial -访问类型等等。然后,使用效率可以至少部分地由这些类型彼此组合和应用来表达。

在像Haskell这样的功能语言中-几乎没有任何控制结构-在我看来这是相当实用可执行的。在Java中,然而,这样的系统似乎要少得多实现(没有这么多从实现从结果的可执行性/可信)。

Haskell已经允许我们确定一个程序的纯净程度,并提供将特定活动限制在密封盒中的方式。由于Haskell中的并行性/并发性是通过类型系统实现,因此可以说它已经成为实现(想要的)方式的一部分。相比之下,命令式语言(甚至是Java等静态类型的语言)也为编码器提供了许多种颠覆这种尝试的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.