28

90 年代后期,我在大学里学了一点 Haskell。在当时,尽管性能已经足够,而且比人们对这种高级语言的预期要好得多,但它仍然没有什么值得大书特书的地方。

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

如果您愿意,也可以用以下术语来描述这个问题:考虑 GHC Haskell 在 90 年代中期表现不佳的情况。为了使性能更接近 2013 GHC Haskell,需要改进的前 5 个方面是什么?

4

1 回答 1

40

粗略了解每种技术的定量贡献

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

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

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

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

编译器优化

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

更好的图书馆

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

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

更好的界面

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

更好的工具

用于分析性能的更好工具

  • GHC 核心
  • 螺纹镜
  • 更好的分析器
  • 更好的 GC 工具

运行

运行时变得更智能——例如垃圾收集器明显更好

代码生成

代码生成器更好。

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

更好的成语

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

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

于 2013-04-02T08:09:22.260 回答