Ezra Zygmuntowicz 访谈:通向 Merb1.0 之路

  • Robert Bazinet
  • 李明(nasi)

2008 年 2 月 2 日

话题:RubyWeb框架Ruby on Rails语言 & 开发

Merb 已接近 1.0 发布里程碑,开发团队为此时正在使用 Merb 以及计划在新项目中采用 Merb 的人们带来了一些巨大的变化。

InfoQ 有幸采访了Merb的缔造者和Engine Yard的创始人——Ezra Zygmuntowicz。

Robert Bazinet (RB): 对于那些不熟悉 Merb 的朋友来说,来介绍一下 Merb 以及 Merb 和 Ruby on Rails 之间的差别?

Ezra Zygmuntowicz (EZ): Merb 是一个和 Rails 很相似的 Web 应用开发框架。较之 Rails 框架,其主要侧重于增强框架的可理解性、规则化以及快速编码的辅助。严密的核心框 架可以用于构建高性能的网络服务,还有插件和附加功能可供随意选择。这使得 Merb 核心小而快,而且依然可以构建成熟的应用。Merb 同时也支持 ORM、 Javascript 以及测试框架。它拥有官方的插件可以使用 ActiveRecord、DataMapper 和 Sequel ORM's,可以轻易的使用 CouchDB、ThruDB 以及其他数据存储。

RB: Merb 是为哪一类开发者或者哪一类项目所设计的?

EZ: 在这一点上我会说 Merb 更针对于中到高级的开发者。Merb 并不如 Rails 般易于学习,但是它也在努力试图吸引 ruby 初学者和在试图个性化的时候遇到麻烦的人。Merb 的目标是在服务器资源上比 Rails 更加有效率,目前它可以节省大约一半内存,而在分派(dispatch)和渲染的时候会快上约 2-5 倍。

RB: Merb 0.5 最近发布了;这个发布版的里程碑是什么?

EZ: 这个发布版有着很多优雅的新特性。虽然它仍然是一个开发版本,但是它已经在很多产品中使用了。

RB: Merb 0.9 作为下一个官方发布版,将会分解为一个 Merb-core 的 gem 和一个由其他 gem 所组成的包。这样做对开发者的好处是什么?

EZ: 这样做的好处是可以保持核心框架精简、益于理解且速度快。这意味着 你将可以触及核心并可以做到对 Web 服务和 SOA/REST 类型后端的快速响应。和 Rails 那种大而全又不能精简的类型不同的是,Merb 可以很小并让 你可以根据你的应用程序的需求来仅仅拣选那些需要的特性,当你要将你的应用程序部署到一个产品环境中的时候,这样做可以降低花销并提高性能。

我们将会有一个 Merb 的元 gem,可以安装 Merb-core 和一个插件集合,所以你仍旧可以通过一个快速启动的全栈框架来搭建原形系统。但是我认为保持模块化是非常重要的,这样可以避免 Rails 因为累积而导致的臃肿。

RB: 为什么团队要开发一个 0.9 的发布版和一个 1.0 的发布版,而不是直接发布 1.0 呢?

EZ: 0.9 基本上就是 Merb 1.0 的 RC 版本,我们已经做了主要的重构,并希望大家可以暂时使用 Merb 0.9 并在我们开始 Merb 1.0 以前提出更多的问题。

RB: Merb 已经开发了一阵子而且马上将要到达 1.0 版本,这很令人欣慰吧。在 Merb 就要到达 1.0 的时候你的感觉如何呢?当这个项目启动的时候你又是怎么设想 1.0 版本的呢?

EZ: Merb 0.0.1 的第一个发布是在 2006 年十月。在那以后 Merb 就有组织有计划的稳步增长,从一个小玩具变成了一个完全成熟的框架。我们马上就要达到 1.0 版本十分令人欣慰,我非常兴奋的看到人们用 Merb 来创建平台。我觉得对于 Ruby 来说 Merb 1.0 作为一个 Web 平台是一个重要的里程碑。我希望能够最终去除 Ruby 通常很慢的这个毒瘤。Ruby 只要适当注意编码规范是可以很快的。

RB: 除了 0.9 或者 1.0 的 API 文档以外,开发团队在教程、视频以及文档方面都做了些什么?在帮助开发者入门方面我们有什么可期待的?

EZ:

是的,在 0.9 发布后、正在通往 1.0 的路上,我们已经拥有了一个带有 Wiki、论坛等等的社区文档和集中插件网站。也有一些 Merb 的书籍正在编写中。一些社区成员也正在制作一些教学视频。

预期扩展的集中文档和技术指南会在 Merb 1.0 发布之时或之前被发布。我们对于 Merb 的代码采用了一种新的文档规范并在 Merb-core 中广泛使用,在 1.0 发布以前我们也会将同样的规范应用于 Merb-more 和所有的插件中。

RB: Merb 1.0 在我看来是非常关键的。一个 1.0 版本的发布通常意味着产品的到来,作为一个 Ruby on Rails 的开发者,Merb 开发团队会怎样帮助我转换到 Merb 呢?

EZ: 随着 1.0 发布我们也会带来丰富的、专业的文档和技术指南。我们当然也考虑到了很多人将会从 Rails 迁移到 Merb,所以我们会确保有足够的信息来让这种迁移更加容易。

一个关键的思路就是保持框架代码的简单、精简和一致性。这样可以使开发变得容易,因为框架并不是一个完全的黑箱。 它能够熟悉并修改来让你做你想做的事。很多次当我为了去修复 Rails 中的一些错误来读 Rails 框架的代码的时候我都会感觉很痛苦,我希望能够引导 Merb 的方向,使它不仅仅是一个可扩展的框架,更拥有对未来可扩展的代码库。

我们在代码库中采用一种 @public、@semipublic 和 @private 的标准规范。在 1.0 以后我们 将不会修改 @public 的 API,而 @semipublic 将可能会作一些修改,但是我们会试图保持修改的最小化。@private 的 API 在不破坏 @public 和 @semipublic 标准的情况下是可以任意重构其内部实现的。我们希望这样可以帮助我们去避免那些 Rails 在向后兼容性上所带来的 阻碍创新和扼杀代码库的问题。

RB: Ezra,感谢你在百忙之中抽出时间来和我们来聊 Merb。

Engine Yard 的新工程师Yehuda Kats在他的博客更新的文章中给出了关于下个版本 Merb 的信息,其中对于一些 Ezra 谈到的要点给出了更加详细的说明。

他对于新 Merb-core 的 gem 的一些重要的细节给出了解释:



RubyWeb框架Ruby on Rails语言 & 开发