【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

Ruby 2.0 Preview 1 发布,正式版将于 2013 年 2 月发布

  • 2012-11-15
  • 本文字数:2013 字

    阅读完需:约 7 分钟

Ruby 2.0 的发布经理 Yusuke Endoh 宣布了如下几件事:Ruby 2.0.0 的直接特性已经冻结, Preview 1 发布,正式版的发布日期是 2013 年 2 月 24 日。届时正是 Ruby 的 20 周年纪念日,因此 2.0 版本选择这个时间发布也非常合适。

新特性的总结可以在 Ruby 的 NEWS 文件及其问题跟踪系统中找到。所有特性之中,Keyword Argument(关键字参数)和Refinement 对Ruby 程序员的影响是最大的:

Keyword Argument

不同于仅仅传递一个哈希值作为方法参数,Ruby 2.0 将完全支持关键字参数。下面是选自 Ruby 自身单元测试程序的一个代码片段:

复制代码
def f1(str: "foo", num: 424242)
[str, num]
end
def test_f1
assert_equal(["foo", 424242], f1)
assert_equal(["bar", 424242], f1(str: "bar"))
assert_equal(["foo", 111111], f1(num: 111111))
assert_equal(["bar", 111111], f1(str: "bar", num: 111111))
assert_raise(ArgumentError) { f1(str: "bar", check: true) }
assert_raise(ArgumentError) { f1("string") }
end

注意该特性只能用于有默认值的参数。关于新语法的更多例子以及新语法如何使用传统参数,请参考 Ruby 的单元测试

Refinement

refinement 的目标是通过减少补丁的应用范围使打动态补丁(monkey patching)更为安全。下面是由 Matz 给出的一个例子,MathN 模块包含进来之后“/”操作符才能在 Fixnum 上使用:

复制代码
module MathN
refine Fixnum do
def /(other) quo(other) end
end
end
class Foo
using MathN
def foo
p 1 / 2
end
end

Yehuda Katz 写了一篇详细的博客文章来介绍如何将 Refinement 应用于实践之中。Refinement 目前已包含在 Ruby 2.0 分支中,但仍然可能因性能问题而被踢除(参见 最初请求特性的讨论)。

InfoQ 有机会对 Yusuke Endoh 做了一次访谈,向他了解了 Ruby 2.0 的更多信息。

InfoQ:你认为对用户而言 Ruby 2.0 最大的变化是什么?

refinement 是 Ruby 语言最基本的新特性,为 Ruby 的模块带来了一个新概念。很多人可以利用这一特性来替换“打动态补丁(monkey-patching)”的不良实践。请注意,该特性仍然处于演进之中,也就是说,本身还不够完善(unrefined)。随着我们相关经验的增加,它会更加成熟。(当然,我们会尽可能地尊重兼容性。)

keyword argument 则是最抢眼的特性。事实上,这远非“最大的”特性;它不过是一个语法糖。但是从实践的角度看,该特性可以让代码更简洁。

Enumerator#lazy 是懒惰的程序员(也就是熟悉函数式编程的那些人)长期以来的一个梦想。该特性用于列表的惰性求值。

Module#prepend 很可能是(隐式)使用得最多的特性。通过模块的使用,可以用一种更为整洁的机制替换 Rails 中“method_alias_chain”这种不够干净的用法。

如果打算详细学习这些特性的话,请参考 Akira Matsuda 在 RubyConf 上的讲座

当然,Ruby 的性能也有所改进。对于那些对新特性不感兴趣的人而言,这可能是最有意思的变化了。

InfoQ:从 1.9 升级到 2.0 会比从 1.8 到 1.9 的升级更容易吗?

我们相信所有“正常”的程序不需修改即可工作。在设计 2.0 时,我们就对与 1.9 的源代码级兼容性非常小心。

然而,还是有一些小的变化。我们认为这不会引起实际的兼容性问题,但我们也有可能错了。如果在官方发布之前知道了存在的问题,我们会重新考虑的。

所以,请尝试一下预览版本和候选版本,并报告发现的问题。对于您的反馈,我们非常感激。

InfoQ:你能指出用户可能遇到的一些潜在的不兼容问题吗?

前面也提到了,确实有一些小的不兼容问题。这些问题在 NEWS 文件中有相应说明。比如:

  • Object#respond_to? 对于受保护方法默认返回 false。
  • Kernel#system 和 #exec 默认情况下不继承非标准的文件描述符。
  • Object#inspect 默认不调用#to_s。

