AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

社区专家谈 Ruby 及 Rails 的发展

  • 2012-11-14
  • 本文字数:2748 字

    阅读完需:约 9 分钟

最近,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 等等。

2012-11-14 00:363152
用户头像

发布了 501 篇内容, 共 272.7 次阅读, 收获喜欢 62 次。

关注

评论

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

掌握这5大功能,解锁鲲鹏开发新发现

华为云开发者联盟

开发 华为云 12 月 PK 榜

活动预约报名系统怎么做?快来借鉴「苍山徒步之家」的经验做法

天天预约

微信小程序 SaaS 数据统计 预约工具 活动报名

智能低代码平台,驱动企业数字化转型

元年技术洞察

低代码 数字化转型

非正式全面解析 NebulaGraph 中 Session 管理

NebulaGraph

图数据库 会话管理 session管理

龙蜥开发者说:众人拾柴火焰高!聊一聊我在社区的所思所想 | 第 14期

OpenAnolis小助手

开发者 开源社区 龙蜥开发者说 LoongArch 架构 红旗软件

OCR在转转游戏的应用

转转技术团队

后端

火山引擎DataTester:如何做A/B实验的假设检验

字节跳动数据平台

大数据 AB testing实战 12 月 PK 榜

百家号奇妙未来季创作大赛落幕!AIGC开启内容创作新征程

科技热闻

BitSail“拍了拍”你,并给你一份快速入门指南

字节跳动数据平台

开源 数据引擎 12 月 PK 榜

Python图像处理丨详解图像去雾处理方法

华为云开发者联盟

Python 人工智能 华为云 12 月 PK 榜

上云节省 35%计算资源,420 个运维人天:运满满实时计算实践和思考

Apache Flink

大数据 flink 实时计算

数字化时代,校园生活还可以这样过

华为云开发者联盟

数据库 后端 华为云 12 月 PK 榜

华为云助推武水集团项目成功入选住建部“智慧水务”典型案例!

华为云开发者联盟

云计算 后端 华为云 12 月 PK 榜

MASA MAUI Plugin (七)应用通知角标(小红点)Android+iOS

MASA技术团队

blazor MASA MAUI MASA Blazor

大数据程序员培训机构怎么选

小谷哥

哪些java培训中心比较靠谱?

小谷哥

和鲸科技入选 2022 中国数据智能领域最具商业潜力的科技 Cool Vender丨甲子20 榜单

ModelWhale

数字化转型 数据智能 科技企业 榜单

使用 ClusterResourceSet 为 Cluster API 集群自动安装 CNI 插件

Se7en

2022年京东读书年度之书,获评读者最喜爱互联网+的就是……

博文视点Broadview

干货 | 如何进行CMDB数据运营?

嘉为蓝鲸

数据运营 CMDB 自动化运维 嘉为蓝鲸

诚迈科技董事长王继平赴国创中心交流车用操作系统合作事宜

科技热闻

java编程培训怎么学习?

小谷哥

深度学习入门篇 | 常用的经典神经网络模型

九章云极DataCanvas

神经网络 深度学习

转转支付网关之注解式HTTP客户端

转转技术团队

后端 Java、 注解 http client

零基础3Dmax入门教程

Finovy Cloud

软件 3DMAX

如何通过Java应用程序将Word转为Excel

在下毛毛雨

Java Excel word 文档 转换

“云-网-边-端”融合,汽车新势力的DevOps建设

嘉为蓝鲸

DevOps 自动化运维 嘉为蓝鲸

一家可靠的HDI板厂,需要具备哪些基本条件?

华秋PCB

生产 工艺 PCB PCB电路板

前端程序员培训学习有哪些攻略

小谷哥

前端程序员培训学习后的就业前景怎么样

小谷哥

阿里妈妈内容风控模型预估引擎的探索和建设

阿里技术

风控模型

社区专家谈Ruby及Rails的发展_Ruby_崔康_InfoQ精选文章