Syntax 一些函数式编程语言在语法上是否适合提高性能?

Syntax 一些函数式编程语言在语法上是否适合提高性能?,syntax,functional-programming,theory,Syntax,Functional Programming,Theory,我听说在使用某些语言(RoR)的同时,生产力有了多方面的提高。我还听说一些虚拟机比其他虚拟机更优化(GHC?)。还有一些人试图通过改进底层架构来优化他们选择的语言(unladenswallow) 然而,在阅读一篇论文(“SSA是函数式编程”)时,我有一个问题,就是某一种特定的语言,凭借其语法,是否(有一天)能够成为性能最好的语言 我想我要问的是,从理论上讲,某一特定语法是否是产生最佳机器代码的最佳语法。 我对任何观点的基础理论都非常感兴趣——我和一些朋友讨论过这个问题,我们正在讨论关于特定语法的

我听说在使用某些语言(RoR)的同时,生产力有了多方面的提高。我还听说一些虚拟机比其他虚拟机更优化(GHC?)。还有一些人试图通过改进底层架构来优化他们选择的语言(unladenswallow)

然而,在阅读一篇论文(“SSA是函数式编程”)时,我有一个问题,就是某一种特定的语言,凭借其语法,是否(有一天)能够成为性能最好的语言

我想我要问的是,从理论上讲,某一特定语法是否是产生最佳机器代码的最佳语法。 我对任何观点的基础理论都非常感兴趣——我和一些朋友讨论过这个问题,我们正在讨论关于特定语法的信息内容的想法


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

这是非常主观的

语言的语法只是表达所需语义的一种方法。语义决定了性能。“语法的性能含义”等于语义的性能含义,因为过去的语法分析通常与语法无关。

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

如果不明确说明目标环境,就没有真正的答案。计算机集群将更好地处理并发程序,并且有表示并发性的语法,例如Erlang

您应该关注的可能是,通用虚拟机或环境如何为各种语义提供最佳性能。例如,如果您将Erlang语法移植到JVM,虚拟机能否识别出该语言是单赋值和并发的,而不需要锁?它能为此进行优化吗?无堆栈虚拟机是一个很好的例子,它试图根据所需的语义创建一个高效的通用环境

真正的问题是:当环境按定义是通用的时,是否可以针对类或约束语义集对环境进行优化?


我建议您先了解一下编译器(以及语法不再重要的地方),然后再看看LLVM之类的东西,然后再问问自己这个问题。至于函数语言是否更适合于性能,这取决于翻译所处的环境(多核、分布式、小型嵌入式设备)。

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

话虽如此,我认为一种语言的库决定了该语言最适合做什么,而不是实际的语言本身(假设它有可接受的性能),所以这不是最好的问题

来自:

客观的Caml字节码解释器比仔细手工优化的C程序快!为什么?因为OCaml编译器可以识别出数组是完全独立的——它不需要担心循环的一次迭代会影响到另一次使用的值。C编译器无法应用很多有用的优化,因为它无法确定它们是否有效


不过,这与语法无关。

不。所有追求性能的函数式语言都转换为类似于lambda演算的核心语言。不同编译器的核心语言之间的相似性远远超过它们与原始语法的相似性。任何语法都将被编译成一种核心语言,从中可以继续生成本机代码。因此,在本机代码编译器中,具体语法永远不会影响性能


如果您谈论的是一个高速单通道字节码编译器,比如编译器(Lua完全支持Scheme类的一级函数),那么答案可能会有所不同。如果编译器是为快速编译而设计的,而不是为好的代码而设计的,那么您可能能够对具体的语法进行一些改进,从而提高性能。一个例子可能是使用
case
switch
语句,而不是嵌套的
if
s.

我不完全同意,但我可以理解你的观点。例如,看一下本文(),它限制了语言的语法,以便可以应用某些优化。我完全理解您对语义的强调,但我并不担心在virtualmachine-B上实现syntax-A。让我们假设有一个神圣的VM,您有syntax-A,syntax-B。。。syntax-N.从理论上讲,哪种语法可以将底层VM推到顶峰?至于环境,我正在寻找单核桌面应用程序。我想你可能没有领会我的意思。想象一下CPU(x86)是一个神圣的虚拟机,哪种语言可以编译成最高效的机器代码?现在想象一下神圣的虚拟机是一个单元处理器,现在呢?考虑到这个“神圣的虚拟机”并不存在,而且所有的环境都是为了做好某些事情而构建的,这一点毫无意义。但是,我准备承认我自己可能没有抓住要点。你引用的论文似乎是关于将语法有效地翻译成SSA形式的。在本例中,它是关于翻译成这种形式的最佳语法。我可以设计一个intermed