写点什么

Ruby 语言的发展趋势和启示

2008 年 4 月 06 日

前言

文章着力于阐述 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 应用。

2008 年 4 月 06 日 20:303219

评论

发布
暂无评论
发现更多内容

阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

古时的风筝

Java规范 Java开发手册

大一到大三总结

迷羊

学习 经历

谈谈控制感(4):损失的后果很严重

史方远

职场 心理 成长

高仿瑞幸小程序 09 云数据库初体验

曾伟@喵先森

小程序 微信小程序 前端 移动

Web3极客日报#140

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

游戏夜读 | Scikit-learn的2018自述

game1night

Binlog2sql恢复误删除的数据

一个有志气的DB

MySQL 安全 数据

测试开发专题:spring-boot自定义返回参数校验错误信息

测试轩

Spring Boot 测试

游戏发行中学到的重要经验(严肃长文)

谢锐 | Frozen

独立开发者 游戏开发 游戏出海 移动互联网

零基础如何学架构

兆熊

架构

谈谈双亲委派模型的第四次破坏-模块化

寻筝

Java JVM

当你不被尊重的时候,才会想起去尊重别人

小天同学

人生 个人成长 感悟

战略懒惰有多可怕

Neco.W

创业 重新理解创业 初创公司

JVM源码分析之Object.wait/notify实现

猿灯塔

JVM

Leetcode 556. Next Greater Element III

隔壁小王

算法

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (八)好单元测试的特质

编程道与术

Java 编程 软件测试 TDD 单元测试

识别代码中的坏味道(一)

Page

Java 面向对象 重构

看完这篇HTTP,跟面试官扯皮就没问题了

cxuan

https okhttp

找一个更好的理由

史方远

职场 成长 工作

elasticsearch源码解析(一)——restapi

罗琦

elasticsearch 源码分析 RESTful

为什么软件开发很难外包

刘华Kenneth

外包 DevOps 风险 背锅

初次见面

KAMI

记一次MHA切换故障踩的坑

一个有志气的DB

MySQL 高可用 复制 主从同步 故障分析

看完这篇,你也是字符编码大神(ASCII、Unicode、UTF-8、UTF-16、UTF-32)

Meandni

Java 面试 Unicode utf-8 utf-16

经历过疫情,你懂得了什么

Winann

疫情 个人成长 生活 成长

如何在 Mac 上优雅的截图和录屏

Winann

macos 效率 效率工具 Mac

MySQL安全-审计

一个有志气的DB

安全 MySQ

我画了35张图就是为了让你深入 AQS

一枝花算不算浪漫

AQS jdk源码

“四个维度” 讲明白什么是微服务!

攀岩飞鱼

微服务架构 单体系统 架构设计 团队组织 康威定律

Azure App 部署Django 和 PostgrSQL

yann [扬] :曹同学

Python azure

香港科技大学与OSL海科签订无毒海洋防污技术独家授权协议

极客编

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

Ruby语言的发展趋势和启示-InfoQ