动态.NET语言性能?

时间:2008-09-28 04:06:53

标签: .net performance ironpython

据我所知,IronPython是.NET平台上的Python实现,就像IronRuby是Ruby的实现一样,F#或多或少是OCaml。

我似乎无法理解的是,这些语言是否更接近他们的“祖先”,或者更接近C#这样的速度。例如,IronPython是否以某种方式“编译”到C#使用的相同字节码,因此运行速度一样快?

4 个答案:

答案 0 :(得分:9)

IronPython和IronRuby构建于DLR之上 - 动态语言运行库 - 并且即时编译为CIL(.NET使用的字节码)。它们比C#慢,但比非.NET的同类产品更快。据我所知,没有任何体面的基准,但你会看到差异。

答案 1 :(得分:7)

IronPython实际上是最快的Python实现。对于某些“最快”的定义,至少:例如,与CPython相比,CLR的启动开销是 huge 。此外,优化编译器IronPython在代码执行多次时才真正有意义。

IronRuby有可能成为同样快速的IronPython,因为许多使IronPython变得快速的有趣功能已被提取到动态语言运行时,IronPython和IronRuby(以及托管JavaScript,动态VB,IronScheme,VistaSmalltalk)和其他人)建立。

一般而言,语言实现的速度几乎与实际语言功能无关,而且更多地取决于进入它的工程人员年数。 IOW:动态与静态并不重要,金钱也是如此。

例如,Common Lisp是一种比Ruby或Python更具动态性的语言,但是有一些Common Lisp编译器甚至可以让C运行它的钱。 Good Smalltalk实现的运行速度与Java一样快(因为主要的JVM,Sun HotSpot和IBM J9,实际上只是略微修改过的Smalltalk虚拟机)或C ++,这并不奇怪。在过去的6个月中,主要的JavaScript实现(Mozilla TraceMonkey,Apple SquirrelFish Extreme以及块上的新玩家,谷歌V8)已经实现了 ginormous 性能改进,10倍甚至更高,带来了JavaScript头与未经优化的C进行对接。

答案 2 :(得分:1)

目前IronRuby在大多数方面都相当缓慢。它总体上比MRI(Matz'Ruby Implementation)整体慢,但在某些地方它们更快。

IronRuby确实有可能更快,但我怀疑他们在速度方面会接近C#。在大多数情况下,这无关紧要。例如,数据库调用可能占Web请求总持续时间的90%。

我怀疑团队会先考虑语言的完整性而不是表现。这将允许您运行IronRuby&当1.0发布时运行大多数ruby程序,然后他们可以随时改进性能。

我怀疑IronPython有类似的故事。

答案 3 :(得分:1)

通过假设现代.NET实现的性能介于祖先和C#之间,你已经有了正确的想法。原因是C#与.NET本身非常匹配。

F#是不费脑子的,因为C#和OCaml本身具有相似的性能特征。

IronPython更难,因为Python和C#具有截然不同的性能特征。实际上,答案取决于IronPython实现本身,它将尽可能地将低效的Python风格评估转换为高效的C#风格评估。期望IronPython通常比C#慢很多,偶尔的尖峰进入同一领域。您可以看到此效果here

干杯, Jon Harrop。