【问题标题】:Will Ruby ever be *fast*? [closed]Ruby 会*快*吗? [关闭]
【发布时间】:2009-09-17 14:58:32
【问题描述】:

Ruby 是否会像最近 Javascript 一样看到性能提升?一个新的虚拟机可以让它真的,真的,快吗?还是我们必须假设 Ruby 的所有好处都有不可避免的性能损失?

与其他更快的语言相比,可以采取哪些方法来提高其性能?

【问题讨论】:

  • 主观和论证,更不用说我看到 Ruby 社区的成员抓着干草叉和火炬。祝你好运,先生。
  • 哇,这怎么“公然冒犯”?
  • Ruby 是开源的。如果您希望它更快,您可以开始学习它的底层工作原理,融入开发社区,了解在该团队中提出更改建议的习俗和传统,然后开始帮助使其更快。
  • “我认为每个人都可以放心地认为它比其他脚本语言要慢一些”——我们如何才能安全地假设呢??
  • 我很确定 Ruby 的“好处”要求它比其他语言慢,例如 Common Lisp,它具有相当多的语言特性目前可以归咎于糟糕的表现,有不少表现良好的实施。这只是优先级问题,正如其他人指出的那样,有些人正在研究性能部分。

标签: ruby performance


【解决方案1】:

Jörg W Mittag 当我 asked about Trace Trees 找到通往其他脚本语言的路时,将我指向 Rubinius 的方向。查看它们以获得更快的 Ruby。

顺便说一句,unladen-swallow 正在尝试通过使用 LLVM 来加速 Python。

有趣的东西。有很多未开发的技巧可以加快脚本编写速度,但我想知道语言开发人员是否认为它优先于语言功能和库。

【讨论】:

  • MacRuby 也在为 Ruby 创建一个基于 LLVM 的虚拟机。
【解决方案2】:

Maglev 是一个基于现有 Smalltalk 引擎的 ruby​​ 实现,该引擎一直针对扩展和使用的上游。

它被设计为比现有的 ruby​​ 实现“明显更快”,如果您有兴趣,可以观看Maglev Architects 之一的演讲。

就像不同的 Javascript 实现在不同的浏览器上运行得更快或更慢一样,值得注意的是,ruby 本身在 Linux 和 Windows 上运行 nearly twice as fast

【讨论】:

    【解决方案3】:

    我认为每个人都可以放心地认为它比其他脚本语言要慢一些

    Ruby 1.9 实际上应该与 CPython 的速度差不多。

    【讨论】:

    • 请指定您正在谈论的 Python 实现。 CPython、Jython 和 IronPython 具有相当不同的性能特征,这三个都是“Python”。
    • 我说的是python2的C版(对python3的性​​能一无所知)和ruby 1.9的C版。
    【解决方案4】:

    JRuby 有一个 jrubyc 编译器,可以从 ruby​​ 文件创建 jvm .class 文件。没用过,只是快速看了一下,所以不知道 Ruby 支持多少字节码编译。如果它被编译成字节码,那么 jvm 应该像任何其他字节码一样优化。

    【讨论】:

    • 这里最大的优势之一是内存管理。不了解 YARV,但 MRI 在这方面非常糟糕。
    • 遗憾的是,由于某种原因,jRuby 比 Ruby 慢了很多。
    • @DigitalRoss 我听说使用 jruby 而不是脚本绑定的 jruby 比 ruby​​ 1.8 快得多。如前所述,我从未在实际项目中使用过 jruby 或 cruby。主要用于代码高尔夫。
    • Ruby 1.9 :: JRuby 1.7 -- shootout.alioth.debian.org/u32/…
    【解决方案5】:

    嗯,肯定有很大的改进空间。以下是 N 体模拟(数学密集型算法)的基准测试时间列表:http://shootout.alioth.debian.org/u32q/benchmark.php?test=nbody&lang=all

    Ruby 1.9 需要 34 分钟,而速度更快的 Web 服务器友好型语言 (C#) 只需要 37 秒。所以 C# 比这个特定任务快 50 倍以上。可以说这不是 Ruby 无论如何都会用于的任务类型。但仍然存在可扩展性的问题。

    要让 Ruby 变得更快,它确实需要以某种方式进行编译。这可以像 V8 Javascript 引擎一样采用即时方式。或者它可以更像 ASP.NET 那样在幕后维护“缓存”编译。换句话说,.NET 具有动态编译的能力,但是这样做您会注意到它需要花费大量时间。但回报是它不需要重新编译,直到代码发生变化并且正如上面的基准所暗示的那样——最终编译的代码非常快。所以我认为 Ruby(或它的变体)在这方面复制 .NET 的技术会更好。

    【讨论】:

    • 我认为 Scala 也对 Web 服务器友好,因为它在 JVM 上运行,并且比 C# (24.26) 更快。 Java 本身也比 C# 快。不过,这是一个有趣的基准。
    • (请注意,这里的 C#“只”在 Mono 上运行,而不是在 Microsoft CLR 上运行,我认为它比 Mono 快一点)。
    • 约阿希姆,感谢您收听。我稍微改写了我的答案。我仍然参考 C#,因为那是我更熟悉的。
    【解决方案6】:

    是的,Ruby 可以变得更快——至少到不再是问题的程度。

    当它与任何其他可比语言一样快时,它将不再是问题。即便如此,前提是它在可比较的功能上同样快。

    为什么?如果它比任何类似的东西都慢,那么有一种方法可以更快地做到这一点,所以这是可能的。随着 Ruby 的发展势头,它可能会变得更快。

    【讨论】:

      【解决方案7】:

      是的,Ruby 会变得更快。

      新的 Javascript 虚拟机证明,一种动态的弱类型语言可以在运行时对执行路径进行重大更改,从而有效地编译。 LLVM 提供了一个与平台无关的基础,这可能会发生。这些创新最终会渗透到所有脚本语言中。

      MacRubyMaglevRubinius 可能是第一个以这种速度推向市场的人,但 C 实现也可能会到达那里。

      需要注意的是,JRuby 是 obsessed with speed,并且有几个“类似 Ruby”的 prototype languages,允许开发人员交换某些功能以提高性能。

      老实说,阻碍 Ruby 的主要因素是,对于很多很多用途,它已经足够快了。如果您想解决n-body problem,您可能应该寻找其他地方。但是,如果您想构建一个流畅的、可维护的基于 Web 的应用程序,Ruby 将使您更快地投入生产,并具有出色的可维护性。而且你的 VC 会给你留下深刻的印象,他们会给你足够的钱来扩大规模。届时,您可以将阻塞点重写为内联 C 或 Java。

      【讨论】:

      • Ruby 因不善于学习而享有盛誉。随着 Twitter 转向 scala,ruby 可能不是获取 vc 资本的方式。
      • Twitter 已经达到了 Ruby 不再是其所有功能的最佳选择的地步。没有什么能像 C 和 Java 那样扩展,但这些语言的构建速度非常慢。对于许多不会出现在 Oprah Winfrey 计划和 CNN 中的网站,Ruby 提供了快速开发和性能的良好组合。
      【解决方案8】:

      Ruby 越来越快

      虽然 jRuby 经常在简单的基准测试中遭到破坏,但启用可选优化后它开始看起来不错。

      官方的 Ruby 解释器现在是 YARV,尽管大多数人还没有体验过它,因为它们仍然在 1.8 上。

      【讨论】:

        猜你喜欢
        • 2016-02-04
        • 2010-12-20
        • 2010-09-11
        • 2012-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-03
        • 2013-07-17
        相关资源
        最近更新 更多