社区专家谈Ruby及Rails的发展

标签: 社区 专家 ruby | 发表时间:2012-11-14 14:36 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=10560380f804c7341f042a2b8a03e117

最近,Ruby社区专家Paul Wilson 撰文回顾了Ruby发展的过去和现状,同时对Ruby未来发展的方向表示了自己的担忧。

Paul从2005年开始接触Ruby,当时还有许多醉心于极限编程的同事,一起加入到Rails的时尚潮流中。许多Ruby开发者都来自敏捷社区,大家都对企业级Java编程中为了实现一点功能却要大量的代码和XML配置的做法很厌倦:

元编程能力、动态类型、Ruby/Rails带来的约定优于配置(Conversion Over Configuration)的模式都使我们能够快速写出简洁的代码。语言、框架和社区内在的测试驱动开发原则是我们的代码优美、严谨。Java语言苦苦支撑的行为驱动开发(Behaviour Driven Development)在Ruby中出现并发展:Rspec、Cucumber都是很好的例子。直到现在,Ruby的开发模式仍然是敏捷/极限编程的范例,这是其他语言无法比拟的。

关于 Ruby语言的优势,我们可以简单的从以下几个方面了解下:

元编程

元编程支持在编程语言特性中占有重要的地位,开发人员可能对反射等概念比较了解,“在代码中动态分析、生成代码”的元编程能力对于基于编程语言的开发框架来说很重要,如果语言自身提供了强大的元编程支持,框架的开发者会事半功倍。Ruby提供了attr_accessor方法,支持开发人员动态生成访问变量的方法。Ruby的反射功能可以获取、更改各种范围内的变量值,而且能够获取、删除类方法,以及其他一些分析功能,当开发人员希望实现“通用编程”的模式或者后面提到的猴子补丁时,这些元编程功能会提供有效的支持。相比之下,C、C++语言可能实现起来就比较困难,虽然存在宏定义等低效的办法。

高阶函数

高阶函数的使用同样可以提高开发效率,在函数模板化、容器迭代器等方面有着重要的应用。高阶函数在C语言中采用了传递函数指针的形式来实现,但是存在局限性,即实现函数间的信息传递只有两种方法,要么明确地传递参数,要么使用全局变量。这种限制导致代码编写的低效。为了解决此问题,Ruby和Javascript语言引入了闭包的概念,即函数(块)可以引用外部的局部变量。通常的外部变量在方法执行结束时就不存在了,但是如果被包括进了闭包,那么在闭包存在期间,外部局部变量也会一直存在(当然,闭包也会引起潜在的内存泄露问题)。Ruby中的块结构是高阶函数的一种特殊形式,代码块可以作为参数传递给方法,在被调用的方法中可以执行传递过来的代码块,执行后程序的控制权返还给方法,块中最后执行的表达式的值是块的值,这个值可以返回给方法。块结构的经典应用是对集合对象(容器)的处理,比如循环执行、条件排序、条件搜索等,开发人员只需把块结构传递给容器方法,就可以方便的执行块结构中的表达式并返回结果。之前C++和Java等容器类的迭代器,使用别的类对象来处理容器元素,属于外部迭代器。Ruby通过块结构和闭包实现了内部迭代器,不用额外生成对象。Ruby中的集合方法非常丰富,包括all、any、find、map、min、max、select、sort、inject等,这样的设计能够让对数据结构和算法有要求的开发人员操作起来更加简洁和高效。

猴子补丁

编程语言对于猴子补丁的支持对软件开发同样重要。猴子补丁可以解释为,不改变源代码而对功能进行追加和变更。软件开发过程中,有一个著名的开放-封闭原则(open-closed principle):对模块扩展必须开放,对修改必须封闭。模块是可以扩展的,比如追加新的数据结构或者功能,能够满足未来的需求。修改是封闭的,指被引用的模块内部细节发生变化时,对外接口应当是稳定的。猴子补丁能够遵循该原则,它的主要目的包括追加和变更功能、修补程序错误等。Ruby这样的语言提供了开放类,也就是说类定义之后也能任意的追加新内容,不仅如此,Ruby还提供了若干类操作方法,undef可以取消之前本类或者父类定义的方法,alias可以给方法起一个别名,开发人员可以在重新定义的方法中用别名来调用原来的方法,从而给原来的方法增加新功能,include可以把其他模块的功能包含进来。Ruby提供的这些方法使猴子补丁的实现过程更容易,对比Java等静态语言,读者可以发现Ruby语言在这方面处理灵活,开发效率更高。

