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

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的一些重要的细节给出了解释:
Merb核心当前是基于Rack适配器的,所以它可以和Mongrel、Evented Mongrel、FCGI、regular CGI、thin、webrick、Fuzed或者任何你可以为之编写rack适配器的服务器协同工作。不用害怕,当你想做一些奇妙的东西比如流化或在互斥以外延期渲染的时候,你依然可以访问原始的mongrel请求。
更多重构Merb到Merb-core和我们可以预期的变化的信息如下:
为了保持Merb核心足够整洁紧密,我们也采用了更加正式的编程和文档技巧来使Merb的使用更加容易:
  • 所有的方法(公开的和私有的)都需要提供一个清晰的方法说明,包括所有参数的类型、所有可选散列的可能取值、返回值的类型和取值以及其他信息(见下面的示例)。
  • 方法可以被标记为@public,用来表示修改它们将会破坏公有API。方法也可以标记为 @semipublic,用来表示它们在框架的其他地方或者可能在测试夹具中被使用。这将会辅助将来的重构,因为除了公有和半公有的其他方法只要通过所有 的测试套件就可以被任意的重写。
  • 我们从框架中移除了所有的硬编码的路径。这意味着你可以Merb可以适合从一个单页应用到任意结构的应用。你 甚至可以指定如何去命名模板文件(你可以通过修改传统的controller/view.mime.type、 controller.view.mime.type或者甚至view.mime.type来开发单控制器应用)。
  • 我们将测试套件分为公有测试和私有测试。公有测试用来测试公有API,而私有测试则是用来测试Request对象这样的东西。公有测试要求使用的方法只能是公有API和半公有API,所以在主要重构以后它们应当依然可以通过测试。
文档在项目中看上去往往都是缺乏的,在本来资源就不充足的开源项目中尤其如此。Yehuda指出:
文档格式将采用自文档化方式来作为Merb核心发布的一部分,我们希望编写一个解析器通过RDoc来生成公有API的文档(暂时不考虑那些没有标记为@public的公共方法)。
Merb作为Ruby on Rails最新的强有力的替代品现在理所应当的越来越受到Ruby社区的关注。读者们可以通过 它们的官方网站来找到更多关于Merb的信息,也可以通过阅读InfoQ这里早先的一篇Sebastien Auvray所作的名为 《高性能Ruby MVC:Merb》的文章,同样是对Merb不错的介绍。当然也可以关注 Ezra的博客更新。

查看英文原文:The Road to Merb 1.0 with Ezra Zygmuntowic

你可能感兴趣的:(Ezra Zygmuntowicz访谈:通向Merb1.0之路)