InfoQ

InfoQ

文章

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Ruby语言的发展趋势和启示

作者 姜伟 骆古道 发布于 2008年4月6日

领域
架构 & 设计,
企业架构,
语言 & 开发
主题
Ruby ,
领域专用语言 ,
商业 ,
Ruby on Rails
标签
Rails ,
Ruby on Rails

前言

文章着力于阐述Ruby语言商业化发展的可能性,同时也希望更多对Ruby社区感兴趣的开发者对当前Ruby语言发展有更进一步的了解。本文很多想法都是基于笔者对Ruby语言发展的理解和认识而提出的。Ruby语言可以说当前是一个春秋战国时期,作者表达了国内开发者应该如何跟进这一次Ruby语言发展机遇的想法。

正文

在进入正文之前,让我们先看一下从网络上摘要下来的两则案例。

案例一:

Clayton M. Christensen提出的破坏性技术(disruptive technology)的基本理论源自其思考1988年数字设备公司倒闭时的灵感。为什么一家在各方面都很出色的公司会突然间遭到惨败呢?
在数字设备公司(Digital Equipment)这颗明星陨落时,商业媒体纷纷指责该公司管理不善。但是Christensen注意到,当时同时倒闭的还有其它几家小型机公司。既然它们的破产并非事先商量好的,那么就一定有另外的因素在起着作用。他的结论是,小型机行业的衰败并不仅仅是由于个人电脑的出现,更重要的是PC机代表着小型机公司无法响应的具有破坏性的技术。

案例二:

柯达,这个保守的卤化银的巨人发明了世界上第一台数码照相机,时值十几年后的2006年这个巨人才垂死地宣布通过换标来表明自己将坚定地执行其向数码领域全面转型的战略,这个时候美国的照相机市场上的数码照相机销售数量已经首次超过胶片照相机了。柯达的技术创新怎么啦?它在胶片领域的持续不断的技术领先和创新为何不灵光了?HBS的教授Clayton M. Christensen的The Innovator’s Dilemma的管理理论帮助我们看清了技术创新这个层面的东西(不能“只缘身在此山中”)。维持性技术(sustaining technology)在破坏性技术(disruptive technology)出现以后终将成为明日黄花。

上述两篇案例都谈到了破坏性技术(disruptive technology)。事实上,破坏性技术现在已经成为彻底创新技术的代名词了。固步自封、满足现状是不可能获得发展的。在Ruby语言的商业化和技术发展中也是如此。

Ruby语言的商业化

在不久前,Ruby语言的Rails框架版本2.0的发布,使得Ruby语言的影响力越来越广泛而又深入。那么,谁在使用Ruby语言的网络应用框架呢?调查结果表明,Ruby语言的Rails框架不仅得到了国际性大公司,如Siemens和IBM等的采用,而且也已为许多著名的大流量应用网站所采用,如综合性社会网站spokeo和人名搜索网站spock。要知道也就是在几年前,Ruby语言还是那么的默默无闻、鲜为人知。Rails框架的成功使Ruby语言成为主流语言起到了重要的推动作用。

Rails框架的成功,同时也吸引了许多企业和开发人员投入到这个新的Ruby语言的框架开发之中,其结果是新的框架如雨后春笋般的出现,如Merb和桌面软件框架Swing。尤其是框架Merb更加是引人注目。该框架不仅吸取了Rails的框架的优点,同时又充分地发挥了自己的核心更小、与第三方框架的集成更加灵活等等的优势,也难怪有人将其说成是一个Rails框架的简体版本。从网络新闻报道上看,虽然Merb在很多方面与Rails有相似之处,但是框架Merb的商业化倾向比Rails框架更为明显。

