关于haskell性能的常识

eps*_*lbe 8 performance haskell

你好Haskellers在那里!

我觉得有关性能的问题经常出现,并且关于哪些函数/算法/库快速稳定的知识很少.

当然有一些库Criterion允许自己进行测量,并且有一个可以调用的分析器

> ghc -O2 --make program.hs -prof -auto-all
> ./program +RTS -s
Run Code Online (Sandbox Code Playgroud)

正如@DonStewart在用于分析Haskell程序性能的工具中所解释的那样

我知道:

  • 使用readshow通常是一个瓶颈(对于数字的read功能,有Numeric一个性能加速的包
  • 还有是Sequence,Array,VectorMap库,这往往是更适合来解决,而不是用列表或嵌套列表的问题
  • Text并且Bytestring是比String更好的选择
  • 我最近看到,即使使用标准数字生成器也会显着减慢程序速度,而且mwc-random速度要快得多.
  • Python的答案也比编译的Haskell更快?透露,标准排序算法肯定是可以改进的
  • 的使用Int,而不是Integer,BangPatterns和严格的褶皱常常产生性能的提高
  • conduitpipes为"stricten" IO,(我不得不承认我没有使用尚未)
  • 类型签名通常是一种改进

还有哪些常见的陷阱和瓶颈?

怎么解决?

我想到的主题是:

  • 功能
  • 数据结构
  • 算法
  • LANGUAGE扩展(GHC)?
  • 编译选项?