我最近一直在钻研函数式编程,尤其是Haskell和F#,之前的情况更甚。在谷歌上搜索了一下之后,我找不到比较突出的函数语言(Scala、F#等)的基准比较。
我知道,考虑到它们是混合语言,这对某些语言(Scala )来说不一定公平,但我只想知道哪种语言在哪些操作和总体上优于哪种语言。
发布于 2012-12-16 04:25:07
根据伟大的基准游戏,苯丙胺类兴奋剂比其他版本更快,Haskell、Scala和Common的变体之一在速度上紧跟在后面。在那之后,奥卡姆和F#的速度大致相同,球拍和格洛尔落后.
然而,几乎所有这些都没有真正的意义。这都是一个问题,机器,编译器,编码技术,在某些情况下,简单的运气。一般来说,直接机器编码语言(如Haskell )的性能将优于VM编译语言(如F# ),并且大大优于纯解释语言。通常,静态类型化语言比动态类型化语言更快,因为静态分析允许在编译时而不是运行时计算所有类型操作。同样,这些都是一般的规则,总会有例外的。“范式”与此毫无关系。
发布于 2012-12-16 07:12:58
还应该指出,您不能度量/量化编程语言的性能。您能做的最好的就是在特定的平台上度量语言的特定实现的性能,运行特定的程序。
所以,当你问到“最快的功能语言”时,你真正要问的是当前语言的最佳实现(S)。
@igouy的评论提出了一个观点,即语言执行还有其他性能衡量标准,例如编译时间。但这并没有改变这样一个事实:应用程序的运行时间是语言实现的(间接)度量,而不是语言本身的度量。
以Java为例。假设我只使用经典(Java1.0) Java的语言特性编写了一个单线程基准测试。如果我使用JDK 1.0编译和运行,我的性能会很差(因为JDK 1.0没有本机代码编译器)。如果我从JDK 1.1转到. JDK 1.7,我很可能会得到越来越好的结果。但这并不是因为Java语言的改变……因为我的基准使用的是同一个语言子集。相反,加速是由于编译器、运行时系统和/或类库的实现的改进造成的。这些都是实现问题。
另一点是,对于同一种语言,这些实现差异可能非常显著(例如数量级)。因此,语言X的最佳实现比Y语言的最佳(或仅)实现更快这一事实并不一定告诉您关于语言本身的很多信息。
发布于 2012-12-16 14:21:32
如果你只看语言的执行速度,你就遗漏了一些要点。速度是一件好事,但它不是唯一的事情。
Haskell使用一个非常健壮的类型系统来创建程序,这些程序更有可能是无bug和健壮的。
Erlang使用其内置的监视系统,允许您创建能够在各种类型的故障面前提供巨大可靠性的故障系统。此外,Erlang可以给您提供其他语言难以匹配的并发级别。
事实上,我认为在现代执行死刑的速度远远低于我在大多数情况下会考虑的范围。(好吧,如果我在做大量的数值计算,我可能会想用fortran来表示速度,但否则它就不够重要了。)
https://softwareengineering.stackexchange.com/questions/179609
复制相似问题