函数式编程

函数式编程是与面向对象编程相提并论的编程方法,最近越来越受到关注,它的最大优点在于,程序可以按照数学的形式以及声明的形式来编写。支持函数式编程的语言能够帮助开发人员把工作重点放在描述算法上,而不是具体的实现操作。像Lisp、Erlang和Ruby都支持函数式编程,不少语言是各种结构化编程、面向对象编程和函数式编程的混合体,开发人员可以根据需要选择高效的编程方式。说起这个话题,笔者不禁想起技术专家老赵,他经常会在讲座前拿容器的集合方法为例对比Java和C#的代码实现,强调声明式编程和Lambda表达式的好处,Ruby这样的语言在设计时对此有所考虑,并选择了有益的实现。

Paul在文中提到:一转眼来到了2012年,革新已经结束。Ruby开发已经发展壮大并成为主流,至少存在主流的趋势。虽然传统企业如银行的IT业务中,Ruby难以渗透,但是,使用Ruby语言的创业公司如LivingSocial和Groupon都已经发展成大公司。而显示Ruby成为主流的关键时刻是 Salesforce.com在2010年12月份收购了Heroku,在第二年的七月,Ruby的创立者Matz (Yukihiro Matsumoto)成为Heroku的首席架构师。同时,Rails成为了互联网创业公司的必备工具。成功并没有对敏捷/XP社区产生太大的而影响,大家依然关注编程工艺,喜欢尝试各种不同的语言,比如Clojure和Erlang。

他表示,现在,大部分Ruby开发依然首选Rails,但是我们却进入了Rails的低潮期。简单的模型-视图-控制器架构在2005年非常吸引人,但是现在却饱受批评,因为缺乏合适 的分层结构。Rails 3的推动者Yehuda Katz在Twitter风趣的说:“Rails现在的问题在于,一半的人担心Rails变成Java,而另一半人却在努力把它变成Java”。Paul希望Ruby on Rails社区能够逐渐成熟,在Web开发中引入合适的架构,而不是重新发明一个企业级Java Beans这样的东西。

除此之外,Paul还介绍了目前优秀的Ruby解释器:

  • YARV是目前Ruby 1.9.x的官方解释器,相比Matz最初的Ruby解释器,在性能上有了很大的提升。
  • JRuby是目前最成熟、广泛应用的能够替代YARV的Ruby解释器,它的开发团队一直保持更新。JRuby利用了Java虚拟机的所有优势:包括即时编译、种类丰富的Java库、与遗留系统的Java代码互操作、真正的原生多线程支持。最后一点非常重要,因为可以利用现在的多核服务器:使用多线程比新进程更能有效地利用内存。
  • Iron Ruby是.Net框架上的Ruby实现,虽然缺少了微软官方的直接支持,但依然在发展。

还有用Ruby写成的Ruby解释器 Rubinius、基于VMWare GemStone/S 3.1虚拟机上的Ruby实现 Maglev、RubyCocoa的继任者 MacRuby等等。

崔康 热情的技术探索者,资深软件工程师,InfoQ编辑,从事企业级Web应用的相关工作,关注性能优化、Web技术、浏览器等领域。

您可能也会喜欢

相关 [社区 专家 ruby] 推荐:

社区专家谈Ruby及Rails的发展

- - InfoQ cn
最近,Ruby社区专家Paul Wilson 撰文回顾了Ruby发展的过去和现状,同时对Ruby未来发展的方向表示了自己的担忧. Paul从2005年开始接触Ruby,当时还有许多醉心于极限编程的同事,一起加入到Rails的时尚潮流中. 许多Ruby开发者都来自敏捷社区,大家都对企业级Java编程中为了实现一点功能却要大量的代码和XML配置的做法很厌倦:.

Ruby社区应该去Rails化了