Ruby语言的商业化应用另一个重要举措是与NetBeans 6.0的结合。我们知道,作为企业商业使用的软件开发框架,最重要的一点是要有一个与其相适应的集成开发环境。而在这个方面,NetBeans 6.0可谓是近年来发展最为迅速的一个工具了,今年它又获得了软件业的最高荣誉:Jolt最佳工具奖。NetBeans 6.0不仅可以针对以C语言的实现(下面简称为Ruby或者CRuby)开发工具,也可以针对以Java语言实现的JRuby开发软件,更重要的是它还包括了Rails框架软件的开发工具。当然,必须看到其它类似的企业级的集成开发工具也在积极跟进,如Aptana Studio和Eclipse DLTK动态语言工具,这是Ruby语言发展的一个重要的动力。

从技术角度分析,要使得一门计算机语言真正能够走向商业化道路,仅仅只有开发工具是不够的,最重要的是该语言实现的运行环境性能和速度。在这一方面,JRuby语言明显走在了其它语言的前头,如在文章“通用Ruby多虚拟机API研究开始”中就已经开始探讨了如何解决在Ruby上同时运行一个以上应用时需要多个解释器的问题,文章讨论的目的是如何避免造成内存的浪费。当然,这仅仅是众多十分深入研究的一个实例。跟其它实现不同的是JRuby是目前唯一能够在虚拟机上运行的Ruby语言。Ruby语言的虚拟机对于程序的性能和速度的提高起重要的作用。这里暂且不谈虚拟机的利用,但就目前广泛采用的Ruby 1.8.6版本而言,基本上就能够满足大型应用网站的需求了。一旦出现性能好、速度快的虚拟机在市场上正式发行,那对于Ruby语言的来讲就会是如虎添翼。Ruby语言的商业价值是显而易见的。

Ruby语言的实现多元化

随着Ruby语言的实现越来越多,Ruby语言一词的概念也在发生着变化。在2000年或者再晚一些,Ruby语言一般都是指以C语言实现的官方版本Ruby,但是现在Ruby语言正在变成为一个通用的概念,或者说是该语言的技术规范。

我们可以从三个方面来分析Ruby语言的实现。一是面向CRuby的兼容性的实现;二是以Ruby语言风格的不兼容的实现,三是以Ruby语言为基础的特定领域语言的实现。

下面我们列举了一些重要的面向CRuby的兼容性的Ruby语言实现:

  • 以C语言实现的Ruby语言 = Ruby 或者 CRuby(非正式名称)
  • 以Java语言实现的Ruby语言 = JRuby (由Sun公司出资所赞助)
  • 以基于Smalltalk-80架构采用C语言实现的Ruby语言 = Rubinius(由Engin Yard公司出资所赞助的,该公司聚集大量Ruby语言高手)
  • 以Objective-C语言实现的Ruby语言 = MacRuby(由Apple公司出资所赞助的)

在上述的列举中,除了官方版本Ruby之外,其它的实现都是由大公司出资所赞助的,大公司为什么要出资赞助这些开源的项目呢?其中的玄妙不得而知。但是,可以肯定的是他们对Ruby语言的发展前景的认可。

Ruby语言的实现多元化,应当说是Ruby语言发展过程中百花齐放的结果,这是好事。但由此可能带来的问题是,Ruby语言的实现之间的兼容问题,就如Linux的发展过程。

Ruby一直到今天仍然是最重要的Ruby语言的实现,随着项目YARV合并到Ruby,使得Ruby的性能得到一次比较大的飞跃,这个合并的结果就是已经发行的开发版本Ruby 1.9。当JRuby语言的实现得到进一步完善时,与Ruby之间的兼容性问题将变得越来越明显,尽管双方之间在沟通和协调,但是两者实现之间的不兼容性是始终存在的,比如线程问题,哪怕即使是一个小小的命令也存在着差异。而且从根本上说,所谓兼容也只是单向的,即JRuby兼容CRuby,反之则不然。这种情况本身就是一种相互之间的脱离。不兼容性给企业和开发人员带来了巨大的麻烦和阻碍。

