一些函数式编程语言是否在语法上适应更好的性能?

时间:2009-05-25 11:03:42

标签: syntax functional-programming theory

我听说使用某些语言(RoR)时生产力的提高。我也听说过一些VM比其他VM更优化(GHC?)。还有一些人试图通过改进底层架构(Unladen Swallow)来优化他们的选择语言

然而,在阅读论文(“SSA是函数式编程”)时,我有一个问题,即根据语法的特定语言是否(有一天)能够成为具有最佳性能的语言。

我想我要问的是,无论一个特定的语法,是理论上最适合生成最佳机器代码的。 我会对任何意见的基础理论非常感兴趣 - 我正在和一些朋友讨论这个问题,我们正在讨论关于特定语法的信息内容的想法。

请注意我所说的语言至少具有一流的功能 - 请不要ASM。

4 个答案:

答案 0 :(得分:3)

这是非常主观的

语言的语法只是表达所需语义的一种方法。它是驱动性能的语义。 “语法的性能影响”等于语义的性能影响,因为过去的语法分析语法通常是无关紧要的。

语义的性能含义归结为运行那些语义的环境。这就是我们拥有CPU和GPU的原因,因为它们每个都可以更快地执行给定低级语言的语义。

如果没有明确说明目标环境,就没有真正的答案。一组机器将更好地处理并发程序,并且存在表达并发性的语法,例如Erlang。

您应该关注的是广义虚拟机或环境如何为广泛的语义提供最佳性能。例如,如果您将Erlang语法移植到JVM,虚拟机是否可以识别该语言是单一分配和并发而不需要锁定?它能为此优化吗?无堆栈虚拟机是尝试根据所需语义提高有效通用环境的一个很好的例子。

真正的问题是:环境是否可以针对类或受限制的语义集进行优化,当环境按照定义时,一般?

我建议学习一些关于编译器的知识(以及语法停止的问题),然后查看类似LLVM的内容,然后重新问自己这个问题。至于功能语言是否更适合性能取决于环境,转换正在(多核,分布式,小型嵌入式设备)中执行。

答案 1 :(得分:3)

来自blog entry about c vs. ocaml

  

Objective-Caml字节码解释器比精心手动优化的C程序更快!为什么?因为OCaml编译器可以识别出数组是完全独立的 - 所以它不需要担心循环的一次迭代踩到另一个使用的值。 C编译器无法应用许多有用的优化,因为它无法确定它们是否有效。

然而,与语法无关。

答案 2 :(得分:2)

没有。所有渴望表现的功能语言都转化为类似于lambda演算的核心语言。不同编译器的核心语言彼此相似,远远超过原始语法。并且任何语法都将被编译成核心语言,从中可以继续使用本机代码。所以在本机代码编译器中,具体语法永远不会影响性能

如果您正在谈论像Lua编译器这样的高速单程字节码编译器(Lua完全支持类似于Scheme的第一类函数),那么答案可能会有所不同 - 如果编译器为了快速编译而不是优秀的代码而设计,您可能能够通过具体的语法来提高性能。一个示例可能是caseswitch语句而不是嵌套if

答案 3 :(得分:0)

GHC至少将Haskell代码编译成C然后编译,因此它不可能比用C编写的相同算法更快,对吧?在最好的情况下,它可以同样有效,而且只有良好的优化编译器。从Haskell-> C转换生成的代码非常不灵活,每个指令都会重复大块代码,因此可能会更糟糕。

现在有人说,我认为语言的库是决定语言最适合的语言,而不是实际语言本身(假设它具有可接受的性能),所以这不是最好的问题。