通过总结从预览版本和候选版本得到的反馈,我们希望为官方 2.0.0 版本制作一个简单的升级指南。

Yusuke 也提到了性能的改进。为了降低 Ruby 的内存使用量,2.0 版本中将会包含一个新的位图标记垃圾回收器(Bitmap Marking GC)(可以参考 InfoQ 对其开发者 Narihiro Nakamura 的访谈)。如果你想了解该垃圾收集器的工作原理,请参考这篇关于 Ruby 的垃圾收集的好文章

下面是一些有意思的新特性与重要修改,它们将是 Ruby 2.0 的一部分:

请下载 Ruby 2.0.0-preview1 版本并让我们知道你的想法!

查看英文原文 Ruby 2.0 Preview 1 Released, Final Release in February 2013


感谢姚琪琳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-11-15 10:161973
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 129.6 次阅读, 收获喜欢 34 次。

关注

评论

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

2022年双碳背景下汽车行业发展洞察

易观分析

汽车 双碳

南京哪个java培训机构好?

小谷哥

鹅厂28K程序员,不会微服务,一周就被优化了?

小小怪下士

Java 程序员 面试 微服务

大数据培训前景怎样

小谷哥

用一张图说一说 ChatGPT 内部技术工作流程

非喵鱼

Java 人工智能 AI 12 月 PK 榜 ChatGPT

ArkUI开发趣味体验,快来抽取限量HarmonyOS专属头像!

HarmonyOS开发者

HarmonyOS

用友降运维成本实践:OceanBase替换MySQL,实现高可用

OceanBase 数据库

数据库 oceanbase

IT机构哪家Java培训比较好

小谷哥

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

小谷哥

知识图谱与古希腊人物关系

数新网络官方账号

知识图谱

KCL v0.4.4 发布!自定义 YAML Manifests 输出以及 Python SDK!

Peefy

编程语言 Configuration Kubernetes Serverless #DevOps

数据库日常实操优质文章分享(含Oracle、MySQL等) | 11月刊

墨天轮

MySQL 数据库 oracle 性能优化 SQL语句

WorkPlus SE专业版:政企值得托付即时通讯移动办公平台

WorkPlus

【精彩剧透】PyCon China 2022 邀您共赴技术Party!

PyChina

Python 开源 开发者 技术日

ZBC登录iZUMi Finance双挖池APY高达189%,极致通缩的典范

EOSdreamer111

已经看过这本书的“眼替”,带你探索广告投放的秘密!“照着操作,果然就能有效果!”

图灵社区

流量

读书破万“卷”,《软件研发效能度量规范》的先进认知与开源实现

思码逸研发效能

研发效能 效能度量

ClickHouse在自助行为分析场景的实践应用

转转技术团队

Clickhouse MPP 大数据分析 OLAP 场景实践

ZBC登录iZUMi Finance双挖池APY高达189%,极致通缩的典范

股市老人

随机方法性能差异

FunTester

谁能通俗的解释下,什么是云服务器?

Finovy Cloud

服务器 云服务器 云渲染 云渲染农场

Redis缓存雪崩、击穿、穿透、双写一致性、并发竞争、热点key重建优化、BigKey的优化 等解决方案

C++后台开发

redis 中间件 后端开发 C++开发 redis缓存

极客时间运维进阶训练营第七周作业

好吃不贵

揭秘倚天实例背后的硬核实力

阿里技术

云计算 云原生

全面上新!阿里2023版(Java岗)面试突击手册,Github已标星37K

Java永远的神

程序员 架构 程序人生 后端 java面试

开往春天的自动驾驶,从特斯拉和毫末智行的AI技术探索说起

脑极体

【异常】window 10 安装node.js时遇到2502 2503错误解决方法

No8g攻城狮

nodejs Node node,js

大数据培训出来后就业好吗?

小谷哥

已帮助数万程序员找到工作的阿里巴巴面试参考指南到底有什么魅力?

Java全栈架构师

程序员 程序人生 后端 java面试 八股文

StarRocks技术内幕 | 打造一款强大成熟的数据库有多难?

StarRocks

数据库·

企业即时通讯软件哪个比较好用?

WorkPlus

Ruby 2.0 Preview 1发布,正式版将于2013年2月发布_Ruby_Mirko Stocker_InfoQ精选文章