我只用它们的代码大小来比较语言枪战游戏中的语言.以下是我得到的摘要(最短的,按类似得分分组).
Python,Ruby,JavaScript,Perl,Lua,PHP,Mozart/OZ
OCaml,Erlang,Racket,Go,Scala,F#,Smalltalk
Pascal,Clean,Haskell,Common Lisp,C#,Java,C
C++,Ada,ATS
我想知道为什么.获奖者似乎是普通的动态语言.Erlang,Racket(néePLTScheme)和F#都做得很好.Haskell和Common Lisp看起来并不比声称要冗长的Java更简洁.
更新:
我用图表找到了关于这个主题的深刻见解.我还发现了一个类似的语言对比较大的程序(一个简单的光线跟踪器).总而言之,我不会说我得到了"答案",但我得到了一些思考.
如果功能语言真的很简洁......
1 - 大型编程与小型编程不同.
关于那些微小基准游戏程序的任何内容都不应被视为每种语言提供的抽象和模块化如何适用于大型编程的示例.
2 -您在基准测试游戏摘要页面中看到的大部分内容仅指为每种语言实现贡献最快的程序(较慢的程序通常会在一段时间后从网站中删除 - 何时删除哪些较慢的程序几乎是任意的).
{编辑:Adam,因为你不想接受我的说法,即摘要页面只引用最快的程序 - 查看过滤数据行的脚本 "哪种编程语言最好?" 页.查看lib_scorecard.php中函数ValidRowsAndMins中的第80行和第82行--Alioth发布自己的安全证书,以便您的浏览器会抱怨.}
因此,以Haskell为例,您将看到已经贡献的最快Haskell程序的代码大小.
3 -没有一个流星比赛项目被删除,流星比赛是一个没有限制的编程比赛 - 最小的流星比赛Haskell项目是最慢的流星比赛Haskell项目.
没有语言总是优于另一种语言(好吧,有一些例外......;)),因此同样适用于一组广泛分类的语言.基准涵盖了广泛的主题,而X可能不如Y更适合.
源代码是gzip,我们真的不知道程序的长度是多少行(是的,这是一个指标)
相当多的函数式语言仍然比广泛使用的命令式静态语言做得更好 - 并不是函数式编程语言不简洁,但动态语言允许更简洁的程序
至少在Haskell中,简洁性的潜力来自于您可以自己构建的抽象 - 但您必须自己构建它们并将它们包含在您的解决方案中.一个聪明的Haskell黑客可以在20行中实现一个monad,允许在20行而不是30行中解决一个小问题 - 抽象不会为小程序带来好处,但可以在更大的行中节省许多行(例如,200行代替300)计划.我猜这同样适用于Lisps(只有宏而不是monad)
不要太过认真对待粉丝.FP非常棒,值得研究,但它不能治愈癌症,并且不会将任何代码神奇缩短25%
他们仍然可以在某些领域击败动态语言:例如,由于代数数据类型和模式匹配,树状数据结构及其处理在许多函数语言中表现得非常自然.
这似乎是一个鞭打的机会:
有统计学研究表明Python"更有效率"吗?
关键是,最初的问题是尝试使用一些(微不足道的,不适当的)数据来概括编程语言之间的比较.但实际上,几乎不可能使用任何数据对编程语言进行任何合理的一般定量比较.
不过,这里有一些值得思考的东西:
在所有条件相同的情况下,动态类型语言可能更简洁,因为它们不需要花时间描述数据类型
在所有条件相同的情况下,在静态类型语言中,类型推断语言可能让我更简洁,因为它们不需要在整个地方声明类型
在所有条件相同的情况下,在静态类型语言中,具有泛型/模板的语言更可能是简洁的,因为没有它们的语言需要重复的代码或强制转换和间接
在所有条件相同的情况下,具有简洁lambda语法的语言可能更简洁,因为lambda可能是编程中最重要的抽象,以避免重复和样板
也就是说,所有的事情都不平等,而不是一蹴而就.