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

Jon*_*ark 27 haskell ghc

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

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

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

Don*_*art 39

关于每种技术的定量贡献的粗略想法

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

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

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

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

编译器优化

改进的编译器优化使每个改进了1到15%的全面改进.

更好的图书馆

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

  • bytestring(与列表相比提高了8倍)
  • 向量
  • repA的

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

更好的接口

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

更好的工具

更好的分析性能的工具

  • GHC核心
  • threadscope
  • 更好的剖析
  • 更好的GC工具

运行

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

代码生成

代码生成器更好.

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

更好的习语

最后,编写快速代码的习惯现在得到了更广泛的理解.

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