8

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

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

4

4 回答 4

9

IronPython 和 IronRuby 构建在 DLR(动态语言运行时)之上,并在运行时编译为 CIL(.NET 使用的字节码)。它们比 C# 慢,但比它们的非 .NET 对应物快。据我所知,那里没有任何像样的基准,但你会看到不同之处。

于 2008-09-28T04:10:34.323 回答
7

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

IronRuby 具有与 IronPython 一样快的潜力,因为许多使 IronPython 快速的有趣特性已被提取到动态语言运行时中,IronPython 和 IronRuby(以及托管 JavaScript、动态 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.

于 2008-09-28T05:57:10.807 回答
1

目前 IronRuby 在大多数方面都很慢。总体而言,它肯定比 MRI(Matz 的 Ruby 实现)慢,尽管在某些地方它们更快。

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

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

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

于 2008-09-28T04:11:48.547 回答
1

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

F# 是显而易见的,因为 C# 和 OCaml 本身具有相似的性能特征。

IronPython 更难,因为 Python 和 C# 具有截然不同的性能特征。事实上,答案取决于 IronPython 实现本身,它将尽可能将低效的 Python 风格的评估转换为高效的 C# 风格的评估。预计 IronPython 通常会比 C# 慢很多,偶尔会在同一领域出现峰值。你可以在这里看到这个效果。

干杯,乔恩·哈罗普。

于 2008-10-19T09:51:51.543 回答