论坛首页 编程语言技术论坛

Rails迷思导读

浏览 7138 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-07  
koalant 写道
火星叔叔马丁 写道
koalant 写道
我还是看好 Merb, 相信明年越来越多基于 Ruby 的 web 开发人员会从 rails 转向 merb 的. 不过即便在将来使用 Merb 的人还是少数。


Merb资料看过少许 能不能说说你看好Merb的理由


很多都是我个人感觉。

merb 的性能当然是一个原因,尤其是它能超过 Django 的确很让我惊奇,毕竟这是让整个 RUBY 社区兴奋的事情, 至少 Ruby 解释器的速度不再说明 ruby 框架也很慢了。

slice 也是一个很吸引人的地方, RAILS 一直不提供这个功能。

模块化 是 Merb 的一大特点 ,orm, javascript, template 中立,你可以选取任何模块用,不象 RAILS 那样 take or leave.

推荐大家看看
http://www.youtube.com/watch?v=TcMklv40YMY

Merb 创始人自己做了一些解释,Merb 的理念之一是: “no code is faster than no code”, 因为 Ruby 不是基于 Bytecode 的虚拟机,代码转换为语法树,然后 AST WALKER 在上面执行代码,所以如果代码越大,那么生成的语法树就很大,遍历起来就慢,执行也就越慢,因此 Merb 开发组极力通过减小代码大小来做性能优化,产生的副作用就是框架代码的文件都非常短小。 你如果看过 Merb 代码就知道,它里面很少有超过几百行代码的文件,我想这大概就是原因。 Merb 代码写的也非常易懂。

rspec 代替 test_unit, 生成的应用代码中默认带了 .gitignore , autotest 等等, 可以说, Merb 吸取了很多框架的教训,增加了很多改善的地方,有些地方 rails 想改,但是却很难改了,但是对 merb 来说很容易加入。

另外 Datamapper 一直是我想用的一个 ORM, 它的性能很好,国外的一些测试表明: merb + dm 要比 merb + activerecord 好,主要原因是 DM 团队有自己开发的数据库驱动 do_* 系列,据他们自己说,如果其他 ORM 不采用他们开发的 do 驱动就永远别想在性能上超过他们,这话很狂啊,呵呵。






merb 的plugin 太少了 ;)
0 请登录后投票
   发表时间:2008-12-07   最后修改:2008-12-07
其实 merb 的 plugin 没有重新设计一套,而是利用了 gems ,这也是它的一个特点, 这样就利用了 gems 的版本依赖, rails plugin 好像不能解决版本依赖。只要知道如何写 gems 就会很容易写 merb 的 plugin

Rails 有个缺点,就是 monkey pathching 和 DSL 的东西太多,这样就容易造成总是充满新奇的东西,到处充满奇技淫巧, 你怎么都学不完的,比较累人。Merb 在这点上控制的比较好。
0 请登录后投票
   发表时间:2008-12-07  
merb的模块化分的过细,一装60多个gem。对喜欢自己DIY压榨框架到极限的程序员来说固然很爽,但是对于大多数只想干活的程序员来说,这是很不人道的事情,我真的不想搞清楚你60多个gem每个干吗用的,我应该如何组合这些gem,这对我来说是一个很大的学习成本,就这一点来说,merb就不可能流行,它会成为一个更小众的web快速开发框架。说到性能问题,ruby 1.9.1马上就出来了,已经改成了bytecode,merb在这方面不会有什么明显的优势。事实上我认为merb最大的价值在于迫使Rails开发团队特别是DHH能够倾听社区用户的声音,改进的更快更好。

0 请登录后投票
   发表时间:2008-12-07   最后修改:2008-12-07
引用

Successfully installed merb-1.0 
Successfully installed merb-core-1.0   
Successfully installed merb-action-args-1.0  
Successfully installed merb-assets-1.0  
Successfully installed merb-slices-1.0  
Successfully installed merb-auth-core-1.0  
Successfully installed merb-auth-more-1.0  
Successfully installed merb-auth-slice-password-1.0  
Successfully installed merb-auth-1.0  
Successfully installed merb-cache-1.0  
Successfully installed merb-exceptions-1.0  
Successfully installed merb-gen-1.0 
Successfully installed merb_datamapper-1.0  
Successfully installed merb-more-1.0
Successfully installed merb-haml-1.0  
Successfully installed merb-helpers-1.0  
Successfully installed mailfactory-1.4.0  
Successfully installed merb-mailer-1.0  
Successfully installed merb-param-protection-1.0  

