动态.NET语言性能?

时间:2020-03-06 14:50:22  来源:igfitidea点击:

我知道IronPython是.NET平台上Python的实现,就像IronRuby是Ruby和Fis或者多或者少的OCaml的实现一样。

我似乎无法理解的是,这些语言的表现是否更接近于其"祖先"或者更接近于Cin的速度。例如,IronPython是否会以某种方式"编译"为Cand所使用的相同字节码,因此运行速度会一样快吗?

解决方案

IronPython和IronRuby建立在DLR(动态语言运行时)之上,并被即时编译为CIL(.NET使用的字节码)。它们的速度比Cbut慢,但比非.NET的速度慢。据我所知,目前尚无任何不错的基准测试,但我们会发现其中的区别。

目前,IronRuby在大多数方面都相当缓慢。总体来说,它肯定比MRI(Matz的Ruby实施)要慢,尽管在某些地方它们要快一些。

IronRuby确实有可能变得更快,尽管我怀疑它们的速度是否会接近Cin。在大多数情况下,这无关紧要。例如,数据库调用可能占Web请求总持续时间的90%。

我怀疑团队会追求语言的完整性而不是性能。这将允许我们在1.0发行时运行IronRuby并运行大多数ruby程序,然后它们可以随着性能的提高而提高。

我怀疑IronPython也有类似的故事。

IronPython实际上是目前最快的Python实现。至少对于"最快"的定义是:例如,与CPython相比,CLR的启动开销非常大。同样,优化的编译器IronPython仅在多次执行代码时才有意义。

IronRuby具有与IronPython一样快的潜力,因为许多使IronPython快速的有趣功能已被提取到Dynamic Language Runtime中,在该语言上,IronPython和IronRuby(以及托管JavaScript,Dynamic VB,IronScheme,VistaSmalltalk等)被建造。

通常,语言实现的速度在很大程度上与实际的语言功能无关,而在很大程度上取决于其中所涉及的工程学年数。 IOW:动态与静态无关紧要,金钱却无关紧要。

例如,Common Lisp是一种比Ruby或者Python更动态的语言,但是有一些Common Lisp编译器甚至可以让C赚钱。良好的Smalltalk实现可以和Java一样快(这并不奇怪,因为主要的JVM,Sun HotSpot和IBM J9实际上都是经过稍微修改的Smalltalk VM)或者C ++。在过去的6个月中,主要的JavaScript实现(Mozilla TraceMonkey,Apple SquirrelFish Extreme和即将推出的新产品Google V8)实现了10倍甚至更多的显着性能改进,从而使JavaScript与优化的C。

通过假设现代.NET实现的性能介于祖先和C#之间,我们将有一个正确的想法。原因是Cis与.NET本身非常匹配。

毫不费力,因为Cand OCaml本身具有类似的性能特征。

IronPython的难度更大,因为Python和Chave的性能特征大相径庭。实际上,答案取决于IronPython实现本身,该实现将努力将低效的Python风格的评估转换为高效的C#风格的评估。预计IronPython通常会比C慢很多,并且偶尔会出现峰值进入相同区域的情况。我们可以在这里看到这种效果。

干杯,
乔恩·哈罗普(Jon Harrop)。