NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:161985
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

大数据训练营一期0829作业

朱磊

flutter开发中vscode插件推荐1

坚果

flutter vscode 11月日更

Apollo选型及优势介绍

小鲍侃java

11月日更

进击的Java(八)

ES_her0

11月日更

详解低延时高音质:丢包、抖动与 last mile 优化那些事儿

声网

音频体验 RTE技术详解 last mile 优化

Podman是什么

耳东@Erdong

容器 11月日更 Podman

面对DNS劫持,只能坐以待毙吗?

阿里巴巴云原生

阿里云 云原生 云拨测 DNS劫持 产品活动

博文推荐|Pulsar 的消息存储机制和 Bookie 的 GC 机制原理

Apache Pulsar

存储 Apache Pulsar 消息中间件 Apache BookKeeper bookie

CSS奇技淫巧之滤镜

Augus

CSS 11月日更

TypeScript 是弱类型

HoneyMoose

TypeScript 类型系统

HoneyMoose

【Flutter 专题】06 图解基础【登录】页面并学习相关 Widget

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

使用 JavaScript 创建和下载文件

devpoint

JavaScript File Blob 11月日更

KubeMeet 深圳站完整议题出炉!快来 get 云原生边缘计算硬核技术干货

阿里巴巴云原生

阿里云 云原生 边缘计算 KubeMeet 线下活动

在线极限词,敏感词,违禁词查询工具

入门小站

工具

Android C++系列:访问Assets 文件夹

轻口味

c++ android jni 11月日更

HW3 - 外包学生管理系统架构文档

WWH

架构实战营

架构训练营 - 模块四

Geek_9de3de

架构实战营

大数据训练营一期0908作业

朱磊

大数据训练营一期0919作业

朱磊

dart系列之:在dart中使用packages

程序那些事

Java flutter dart 程序那些事 11月日更

火出边际的Serverless,你居然还不了解?

华为云开发者联盟

云计算 Serverless 运维 云原生 敏捷

告诉你!操作系统是个大骗子!

博文视点Broadview

【Promise 源码学习】第九篇 - Promise.resolve 和 Promise.reject 的实现

Brave

源码 Promise 11月日更

ThreadPoolExecutor 任务提交原码分析

new life

ThreadPoolExecutor

Golang Gin 框架参数解析介绍(三)

liuzhen007

11月日更

linux实战清理挖矿病毒kthreaddi

入门小站

Linux

到底什么样的ABAP系统能运行Fiori应用

Jerry Wang

SAP abap Fiori 11月日更

企业数字化转型与SAP云平台

Jerry Wang

SAP 11月日更 SAP数字化转型 SAP云平台

版本化ASP.NET Core WebApi

喵叔

11月日更

Vue进阶(幺玖幺):ECharts 实现地图功能

No Silver Bullet

Vue eCharts 11月日更

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