`
robbin
  • 浏览: 4820340 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:136995
社区版块
存档分类
最新评论

Ruby和Rails的缺点

    博客分类:
  • Ruby
阅读更多
有人说,robbin你说了那么多RoR的优点,你啥时候说说RoR的缺点阿?你说的缺点肯定比别人说的更客观。没办法,为了表现出来我不是一个RoR粉,只好总结点缺点,以飨RoR黑子们:

Ruby和Rails的一些缺点的总结:

ruby的问题我觉得主要是:

1、ruby本身的性能是比较差的,无法直接做一些计算密集型的任务

比方说大量的分词运算、语料训练什么的,用ruby写是不行的

2、ruby的C扩展很难写

正因为ruby性能差,所以很多情况下要依赖C写的底层库,但是写ruby的扩展C库是很困难的事情。一方面没有特别多的资料介绍,你能参考的只有《Ruby Hacking Guide》,另外一方面Ruby是带有GC的语言,C又是没有GC的,所以如果你对ruby的GC机制没有特别清楚的了解情况下,写C扩展会出现意想不到的问题:比方说你写的程序逻辑没有任何问题,但是和ruby配合起来就会不定期的出现错误,这就是你C程序的某个赋值变量可能会被ruby GC以你意想不到的方式销毁。

3、ruby的C扩展库质量不高,容易出现内存泄漏问题

正因为上面的原因,很多第三方的C扩展库质量不好,很容易出现内存泄漏问题,这是一个很头疼的问题,你很难定位,也很难解决,只能尽量避免使用第三方扩展C库。


Rails的问题我觉得主要是:

1、特别容易出现命名冲突

你自己写的代码里面给类增加的方法,动不动就和Rails给类扩展的方法名称冲突了。这种错误很隐蔽,很难发现。这也是ruby语言动态性带来的一个负面影响

2、Rails每次升级API变动都比较大

Rails升级是不太考虑向下兼容性的,所以每次升级的话,可能你很多代码都要改,更糟糕的是很多Rails插件特别喜欢以hack rails的方式来扩展Rails功能,那么Rails一升级,插件的兼容性几乎肯定是不行的,这个是比较痛苦的事情。

3、Rails的view方面还是比较原始的erb拼接字符串方式,像JSP那样原始,没有一个类似Java的velocity/freemarker那样的页面模版库,所以写helper动不动要用字符串去拼html片断,如果是特别复杂的view需要拼的话,代码就会写的很丑陋。

当然总体来说,RoR还是让我感觉非常满意的,特别适合互联网应用。
28
6
分享到:
评论
21 楼 coolesting 2011-07-04  
现在看这篇文章是不是有点过时了, view用haml可以解决文中所说 , 而且很多人用sinatra+sequel
20 楼 swachian 2008-06-27  
rails很活跃,也很好,ruby就逊色的多.虽然是ruby造就了rails.
命名冲突比较郁闷,尤其是helper里面的.
说起erb,就让我想到了view.平心而论地说,rails这1-2年间在view层的进步并不大,大部分改进都是和ActiveRecord相关的,比如migration比如引入has_finder等等,而在view层,不管是拼html或者ajax的调用,差不多就是很早以前就达到的水平.各种插件的情况也大致如此,都是绝对加强了model,但对v和c的改进并不大.
19 楼 ye_jian_hui 2008-06-27  
matz也说了他当时做ruby的实现时很大一部份是参考python的实现,从这点上看在C的扩展上跟python像也正常
18 楼 liangshixing 2008-06-27  
为什么不考虑JRuby呢?
17 楼 robbin 2008-06-27  
to yaml:

一些少量的运用的确可以避免用C扩展,比方处理 图片可以直接调用ImageMagick,而不是用RMagick。但是有一些情况是程序需要大量的频繁使用,这种情况就无法回避了。
16 楼 yawl 2008-06-27  
关于nzinfo说
引用
我都怀疑Ruby在代码上抄袭Python了


这点我觉得是褒奖ruby了。在语言设计上,我喜欢ruby远超过python。在实现上,ruby的代码太业余了,python则好很多。matz自己也清楚而且承认这点。

我现在喜欢的和其他语言的库结合方式就是通过命令行,文件或web接口,根本不会碰c extention的方式。正如robbin所说,太麻烦,不值得。
15 楼 nzinfo 2008-06-26  
关于Ruby的扩展,我有话说。:-)
Ruby和Python的接口风格非常像,我都怀疑Ruby在代码上抄袭Python了。
区别在于Python将引用计数的工作交给扩展的开发者了,而Ruby试图自己搞定。
这样,对于开发者的要求就不同了。Ruby的扩展要对语言本身这方面的处理更熟悉。而Python则由开发者控制,在某些情况下,可以牺牲内存来保证稳定性。
我的观点是,开发Ruby的扩展,尽量简洁,可能不是很Ruby Way,但是可以在上层在封装。保证系统的稳定性是第一要务。
如果要我选Web的开发语言,我肯定选Python。至少扩展库方面成熟太多了。
14 楼 koda 2008-06-26  
我是支持字符串拼接写View的,因为这样才简单(概念简单),易于理解.

13 楼 koda 2008-06-26  
前几天开始学Python,但实在是不太喜欢Py的"__"变量命名方式;昨晚刚想转ROR。结果今天看到大牛你们却开始数落ROR了。我又开始摇摆不定了Orz……


关于这个问题,我的看法是:选择一门语言和框架,要看它是否存在致命的硬伤,如果某个部分的缺陷能迂回解决,就可以接受。
12 楼 koda 2008-06-26  
关于Ruby的性能,是否能从Ruby解释器上下功夫?
11 楼 404 2008-06-26  
引用
你自己写的代码里面给类增加的方法,动不动就和Rails给类扩展的方法名称冲突了。这种错误很隐蔽,很难发现。这也是ruby语言动态性带来的一个负面影响

这个问题太严重了。经常一个错误弄半天,最后才发现是冲突了。


如果是使用Netbeans编辑器的话,在你定义个方法或类时,可以选中方法名或者类名,然后 Ctrl + B 直接跳转到类和方法的源代码,如果不用跳到别的文件里边去,就说明你定义的方法名或者类名是不冲突的。
10 楼 hatedance 2008-06-26  
出个馊主意。
命名冲突可以参考db里字段名跟sql关键词冲突的办法:加前缀。
9 楼 liusong1111 2008-06-26  
传闻lua的C扩展很好吧,还好我做web开发,一般也不用C扩展。
命名冲突会碰上,我的情况是不常碰到,也只好通过跟踪stack trace、查看源码来发现它了。
helper里拼html是不好的模式,楼上几位提到的partial也是我们应对的方案。实在不行,我们就拿ERB.new(tempate_string).result(binding)死抗

我对rails的view方案很有意见,它跟rails塑造的品味不在一个档次,虽然比JSP好很多。
Java的velocity/freemarker我也不喜欢,又一套表达方式,个人看法,还不如ERB呢。
解决方案rails应该向flex的方式看齐。

haml也是另一套语法表达,而且有python痕迹,不喜欢。

malline还不错,只是成熟度有待考查,我们产品不敢贸然引入。
markaby不再维护了?请消息灵通的朋友帮忙证实一下。
malline的地址:
http://www.malline.org/
扩展性不错。
性能方面以前看到个贴说很差,但今天看它的页面里说:
引用
About performance
by Riku, 8 months ago

I have done some preliminary benchmarking between ERB and Malline. I used the templates from Beast to make the compare - rewrote the layout template, too.

Some of the tests are still in progress, but it seems that Malline is about as fast as ERB, maybe a little bit slower on some situations. The latest test tells that overall time taken on 500 page renders was 3% more with Malline than with ERB.

When the benchmarks are ready, I will publish the results here. However, I can already say that Malline is fast enough for production use.

如果能达到这样就很不错了。

bug应该少不了吧。
值得玩一玩。
8 楼 tipfoo 2008-06-26  
前几天开始学Python,但实在是不太喜欢Py的"__"变量命名方式;昨晚刚想转ROR。结果今天看到大牛你们却开始数落ROR了。我又开始摇摆不定了Orz……

前两天见过个测评,说Ruby1.9快1.8.x三四倍?
http://antoniocangiano.com/2007/12/03/the-great-ruby-shootout/
看看上面这个,可信度多少?
7 楼 CaiDeHen 2008-06-26  
你自己写的代码里面给类增加的方法,动不动就和Rails给类扩展的方法名称冲突了。这种错误很隐蔽,很难发现。这也是ruby语言动态性带来的一个负面影响

这个问题太严重了。经常一个错误弄半天,最后才发现是冲突了。
6 楼 dazuiba 2008-06-26  
其他基本赞同,只有一点。我很不理解robbin对rails view的批评。

rsu 说了一个观点。
我这里,针对你说的"helper里进行html拼接",说一下我的看法:
你完全可以在helper里面使用render :partial。
把html的渲染交给rhtml

相比其他的显示层技术(php,jsp) 我认为rails的view技术是非常先进的。
如果能和helper结合好,会写出非常容易维护的rhtml代码!
5 楼 shaka 2008-06-26  
rails命名冲突确实存在,不知道DHH对此是什么态度。
不过既然用rails,就该遵循它的原则,再说每种语言都有关键字,用错了不一样有冲突么。

不向下兼容,这点不能算缺点吧,感觉只能算是一种态度。DHH也可以让rails兼容,不过那样恐怕又会有新的瑕疵出来。

至于Ruby的性能,现在确实是硬伤,以后会不会解决掉,就要看Ruby的造化了
4 楼 ozzzzzz 2008-06-26  
对于rails的非议现在已经很多了,希望robbin好好总结一下这个方面的内容。
就ruby这个语言的问题,我是十分不喜欢,因为跟我的哲学思想不同。我认同python的哲学。
而就c扩展来说,ruby这个方面比python要有很大差距,毕竟社区的规模与人员的素质摆在那里,不可能很快解决。
3 楼 rsu 2008-06-26  
最后一个关于view的,我不同意。

使用最原始的html concat,才能达到最高的灵活性,而且,helper method也可以写得非常漂亮,如果你使用capture的话,你可以参考一个block_to_partial的现成例子,只要规划的好,可以做到:

<% content_box :background => :white do %>
<%= content %>
<% end %>


这样就比较好看。

另外,为了让view美化,你可以参考haml,请google HAML。
2 楼 haiyang 2008-06-26  
对于命名冲突,不知道javaeye是怎样处理的?

相关推荐

    Python和Ruby比较优缺点共1页.pdf.zip

    这份压缩包文件“Python和Ruby比较优缺点共1页.pdf.zip”可能包含了一个对比这两种语言特性和优缺点的单页PDF文档。虽然具体内容无法直接提供,但我们可以根据已知信息来深入探讨Python和Ruby的基本特性以及它们在...

    编程语言发展史:Ruby语言的发展和应用

    Ruby语言的优点和缺点 Ruby具有以下优点: * 语法简单易学 * 面向对象 * 动态性 * 生产力高 * 社区活跃 然而,Ruby也有一些缺点: * 性能较低 * 内存占用较高 * 依赖管理复杂 * 文档不足 Ruby语言的未来发展 ...

    ip_anonymizer:Ruby和Rails的IP地址匿名器

    :globe_showing_Americas: Ruby和Rails的IP地址匿名器 适用于IPv4和IPv6 旨在帮助遵守 入门 将这些行添加到应用程序的Gemfile中: gem 'ip_anonymizer' 匿名IP有两种策略。 掩蔽 这是: 对于IPv4,将最后一个...

    Ruby-ActionPack的Action缓存在Rails40中从核心移除

    在Ruby on Rails框架中,ActionPack是一个核心组件,它包含了控制器、路由以及处理HTTP请求和响应的工具。Action Cache是ActionPack的一部分,主要用于提高Web应用的性能,通过缓存Action的输出来避免重复执行相同的...

    [Rails 常用插件简介]CRUD Generator 2

    在Ruby on Rails框架中,开发过程中经常需要创建、读取、更新和删除(CRUD)数据。为了提高开发效率,开发者通常会使用各种插件来自动化这个过程。CRUD Generator 2就是这样一个工具,它是一个基于Edge Rails(Rails...

    终于知道怎么把rails Web程序打包成可执行文件了

    每种方法都有其优缺点,开发者需要根据目标平台、性能需求和部署环境来选择最适合的方案。同时,确保正确处理所有依赖和配置,以及测试打包后的应用在不同环境下的运行情况,都是这一过程中的关键步骤。

    rails_多文件上传

    Rails 多文件上传插件是基于 Ruby on Rails 框架的一款插件,旨在实现多文件的同时上传,控制文件的格式、数量,并且兼容多种浏览器,包括 IE6、7、Firefox 等。下面是对插件的详细解释和使用说明: 插件特点 1. ...

    excel lib ror ruby

    标题 "excel lib ror ruby" 暗示我们要讨论的是在Ruby on Rails(简称RoR)框架中使用库来处理Excel文件的相关知识。RoR是一个流行的开源Web开发框架,而Ruby语言本身支持与Microsoft Excel文件交互,这在数据导入...

    Agile Web Development with Rails中文版 3rd Edition

    Rails是一个用Ruby语言编写的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,并且强调代码的简洁性和开发者的生产力。 **1.1 Rails是敏捷的** Rails的设计原则之一就是支持敏捷开发。它内置了许多...

    对Ruby VS Java误区的深度剖析

    综上所述,Ruby和Java各有优缺点,选择应基于项目需求、团队技能和现有基础设施。Java以其稳定性和丰富的库适合大型企业级应用,而Ruby则以其高效开发速度和简洁语法吸引着初创公司和快速迭代的项目。重要的是理解每...

    Python、Lua和Ruby——脚本大P.K.1

    3. Rails 框架:Ruby on Rails 提供了一个强大的 web 开发框架,加速了 web 应用的开发。 4. 社区支持:Ruby 有一个活跃的社区,提供丰富的库和工具。 缺点: 1. 性能:与 Python 类似,Ruby 的执行速度也不快,...

    Code Review&JRuby on Rails

    1. **JRuby简介**:解释JRuby是什么,它是如何实现Ruby语言的,以及它相对于MRI(Matz's Ruby Interpreter)的优点和缺点。 2. **安装与配置**:详细步骤指导如何在不同环境中安装JRuby,并设置为Rails项目的默认...

    用Python,Lua和Ruby语言设计游戏

    Ruby的缺点在于相对较少的社区支持和资源,以及在性能方面同样不如编译型语言。 尽管这三种语言在游戏开发中都有其独特的优点和局限性,但它们共同的特点是易于学习和使用,特别是对于初学者而言。在实际选择时,...

    ruby语法基础

    不过,这些缺点并未阻止Ruby成为众多开发者喜爱的选择,尤其是在Web开发领域,Ruby on Rails框架的流行便是最佳例证。 #### 二、Ruby与Python的比较 尽管Python以其广泛的库支持和易学性闻名,Matz认为Python在...

    巧妙规避Java与Ruby语言迁移过程中的风险

    Ruby on Rails的崛起使得迁移至Ruby的风险逐渐降低,因为随着社区的壮大和相关资源的增加,开发者可以更容易地获取帮助和学习资料。然而,作为一种相对较新的语言,Ruby在某些场景下的性能可能不及Java,而且在企业...

    关于Rails登录和验证插件http_authentication restful-authentication

    Rails是一个流行的Ruby web框架,它提供了许多用于构建高效和可扩展的web应用的功能。在Rails应用中,用户认证和授权是关键的安全组件,确保只有经过验证的用户才能访问受保护的资源。本篇文章将深入探讨两个常用的...

    Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版.rar

    在前两版的内容架构基础上,第3版增加了对Rails 2中新特性和最佳实践的内容介绍。相比第2版中的内容,Rails 2增加了REST、资源、轻量级web service等新特性。本书涵盖了这些全新的内容,因此能更好地体现出Rails框架...

Global site tag (gtag.js) - Google Analytics