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

Ruby1.9——何时能够投入应用?

  • 2008-01-15
  • 本文字数:1714 字

    阅读完需:约 6 分钟

Ruby1.9旨在对 Ruby 语言本身及核心类库进行修改完善,在经过了一年多的试验以后,终于在 2007 年的圣诞发布了——版本为 1.9.0。

一些 Ruby 程序员将 Ruby1.9 的发布看做是迈入 Ruby 新版本的标志性事件,但他们却发现在 1.8 版本和 1.9 版本语言之间的刻意不兼容性会导致原有 Ruby 代码无法工作。这个发现迅速成为了 ruby-talk 邮件组上讨论的话题。

其实真正的问题是,Ruby 1.9.0 发布的原因以及其与 Ruby1.8 之间的关系并不完全被 Ruby 社区元老们所了解。Matz 在新版本发布前的几个月里在 ruby-core 邮件组里有过明确的说明,在一篇圣诞前一天的帖子中,他写道:

  • 发布的版本是 1.9.0,而不是我们预先声明的 1.9.1。这表明它并不像我们期望的那样稳定,但是所有的不兼容性修改都已经完成了。
  • 1.9 版本与之前的版本是不兼容的。你的应用可能不会正常工作。移植的方法(或者移植工具)在第一版中不会提供。

而不幸的是,这些并没有出现在他在 ruby-talk 上的官方的发行声明中。Dave Thomas 在 1.9.0 发布后不久马上就在博客文章中给出如何看待及使用 Ruby1.9 的意见。他的建议是在安装 Ruby1.8 的同时安装 Ruby1.9,并开始对已有代码的兼容性进行检查,以便使其与 Ruby1.9 兼容。

在最近,当 Matz 被问及何时 Ruby1.9 能够达到开发状态的时候,他说:

我们不知道。我们真的希望这一天早日到来。但是这涉及到非常多的因素。唯一的好消息就是,1.9 的标准已经在上个圣诞节基本上确定了。

除最终确定标准以外,将 Ruby1.9 用于实际生产还依赖于一个 1.9 的兼容版本,这也是 Ruby 应用的应用基础。Rails 核心团队正在致力于改进 Ruby1.9 的兼容性,众多 gems 和插件的开发者们也同样在努力。1.9 兼容性的实现才是 1.9.0 发布的真正标志。 这些开发者们中的一些人也通过文档的形式说明了 Ruby1.9 对其代码的影响。其中的两个干得不错:一个是 Sam Ruby 关于对 REXML的修改使之兼容的描述;另一个则是 James Edward Gray II 的类似文章,里面介绍了对FasterCVS类似的努力——从而实现了 Ruby1.9 标准库中对旧版 CSV 的替换。后者还给出了一系列有价值的经验和建议,比如:

  • Ruby1.9 消除了通过“:”在 if、unless 和 case 语句中来代替关键词 then 的使用方法。
  • 一些反射方法,例如 instance_variables 和 constants,不再返回字符串数组,而是返回符号数组
  • 索引一个字符串的时候,比如"abc"[0],会返回一个单字符的字符串,而不是返回一个整数。
  • Enumerable#zip有两方面修改。调用时没有块参数的时候,返回变成了一个迭代器而不再是数组;而在 Ruby1.8 中 [1, 2, 3].zip(%w{a b}) 产生的是 [[1,‘a’], [2, ‘b’], [3, nil]],但在 Ruby1.9 中,因为前面提到的改变,[1, 2, 3].zip(%w{a b}).to_a 的结果变为 [[1,‘a’], [2, ‘b’]],即多余的元素会被接收者略过。这在 ruby-core 邮件组中有一系列讨论,看上去这些修改中的一个或者全部可能在 1.9 最终标准发布以前会修改成以前的样子。

Ruby1.9 还为用户展示了许多颇为深奥的 Ruby 特性供选择。一些特性如延续机制等目前已经移出了核心并成为标准库的一部分。 另外,Ruby1.9 提供了对编写代理类更好的支持。在 Ruby 1.9 以前,一些第三方 ruby 库使用 Jim Weirich 的 BlankSlate类或者其衍生版本来实现一个最小类,最小类比 Object 的方法少得多,以至大部分的方法都会触发 method_missing 的回调。BlankSlate 程序化地移除了许多继承的方法。Ruby1.9 有一个新类叫做BasicObject,它实现了一个方法的最小集合(!、``!===equal?singleton_method_addedsingleton_method_removed 和singleton_method_undefined),简化了代理类的编写。另一方面,在 ruby-core 还有一些是否需要更多的方法,如instance_eval 的讨论。

