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

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
分享到:
评论
1 楼 kaven 2008-06-25  
对于第一个问题,感觉只要是动态语言,感觉差异不会太大,python,ruby和非动态语言比都不是一个数量级的,如果说这个是问题的话,应该是所有动态语言的问题。
至于第二问题,只要涉及c,不好的代码都会产生内存泄漏。通常我们做是给原来的库编写ruby扩展,而且还有SWIG,感觉这个难度不大吧

相关推荐

    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