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:04900
用户头像

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

关注

评论

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

Things3 for Mac(日程和任务管理工具)v3.20中文免激活版

iMac小白

AI虚拟数字人在线生成系统源码展示!

青否数字人

数字人

智能护航:人工智能引领软件测试新革命

测试人

人工智能 软件测试

Apifox 2月版本更新:常用参数优化,自动化测试持续优化

Apifox

开发工具 Apifox 测试工具

等保测评与合规性检查定义以及区别简单了解

行云管家

等级保护 等保测评 合规性检查

GM CHM Reader Pro for mac(CHM阅读器)v2.5.3激活版

iMac小白

站在大模型加速带,重新审视办公提效

飞桨PaddlePaddle

百度 百度飞桨 AI应用 文心大模型 飞桨星河社区

第40期 | GPTSecurity周报

云起无垠

获奖!科技进步奖一等奖!成果贡献奖金奖!

天翼云开发者社区

云计算 云服务 云平台

小程序框架(概念、工作原理、发展及应用)

天津汇柏科技有限公司

小程序开发 定制软件开发 软件开发定制

Screen Recorder by Omi Mac(Omi录屏专家‬)v1.3.8激活版

iMac小白

朴素的DevOps价值观

华为云PaaS服务小智

软件开发 华为云

低代码平台运营效果评估模型:AICE

鲸品堂

低代码 企业号 2 月 PK 榜

怎样建立健康的绩效管理体系?聊聊专家看到的误区与疑问

思码逸研发效能

助力春节精准营销,火山引擎ByteHouse加速数据分析效率

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号 2 月 PK 榜

大数据时代来了

小齐写代码

如何确保团队协作中,项目Node版本的一致性?

秃头小帅oi

node.js 团队协作 低代码

产品更新 | 如何利用思码逸DevInsight 度量代码评审效率、质量与瓶颈?

思码逸研发效能

干货 | 如何通过度量研发效能,多角度洞察百人敏捷团队的价值交付?

思码逸研发效能

Tidy Up for Mac(重复文件查找清理工具)v6.0.4激活版

iMac小白

一文搞懂设计模式—享元模式

Java随想录

Java 设计模式

终于有篇文章把后管权限系统设计讲清楚了

越长大越悲伤

Java spring 权限 权限控制 后台管理

Spring Security权限控制框架使用指南

越长大越悲伤

Java Spring Boot spring security

多租户篇 | MatrixOne与MySQL全面对比

MatrixOrigin

数据库 分布式 云原生

教不会你算我输系列 | 手把手教你HarmonyOS应用开发

百度Geek说

HarmonyOS 鸿蒙开发 ArkTS

Databend 开源周报第 133 期

Databend

NFT支持的ICO开发:开创众筹的未来

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Stable Diffusion解析:探寻AI绘画背后的科技神秘

极限实验室

GAN model AI绘画 Diffusion Stable Diffusion

深入解析Python并发编程的多线程和异步编程

华为云开发者联盟

Python 多线程 开发 华为云 华为云开发者联盟

数字人直播SAAS系统源码部署的重要性,你知道吗?

青否数字人

数字人

软件测试学习笔记丨Docker容器镜像制作

测试人

软件测试 测试开发

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