- - robbin的自言自语
从Linkedin和Iron.io抛弃ruby说起. 最近半年关于Ruby编程语言最负面的两条新闻莫过于2012年10月的报导: Linkedin从ruby迁移到node.js,30台服务器减到3台,以及2013年3月的报导: Iron.io从ruby迁移到Go,30台服务器减到2台. node.js和Go都是最近两年服务器端高并发编程的热门语言,Linkedin和Iron.io抛弃Ruby迁移之后,都获得10倍以上的系统性能提升,效果非常好.

了解Ruby Gems

- Jacky - Reborn
所谓RubyGem,就是一个个软件包,通常被简称为“gem”. 通常一个Gem里包含一个Ruby应用程序或者一个Ruby程序库. 而RubyGems软件本身允许用户在自己的系统中轻松地下载、安装、操作Gems. 以下两个网址无论如何都应该放到自己的收藏夹里:. 最著名的Gem之一,当然是Rails——当我们安装Rails的时候,使用的命令行是:.

开始Ruby

- TheLover_Z - 博客园-首页原创精华区
我的上一篇为什么要学动态语言和大家分享了一些心得,如果有人因此想试试动态语言,哪怕是一点点,我也很高兴,毕竟自己写的东西还有点意义. 俗话说,万事开头难,但是开始用动态语言一点也不难,还是以ruby为例. 1.首先来看看这个网站, http://tryruby.org/. 顾名思义,这个网站的目的就是让大家试试Ruby,我觉得做的比较好的就是它有一步步的教程,只要照着它的提示一步步往下,就能领略Ruby的魅力.

Ruby On Rails 4 hello world,Ruby On Rails上手

- - CSDN博客Web前端推荐文章
有机会再试一试Rails了,只是原来接触的是2,现在已然变成了4,似乎现在的安装比原来会快些. 似乎这就是当前的最新版本. 似乎这就是诸如Django、Rails这类对于轻量级网站的数据库要求. 其他可以看情况安装,如openSUSE. 可以直接用rails生成. 这样的话打开  http://localhost:3000 就可以看到,Rails的欢迎界面Welcome aboard,有点类似于Django-CMS的小马哥~~.

安装rails(ruby on rails)

- - BlogJava_首页
  记得两年前使用ror做网站,自动生成功能记忆犹新,只是当时网络知识实在缺乏,体会不到其中的乐趣. 现在了解的很多了,书也有两本,一直想重新体验最新版做个网站. 安装这个过程实在有点坑爹,查找网上若干ror的书包括2012年版的书,按照上面的步骤都没法安装完成,搞得我一会在linux下试验,一会在windows下试验,都没成功,只好放下.

Ruby视频资料清单

- Shu. Wang - 欧阳的技术笔记
斯坦福Ruby与Rails进行Web开发的开放课程. 通俗易懂,不过其中课程使用的Rails版本是2.3. 同时,本课程配合斯坦福系列开发课程,是非常好的自学材料. lynda公司出品的rails3基础教程. 绝对通俗易懂,视频拆分方式很适合等人时间阅读. 并不支持Rails3.1,是Rails3.0.

我的PHP,Python和Ruby之路

- heely - robbin的自言自语
因为看到一篇讨论PHP,Python和Ruby的编程语言讨论贴,就说说我的PHP,Python和Ruby之路吧:. 我2000-2001年用PHP用了两年,那还是第一次互联网泡沫时期,到2001年后期,Servlet/JSP流行,然后我就发现:你说用PHP写的东西,都会被人鄙视. 当时我们其实也用Java了,只不过用Java写后端的消息队列.

关于Ruby 2.0: 我们的计划

- Fred - LetRails
这是Matz在去年10月份做的一个关于Ruby 2.0的主题演讲,正如他所说,Ruby 2.0在特性方面只是向前迈进了一小步,更多的改变将发生在实现层面. Ruby 2.0的新特性包括:. 1.step(a, b) do |i| p i end # 是从a到b,还是从b到a. 减少monkey patch对系统可能造成的负面影响.

Ruby世界:汉字转换成拼音

- 董玉伟 - 道喜技术日记 .^. 天天红玉世界