【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

数字化扶乩的最佳语言是英语?

FN0

AIGC

Vue3中常用的Composition(组合)API-ref(引用)函数

不觉心动

6 月 优质更文活动

万字详解常用设计模式

越长大越悲伤

设计模式

CSS小技巧之悬停3D发光效果

南城FE

CSS 前端 动画 3D 交互

漫谈 SAP 产品里页面上的 Checkbox 设计与实现

Jerry Wang

SAP 前端设计 思爱普 6 月 优质更文活动

MySQL DeadLock -- 二级索引导致的死锁

红袖添香

MySQL 数据库 数据库死锁

Vue3中常用的Composition(组合)API-watch(监视)函数

不觉心动

6 月 优质更文活动

做好演讲表达的道法术器(《如何激活你的表达思维》-- 培训收获)(68/100)

hackstoic

领导力 演讲 沟通

xenomai内核解析--实时linux概述

沐多

RTOS 实时linux xenomai

Backdata.net 搜索引擎

Larry

搜索引擎 导航网站

一文读懂ChatGPT的工作原理:大语言模型是个啥?它到底咋工作的?

禅道项目管理

#人工智能 ChatGPT AI 2022

飞书深诺多系统数据同步方案

飞书深诺技术团队

Vue3中常用的Composition(组合)API-初识setup

不觉心动

6 月 优质更文活动

C语言编程—语法练习

二哈侠

C语言 语法 6 月 优质更文活动

AI关于AI民主化的高见

FN0

AIGC

Kubernetes集群认证管理

穿过生命散发芬芳

6 月 优质更文活动

基于STM32的铁路自动围栏系统设计

DS小龙哥

6 月 优质更文活动

在 Go 中使用 sqlx 替代 database/sql 操作数据库

江湖十年

数据库 后端 sql Go 语言

华为云CodeArts Build快速上手编译构建-进阶玩家体验

华为云PaaS服务小智

云计算 编译 开发 华为云

WMS 实物库存系统设计

红袖添香

系统设计 系统架构 供应链物流 WMS仓库管理 库存系统

2023-06-18:给定一个长度为N的一维数组scores, 代表0~N-1号员工的初始得分, scores[i] = a, 表示i号员工一开始得分是a, 给定一个长度为M的二维数组operatio

福大大架构师每日一题

golang 算法 rust 福大大架构师每日一题

当 Rokid 遇上函数计算

阿里巴巴云原生

阿里云 云原生 Rokid

IT知识百科:什么是OTN——光传送网?

wljslmz

6 月 优质更文活动

在人工智能冲击下,IT部门的生存价值在哪里?

FN0

AIGC

如何在 Linux 上列出磁盘?

wljslmz

6 月 优质更文活动

微服务中「组件」集成

Java 架构

前端如何处理「并发」问题?

不叫猫先生

并发 axios 6 月 优质更文活动

培育开源人才,助力开源生态发展|2023开放原子全球开源峰会校源行分论坛圆满落幕

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 校源行

Vue3中常用的Composition(组合)API-ref(引用)函数

不觉心动

6 月 优质更文活动

如何评估大型语言模型(LLM)?

Baihai IDP

人工智能 深度学习 大模型 白海科技 大模型评估

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