写点什么

社区专家谈 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:362970
用户头像

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

关注

评论

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

数字化转型下的企业人力资源信息系统研究

不在线第一只蜗牛

人力资源 低代码 数字转型

通过ETLCloud实现SQL Server数据同步至Oracle

RestCloud

oracle sql ETL SqlServer ETLCloud

Tampermonkey for Mac(油猴Safari浏览器插件) 4.20.6184 中文版

Mac相关知识分享

脚本管理 插件下载

软件测试学习笔记丨JUnit5超时处理

测试人

软件测试

Royal TSX for Mac(强大的远程管理软件)

Mac相关知识分享

桌面管理软件

Illustrator 2023((ai2023)下载激活安装,支持win版和mac版

你的猪会飞吗

ai2023 AI2023下载

Trapcode Particular for Mac(AE 3D粒子系统插件)

Mac相关知识分享

插件 图形设计

告别数据烦恼,如何一键搞定数据归档与清理?

NineData

数据归档 NineData 清理功能 时区选择 字段支持

阿里巴巴中国站关键字搜索API返回值分析:电商数据驱动的渠道拓展与整合

技术冰糖葫芦

API Explorer API 文档 API 管理 pinduoduo API

轻松两步,借助向量数据库 VectorDB 与千帆 Appbuilder 构建个性化本地问答知识库

Baidu AICLOUD

向量数据库 rag

平价 Vision Pro 需搭配 Mac/iPhone;OpenAI 收购实时分析数据库公司丨 RTE 开发者日报

声网

智心顾问:为心智障碍家庭带来温暖与专业支持

有道技术团队

#人工智能

数据产品经理的发展与现状(二)

松子(李博源)

#数据产品经理

你还在手动操作仓库?这款 CLI 工具让你效率飙升300%!

沉浸式趣谈

GitHub gitee 仓库 del-repos

一会一展一赛,共绘 AI 新篇章!和鲸出席 GAITC 2024 全球人工智能技术大会

ModelWhale

人工智能 AI技术

5分钟了解LangChain的路由链

快乐非自愿限量之名

数据库

用云手机可以做tiktok吗?

Ogcloud

TikTok 云手机 海外云手机 tiktok云手机 tiktok运营

AlDente Pro for Mac(电池最大充电限制软件

Mac相关知识分享

Mac Mac软件 电池软件

DNS解析失败是什么意思?DNS解析失败怎么办?

国科云

Axure RP 9 for Mac(原型设计软件)

Mac相关知识分享

Axure RP 9 设计软件

企业级低代码开发效率变革赋能业务增长

EquatorCoco

低代码 数智赋能

Redis Desktop Manager for Mac(Redis桌面管理工具) v2022.5.0中文版

Mac相关知识分享

可视化工具 mac软件下载

聚力教研共成长!思腾合力携手昇腾AI打造人工智能云平台

Geek_2d6073

Altair 人工智能技术助力MABE预测消费者行为,实现设备性能优化

Altair RapidMiner

人工智能 AI 算法 数据分析 预测分析

基于Istio服务网格的熔断限流实现

inBuilder低代码平台

云原生技术领域的探索与实践

快乐非自愿限量之名

云原生

win版JetBrains RubyMine 2024(Rails/Ruby集成开发环境) v2024.1.4中文特别版

iMac小白

WatchDog:一款.NET开源的实时应用监控系统

不在线第一只蜗牛

.net 开源 开源软件

GPU云服务器是什么?有什么用途?

Ogcloud

云计算 gpu 云服务器 GPU云服务器

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