总而言之,Ruby1.9 的工作依然在进行当中,它依然还是一个开发版本而不是一个生产版本。1.9.0 版的发布给了社区一定的冲击,来促使大家更加认真的来看待“新的”Ruby,但是Ruby1.9 的成熟和社区能够准备好通过Ruby1.9 进行更多的生产开发尚需时日。 Dave Thomas 就此说道

Matz 将 1.9 版本发布为一个开发版本,其中一个好处在于:我们有足够的时间去应对应用的迁移。

查看英文原文: Ruby 1.9 - When Will It be Production Ready

2008-01-15 08:04898
用户头像

发布了 80 篇内容, 共 19.2 次阅读, 收获喜欢 5 次。

关注

评论

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

智能且高效,华为云CDN三大特点助企业云上创新

爱科技的水月

界面原型设计

智趣匠

android GUI设计 mockplus droiddraw

华为云大数据BI,如何助力智慧医院数字化升级

秃头也爱科技

Mysql索引覆盖

京东科技开发者

MySQL 数据库 sql 搜索引擎 优化

华为云大数据BI平台,助力电商企业破除数据孤岛,轻松备战双十一

秃头也爱科技

“一粒米”的故事:哈工程昇智识米团队基于昇腾AI创新提出水稻适度加工智能化解决方案

Geek_2d6073

跳槽一次能涨多少?总算是见识到跳槽天花板了

程序知音

Java java面试 后端开发 八股文 Java面试题

人生的喜悦、不快与成长,都在那一篇篇的文字中得到记录 | 2022 年终总结

宇宙之一粟

年终总结 人生故事 代码之外 12月月更

浅谈华为云大数据BI对企业数字化转型的助力

秃头也爱科技

着眼全局提升决策质量,华为云大数据BI让企业看见未来

爱尚科技

重磅!XTransfer荣登InfoQ【十大开发者最向往的高价值技术团队】榜单

XTransfer技术

【架构设计】保持简单轻量设计的三个原则——DRY,KISS, YAGNI

JAVA旭阳

Java 架构

【web 开发基础】PHP查询数组中的指定元素 (50)

迷彩

数组 数组操作 二维数组 PHP基础 数组查询

CleanMyMac2024激活码使用教程

茶色酒

CleanMyMac CleanMyMac X

【web 开发基础】PHP中获取数组的元素个数 (51)

迷彩

数组 数组操作 PHP基础 数组查询 统计数组

华为云大数据BI,助力电商企业打赢“年货节”攻坚战

秃头也爱科技

【web 开发基础】如何删除数组中的重复元素(52)

迷彩

数组 数组操作 PHP基础 唯一性

为有状态应用而生,云原生本地存储Carina正式进入CNCF沙箱

BoCloud博云

云原生 本地存储 Carina

如何正确使用网格设置制作卡片类型展示页面

Towify

共创精彩游戏未来,华为云大数据解决方案助力游戏企业成功转型!

秃头也爱科技

HarmonyOS多媒体框架介绍

HarmonyOS开发者

HarmonyOS

华为云大数据BI,企业数字化运营得力助手

爱尚科技

cleanmymac2024永久版mac系统清理软件

茶色酒

CleanMyMac CleanMyMac X

FL Studio2024中文版本水果软件下载

茶色酒

FL Studio FL Studio 21

直播回顾 | 根因分析助力AIOps走得更远!

博睿数据

可观测性 智能运维 博睿数据

如何在等待页面制作加载动画

Towify

时序数据库 TDengine 签约新奥新智

TDengine

数据库 tdengine 时序数据库

openEuler委员会主席江大勇:跨越生态拐点 欧拉逐梦新征程

科技热闻

据+AI赋能教育智能化转型,华为云技术优势明显!

爱尚科技

聚焦电商场景数字化转型升级,华为云大数据解决方案高效赋能

爱尚科技

有了华为云大数据BI,企业数字化转型该如何做?

爱尚科技

Ruby1.9——何时能够投入应用?_Ruby_Rick DeNatale_InfoQ精选文章