哪些技术对Haskell的性能提升贡献最大?

时间:2013-04-01 20:11:08

标签: haskell ghc

我在90年代后期在大学学到了一些Haskell。当时,虽然表现足够并且比人们对这种高级语言所期望的要好得多,但仍然没有什么可写回家的。

事情发生了变化。 Haskell(GHC)今天具有很好的性能,通常离C / C ++不远。那么,编译器中究竟发生了哪些变化,对这一改进贡献最大?我知道经常使用的几种技术,例如更好的拆箱和严格分析。我想要的是对这些技术对整体性能改进的定量贡献有一些粗略的了解。

如果您愿意,问题也可以用以下术语表达:考虑到90年代中期GHC Haskell的不太出色的表现。将性能提升到接近2013 GHC Haskell的前5个领域是什么?

1 个答案:

答案 0 :(得分:39)

  

关于每种技术的定量贡献的粗略概念

这个问题的问题在于它在细节层面上基本上是无法回答的。

15年来,软件堆栈的所有方面,从用户代码和习惯用语到库,编译器优化,代码生成和运行时都得到了改进。几年来,性能一直是十几个开发人员的主要关注点。

因此,已经进行了数千次更改,从而实现了我们今天从GHC获得的性能。 没有简单的清单。

这是一个快速列表,表明这个问题有多广泛和无法解决。

编译器优化

改进的编译器优化使每项改进达到1%至15%。

更好的图书馆

改进的库可能会对特定域产生巨大影响。例如。对于我们现在拥有的数组和字符串数据:

这通常比列表版本好10倍。

更好的界面

更好的编写快速代码的接口

更好的工具

更好的分析效果的工具

  • GHC核心
  • threadscope
  • 更好的探究者
  • 更好的GC工具

<强>运行

运行时变得更聪明 - 例如垃圾收集器明显更好

代码生成

代码生成器更好。

  • 而不是生成C,GHC targets LLVM将某些阵列程序提高了25%,有些提高了100%。
  • 本机代码生成器也被重写和改进。

更好的习语

最后,编写快速代码的习语现在是far far more widely understood.

因此,您可以命名软件堆栈中的任何位置,并且已经发生了几个百分点的改进。在运行时,编译器和库设计方面也有重大突破。