Haskell(带有GHC
编译器)是一个比你想象的要快得多。如果使用得当,它可以接近低级语言。(Haskellers最喜欢做的一件事是尝试在C语言的5%之内(甚至超过它,但这意味着你在使用一个低效的C程序,因为GHC将Haskell编译为C语言)。)我的问题是,为什么?
Haskell是声明性的,并且基于lambda演算。机器架构显然是必要的,大致上基于图灵机。事实上,Haskell甚至没有一个具体的评估顺序。此外,与处理机器数据类型不同,您一直都在使用代数数据类型。
最奇怪的是高阶函数。您可能会认为,动态地创建函数并将它们到处扔,会使程序变慢。的确,要优化Haskell代码,你需要让它更优雅和抽象,而不是更像机器。Haskell的更高级的功能似乎甚至影响它的性能,如果他们不提高它。
抱歉,如果这听起来是咆哮,但这是我的问题:为什么Haskell(用GHC编译)这么快,考虑到它的抽象性质和与物理机器的区别?
注意:我之所以说C和其他命令式语言有点类似于图灵机(但没有到Haskell类似于Lambda Calculus的程度),是因为在命令式语言中,您有有限数量的状态(也就是行号),以及一个磁带(ram),这样状态和当前磁带就决定了对磁带做什么。关于从图灵机到计算机的转变,请参阅维基百科的条目图灵机当量。