随着以非兼容性的、Ruby语言风格的语言出现,也会冲击和影响着Ruby语言的发展。如Sapphire语言,该语言声称,它具有Ruby语言语法风格并且更为简单。它的最重要的设计思想是一致的、明确的和深度面向对象的。这门新兴的似Ruby语言,尽管目前该语言本身的影响力很小,但它的出现至少是给了我们一种新的思维和启示。

以Ruby语言实现的特定领域语言DSL(Domain Specific Languages),是Ruby语言的一个最重要的特性。它使得Ruby语言的应用更加广泛而深入,在Rails框架中涌现出大量的DSL,这也是 Rails成功的原因之一。模板系统Malline能够使得代码变得更为容易维护和管理,而且在代码开发中可以只需要会Ruby语言就可以开发网络的页面,而不需要理会其它语言如HTML。还有基于桌面布局语言LEL能够使得桌面软件开发变得更加简单和方便。

总而言之,Ruby语言的实现多元化是Ruby语言的发展的必然,我们只有打破框框才能寻找到Ruby语言的最佳实现,只有最佳才能带来最大的回报,而Ruby语言的目前的发展方向正是沿着这条道路在前进。

Ruby语言的虚拟化

这里所谈及的虚拟机是特指程序虚拟机,即程序的虚拟运行环境,或者更确切地说,是在编译器和运行层面的语言虚拟机。

前面已经提到,一门计算机语言要能够为企业所采用,其性能和速度是重要的因素。虚拟机就是解决这个问题的重要而实质的方法之一。

当前虚拟机正在从单一语言虚拟机向多语言虚拟机方向发展。例如,Java语言虚拟机已经从Java语言变成为多种语言共享的虚拟机。我们知道,JRuby语言是可以运行在该虚拟机上,另外Jython也在实现利用该虚拟机。又如Parrot是一款最成熟的面向动态语言的虚拟机。尽管该虚拟机是为Perl语言所设计的,但是它也是可以成为Ruby语言的虚拟机。尽管这是一种发展趋势,但是作者认为,单一语言虚拟机的性能应该会更好。据悉,Ruby 2.0可能会采用自己的单一语言虚拟机Rite

尽管至今CRuby还没有出现自己的虚拟机,但是Ruby语言虚拟机的商业需求是明显的。这也是JRuby语言实现的目的之一。除了JRuby有自己的虚拟机外,Ruby语言的虚拟机也在不断的出现,比如基于Smalltalk-80语言的Ruby语言虚拟机Shotgun。从该网站的主页上可以看出,Shotgun的目标是十分明确的,就是为商业服务。它能够支持运行编译代码,这样就可以支持代码的加密工作,以有效地保护软件的知识产权问题,这是商业应用中的头等大事。此外它的解释器内核更简单和更容易维护,既节省人力、物力又节省时间。尤其需要值得注意的是,Ruby语言虚拟机提供性能不是以硬件为代价的,而是以软件本身的实现为前提的,这种实现的潜力还在不断增加。

随着Ruby语言虚拟机的不断创新,可以肯定Ruby语言及其框架的应用软件将会更加丰富。在其它Ruby语言虚拟机还尚未出现之前,JRuby语言将会借助于Java语言的力量和当前越来越多的多核电脑性能成为一种不可忽视的选择。

几点启示

之所以Ruby语言和Rails框架能够在众多的语言和框架脱颖而出,是因为它们不是一种维持性的创新技术,而是一种破坏性的创新技术。我们知道,有很多框架都在模仿Rails框架,但是能否像Rails那样取得成功呢?事实上,真正的成功源自于与众不同的彻底和独特创新。

从上面的事实和分析,可以看出,无论是Ruby语言还是Rails框架已经开始跨越一个重要的商业断层,正在向成熟挺进和向企业迈进。

从Java语言的标准竞争经历,可以想象一旦Ruby语言进一步走向商业化,将会是怎么样的未来。对此,我们是否做好了准备?我们是否也能够拥有自己的Ruby语言的实现?如使用D语言,是否也能够在未来的这门语言中有一席发言之地呢?