Successfully installed dm-core-0.9.6  
Successfully installed dm-migrations-0.9.6  
Successfully installed dm-timestamps-0.9.6  
Successfully installed dm-types-0.9.6  
Successfully installed dm-aggregates-0.9.6  
Successfully installed dm-validations-0.9.6  
Successfully installed dm-sweatshop-0.9.6  
Successfully installed do_sqlite3-0.9.6-x86-mswin32-60  
Successfully installed data_objects-0.9.6  

Successfully installed addressable-1.0.4  
Successfully installed haml-2.0.4  
Successfully installed uuidtools-1.0.4  
Successfully installed randexp-0.1.4  
Successfully installed highline-1.5.0  
Successfully installed diff-lcs-1.1.2  
Successfully installed templater-0.3.5  
Successfully installed ZenTest-3.11.0  
Successfully installed RubyInline-3.8.1  
Successfully installed sexp_processor-3.0.0  
Successfully installed ParseTree-3.0.2-x86-mswin32-60  
Successfully installed ruby2ruby-1.2.1 


我重新排列了一下上次你安装 merb 的那40个 gems,分为三个部分,第一部分是它自己的 gems, 第二部分属于 dm ,第三部分都是所需的第三方 gems, 比如 haml,ZenTest 等等, 总的来说,它自身的 gems 应该保持在10来个左右,而且新版本有可能继续缩小gems 的数目,这其中很多merb 自身的 gems 都是包装第三方功能的,都很小,比如 merb-1.0  ,merb-haml-1.0,merb_datamapper-1.0 。

merb 按照它自己 description 的说法 就是

merb = merb-core + merb-more + datamapper

merb 好像现在也在整理自己的模块,不排除未来模块数能减少一些。


不过我也承认,Merb 不会成为主流的 ruby web 框架, rails 将吸引大多数人的眼球。

0 请登录后投票
   发表时间:2008-12-08  
给koalant补充一下.
merb这个gem本身没有任何内容,只是声明了对其它gem的依赖.
gem install merb跟gem install rails一样,会把它的默认组成部分(一堆gem)都装上.
对普通用户来说,跟rails一样友好,同时不影响高端用户有选择的搭配定制.

安装完成,gems目录中merb-1.0.3/lib里只有一个文件merb.rb,内容如下:

### AUTOMATICALLY GENERATED. DO NOT EDIT!
require 'merb-core'
require 'merb-more'
require 'dm-core'
require 'do_sqlite3'
require 'dm-timestamps'
require 'dm-types'
require 'dm-aggregates'
require 'dm-migrations'
require 'dm-validations'
require 'dm-sweatshop'


从第4行开始相当于dm-more.

其中merb-more也只是依赖了一堆gem, gems/merb-more-1.0.3/lib/merb-more.rb:
### AUTOMATICALLY GENERATED. DO NOT EDIT!
require 'merb-action-args'
require 'merb-assets'
require 'merb-slices'
require 'merb-auth'
require 'merb-cache'
require 'merb-exceptions'
require 'merb-haml'
require 'merb-helpers'
require 'merb-mailer'
require 'merb-param-protection'
require 'merb_datamapper'


一旦环境搭好了,只要有足够的书籍资料,谁还关心它的功能是由哪部分提供的呢? java程序一般也有一堆jar文件,不也挺好的?

我更激进一点,认为merb有潜力取代rails成为"主流".
长远看来,背着历史包袱的rails可改进的余地已经不多了,merb的出现,也让它没有了重写的必要.
它拥有的,是成熟的现在,却没有未来.
好的情况是,不管merb还是rails,两者差异不大,对于其它编程语言来说,都有学习参考价值,ruby世界前途不错.


0 请登录后投票
   发表时间:2008-12-08  
http://www.yeeyan.com/articles/view/andyhu1007/18946?tag_related
http://yehudakatz.com/2008/11/15/mythbusting-rails-is-not-a-monolith/

DHH列出rails自身代码行数并大夸其设计优雅性,看起来就是在跟merb较劲. 从后面blog的回复,merb必然大比分胜出.
别的不说,DHH在文中大大夸了一番alias_method_chain,着实雷了咱一把.
rails的alias_method_chain源码:
http://github.com/rails/rails/tree/master/activesupport/lib/active_support/core_ext/module/aliasing.rb
对应merb extlib这个gem中的hook:
http://github.com/sam/extlib/tree/master/lib/extlib/hook.rb

哦,merb在这一功能上的源码居然比rails多4倍! 还吹自己代码少?

冷静一下.

偶作为被alias_method_chain折磨过的人,能够体会到多出来的这些代码绝不是吃素滴. 虽然hook代码还不完美(还没有显式的对hooks进行CRUD以及recompile的API),也比前者强太多了.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics