RadRails1.0降临——增加Profiler、CallGraph Analyzer和Rails Shell等新特性
作者 Werner Schuster译者 李明(nasi)
作为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.
- Common Service Locator library
- 源码解读bucket 删除中的一些细节
- 论Spark Streaming的数据可靠性和一致性
- RGW 的GC深入解析与调优
- 大数据查询——HBase读写设计与实践
- 基于Logstash的自动化运维系统实现
- 简谈RGW的index shard计算
- Blackpearl 的 Impersonate
- SparkMLLib中基于DataFrame的TF-IDF
- 运用Python实现WordPress网站大规模自动化发布文章
- 基于java的中文分词工具ANSJ
- 基于DF的Tokenizer分词
- 基于pyenv和virtualenv搭建python多版本虚拟环境
- 基于DataFrame的StopWordsRemover处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android基于AlarmManager实现用户在线心跳功能示例
- 详解Android中获取软键盘状态和软键盘高度
- Android流式布局FlowLayout详解
- Linux 专题
- Go语言实现UDP通信
- Android多渠道打包的方法步骤
- Android编程实现压缩图片并加载显示的方法
- Android串口通信封装之OkUSB的示例代码
- Android 中Activity 之间传递参数
- Android开发简单实现摇动动画的方法
- Android 中menu同时显示图标和文字的实现
- android基于SwipeRefreshLayout实现类QQ的侧滑删除
- PopupWindow自定义位置显示的实现代码
- Bootstrap 下拉菜单.dropdown的具体使用方法
- Android访问assets本地json文件的方法