作者简介

姜伟,上海应用技术学院经济与管理学院信息管理系,教师,副教授,系统工程硕士研究生,研究方向:信息管理理论与方法、系统分析与设计、数据库、计算机算法与WEB应用。

wspnet 发表人 wei sp 发表于
Re: wspnet 发表人 wei sp 发表于
Re: wspnet 发表人 wei sp 发表于
dfg 发表人 wei sp 发表于
Re: dfg 发表人 wei sp 发表于
Re: dfg 发表人 霍 泰稳 发表于
有点不明白 发表人 张 军 发表于
Re: 有点不明白 发表人 gudao luo 发表于
?? 发表人 Li ray 发表于
Re: ?? 发表人 Li ray 发表于
Re: ?? 发表人 gudao luo 发表于
Ruby真能"破坏"吗? 发表人 Zhang Myhui 发表于
Re: Ruby真能 发表人 chen jinlai 发表于
  1. 返回顶部

    wspnet

    发表人 wei sp

    wspnet在中国家医药管理局

  2. 返回顶部

    Re: wspnet

    发表人 wei sp

    wspnet

  3. 返回顶部

    Re: wspnet

    发表人 wei sp

    wspjxja

  4. 返回顶部

    dfg

    发表人 wei sp

    dfadfasdafs

  5. 返回顶部

    Re: dfg

    发表人 wei sp

    adfdf

  6. 返回顶部

    Re: dfg

    发表人 霍 泰稳

    sp wei好,请勿发布无意义的内容,谢谢。




    InfoQ中文站编辑 霍泰稳

  7. 返回顶部

    有点不明白

    发表人 张 军

    cruby的解释器不就是ruby的虚拟机吗

  8. 返回顶部

    ??

    发表人 Li ray

    Rubibius好像是以Ruby实现的,参考了一些smalltalk80的设计。

  9. 返回顶部

    Re: ??

    发表人 Li ray

    具体一下,Rubinius目前有25000行C代码和14000行Ruby,目标是消除C Code。

  10. 返回顶部

    Re: 有点不明白

    发表人 gudao luo

    精确的说明参见下面的Wiki链接:

    什么是虚拟机(virtual machine)?

    en.wikipedia.org/wiki/Virtual_machine

    什么是解释器(Interpreter)?

    en.wikipedia.org/wiki/Interpreter_%28computing%29

  11. 返回顶部

    Re: ??

    发表人 gudao luo

    谢谢,改正:

    以基于Smalltalk-80架构采用C语言实现的Ruby语言 = Rubinius

  12. 返回顶部

    Ruby真能"破坏"吗?

    发表人 Zhang Myhui


    案例2中,数码相机的成像技术,完全不同于以往的卤化银成像技术,因此造成数码相机的成像不再需要卤化银的支持,进而造成传统成像技术不能得到继续发展,在这一点上,数码成像技术称之为破坏性技术,毫不为过。




    但在计算机技术的世界中,恐怕情况稍有不同。Ruby是一种高级脚本语言,随着Ruby逐渐流行,出现了作者所说的“Ruby语言的实现多元化”这种情况,也出现了很多类Rails风格的框架,而且框架的实现,也呈现出多元化的趋势。




    所以,我觉得,Ruby和Rails所体现出的创新,并不是破坏性的,它很好的延续了多种计算机技术,可能在编写脚本时,你需要掌握Ruby语法,符合Ruby语言的标准,但是在Ruby的背后,可是各种各样其它的语言或技术在发挥作用。




    因此,Ruby是创新,但还不是某种破坏性技术,或“吃语言”的魔鬼。

  13. 返回顶部

    Re: Ruby真能

    发表人 chen jinlai

    ruby根本没摧毁以前的系统...只是有一些影响
    php的照常php,j2ee的照常j2ee

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。