【问题标题】:Dynamic .NET language performance?动态 .NET 语言性能?
【发布时间】:2008-09-28 04:06:52
【问题描述】:

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

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

【问题讨论】:

    标签: .net performance ironpython


    【解决方案1】:

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

    【讨论】:

    • 您是否有任何证据证明“faaaaaaar 比非 .NET 同行更快”?还有什么办法可以避免 10 秒的启动时间?
    【解决方案2】:

    IronPython 实际上是目前最快的 Python 实现。对于“最快”的某些定义,至少:例如,与 CPython 相比,CLR 的启动开销巨大。此外,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 面对面。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        F# 很简单,因为 C# 和 OCaml 本身具有相似的性能特征。

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

        干杯, 乔恩·哈罗普。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-13
          相关资源
          最近更新 更多