RadRails1.0 降临——增加 Profiler、CallGraph Analyzer 和 Rails Shell 等新特性

  • Werner Schuster
  • 李明(nasi)

2008 年 4 月 7 日

话题:RubyRuby on Rails语言 & 开发架构

作为Aptana IDE的一部分,RadRails目前已经发布了 1.0 版本。作为一直以来流行的 Rails 开发工具,新版本的 RadRails 为 Ruby 和 Ruby on Rails 的开发者都新增了有用的特性。这里有一个RadRails、Netbeans 和 CodeGears 的 3rdRail 的特性完全比较,从比较中可以看出 RadRails 在重构(refactoring)和性能剖析(profiling)方面更胜一筹。另一个 RadRails 的特性是Rails Shell,它允许用户在 Eclipse IDE 内部使用 Rails 命令——可以使用自动补全及其他一些功能。(有一个截屏视频演示了 Rails Shell 的特性)。

关于这个新发布,我们采访了 Aptana 的Christopher Williams。Christopher 在 2007 年受雇于 Aptana,以继续其在 Ruby Development Tools(RDT)上的工作,而 RDT 则是 RadRails 的基础。

RadRails1.0 支持Ruby 代码的性能剖析,可以通过 GUI 显示每个方法的运行时间和调用图表。Christopher 解释了这是如何实现的:

此 Profiler 是 ruby-prof gem 的一个简单包装。我们将从 ruby-prof 的 bin 脚本中得到的 ruby 脚本的执行包装起来,并将输出定向到一个临时文件中。然后,当执行结束的 时候,我们通过解析输出并生成调用图表和着重点以供查看。这个目前对 JRuby 还不支持,因为对于用原生 C 代码写成的 ruby-prof gem 来说,Java 目前还没有替代品。一旦有了这个替代品,我们就会马上让 JRuby 也支持这项特性。

如 果要实现这个功能:我们就得修改 ruby-prof gem 使得它类似于 ruby-debug 的 ruby-debug-ide gem 那样工作——至少可以允许对于 profiler 的远程连接和实时地通过套接字来发送剖析相关的命令(这样我们便可得到快照,而非等到程序结束后再从 输出中获得)。或者我们可以创建一个 JRuby 兼容的 ruby-prof。这实在是取决于用户的需求。这是个标志性的新功能,因此我们也在收集需求以求改 进。

RDT 很早就完整支持通过更快的 ruby-debug 在 Eclipse 调试器 GUI 下调试Ruby 代码。RadRails 也包含了 jruby-debug,一个更快的 JRuby 调试支持的实现:

是的,在 RadRails 1.0 之中我们已经支持 JRuby 版本的 ruby-debug gem——因此现在有了一个快速的 JRuby 调试的选择。实际上我们会预装在伴随发布的 JRuby 中。
在 RadRails 1.0 的特性列表中将“Rubinius”作为一个支持的 Ruby 解释器。Christopher 解释了这项支持目前的状态:
当前使用 Rubinius 作为启动 Ruby 进程的解释器还有诸多限制。当 Rubinius 成熟之时,就可以 使用它来尝试运行 gems 甚至 Rails。目前还没有真正的 Rubinius 专署特性(然而也没有任何 JRuby 或者标准 Ruby 的专署特性。接下来我们 会尽力做到完全支持每一个解释器。通过 JRuby 和 Rubinius,通常只需要等待新 gem 或者更新代码来增强其功能)。

如 果大量用户开始尝试使用 Rubinius 并向我们告知缺少调试器,我们一定会使之集成进来。当我们使用 ruby-debug 为 Ruby 创建调试器之时,我 们和 Kent Sibilev 及 Martin Krauskopf(在 Sun 公司从事 Netbeans 开发)一起共享我们的代码——这使得大量 IDE 公用库集成了 ruby-debug。因此已经有了大 量的 de-facto 标准来为 RDT/RadRails 和 Netbeans 继承一个调试后端。只需要连接 Rubinius 的调试器,打开一个套接字并读入 XML 命令即可。(如果其他人需要这样的话,请联系我或者 Martin。这样可以一举使得 Rubinus 调试器有效地在 Netbeans 和 RDT/RadRails 上工作)。

公用调试协议实现详见 RubyForge 的debug-commons项目。InfoQ 报道了 Rubinius 的全速调试器——目前并不支持公用调试协议,因此使用全速调试器的 API 需要另外的协议后端。

尽管 RadRails 很明显和 Ruby on Rails 的开发紧密相连,但是在将来它同样会支持其他的框架:

目前我们还没有关于提供对其他框架支持的强烈需求。很明显我们专注于 Rails,但是实际上 RadRails 是一个全功能的 Ruby IDE(通过 RDT 构建)。如果一个框架变得流行起来,用户提出需要支持它的需求的时候,我们一定会调研。

另外,很多用户正在使用 Brad Wilson 的 HAML 和 SASS 编辑器。不幸的是,最近的发布版破坏了其与 RDT 的集成,而且 Brad 没有时间来继续维护和改进。我们正在和他一道将他的编辑器引入 RadRails 中,这样更有利于以后的维护和改进。

通过 Ruby 使用 EclipseMonkey 将 RadRails 和 Aptana 脚本化——Christopher 讲述了这项特性背后的观点:

当我创建了 EclipseMonkey 和 JRuby 之间的集成以后,我希望很多人会关注到,并说“嘿呀,我 现在能用 Ruby 来为 IDE 写脚本了!”。然而直到现在,社区对它的接受程度并没有达到我的预期。[..][我了解到] 作为一个终端用户,他们可以不需要 编译就能迭代开发一项新特性,而且不需要下载 Eclipse SDK,也不需要检出我们全部的源代码,那些让人晕头转向的东西。你仅需要编写 Ruby/JRuby 代码、运行脚本、编辑它、再运行,诸如此类。通过 DOM 我们能够提供一个很小很简单的 API,看上去很像 Ruby API。

想尝试 Aptana 和 RadRails 1.0 或者只是想实际看看其特性的话,请看展示了大量特性的截屏视频

查看英文原文:RadRails goes 1.0 - adds Profiler, CallGraph Analyzer, Rails Shell, etc. 

RubyRuby on Rails语言 & 开发架构