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

Google SoC 系列:为 Ruby 运行时创建 RSpec 规格

  • 2007-05-22
  • 本文字数:1631 字

    阅读完需:约 5 分钟

存在一个详细的规格规范所有 Ruby 运行时实现是很有必要的。当前,为了使 Ruby 运行时与松本行弘(Yukihiro Matsumoto,Matz)所提供的官方 Ruby 相兼容,实现者不得不核对 C 代码来了解它是怎么做的,或者如果做不到那样的话,直接问 Matz 或 Ruby 社区某某东西是如何工作的。随着越来越多的 Ruby 版本问世(JRuby、Rubinius、MS IronRuby 等等),对于一个正式规格的呼声也已经不绝于耳。如果该规格是可执行的代码而非文字说明,那更就好了。有两个 Google Soc 项目打算解决这一问题,为 Ruby 创建 RSpec 规格。 RSpec 被描述为:

RSpec 是一个框架,它为程序员提供了一个领域特定语言,使用易读的、可执行的例程,描述 Ruby 代码的行为。这些例程可以指导你的设计过程,并可以作为良好的文档和测试用例。

这有点像测试驱动开发(Test Driven Development,TDD),单元测试应在代码之前编写。实际上,RSpec 专注于描述代码的行为,并试图使这些描述尽可能地易读。Pedro Del Galle正从事“使用RSpec 覆盖Ruby 内核(Cover the core of Ruby with RSpec)”的项目,而 Florian Gross正着手于“用于 Ruby 实现的 RSpec 套件(RSpec suite for Ruby implementations)”项目。当被问到为什么会存在两个关注点类似的项目存在时,Pedro 这样解释:

我和 Florian 在互不知情的情况下提出了这两个议题。两个 GSoC 项目十分相似说明了一种现象。在 Ruby 界创建一个中心测试仓库(Repository)是个热点话题。其中笹田耕一(Sasada Koichi)或 Evan Phoenix 在其他采访中谈到了这一点。我想我们的项目正是创建这样一个中心测试仓库的好机会。我们准备同 Charles Nutter 合作,他正在主持两个有趣的项目,RubySpec 和 RubyTest。Florian 将主要精力集中在语言规格上,而我主要集中在类库规格上,但不能认为这是个非常严格的任务划分。我们将尽量使这些规格尽可能的完善和详细。

注:笹田耕一在支持一个叫做 YARV 的项目,这是一个新的 Ruby VM,最近被并入到 Ruby 1.9 分支上。 Evan Phoenix 是 Rubinius 项目背后的推动者,这是一个主要用 Ruby 编写的 Ruby 实现。

当被问到为什么选择 RSpec,Pedro 解释到:

这是个有趣的问题,RSpec 有一个很大的缺点,它没有小到让实现者可以在其 VM 上运行该框架。我们不想重新发明轮子,Rubinius 拥有一个基于 RSpec 的漂亮而成熟的测试套件,并有机制可以依赖其他的 Ruby 实现运该测试。我所理解的测试不仅是一个避免错误的开发者工具,也是一个“活生生的文档(Living Document)”的良好来源。

为 Ruby 这样的系统创建一个规格说明,其工作量是很大的。Pedro 详细说明了他和 Florian 计划将怎么解决这个问题,以及哪里是挑战所在:

我们将设法专注于核心基础架构、以及 Ruby 1.8.6 里的核心语言规格和核心类库规格。这样看我们做得如何了。优先去建立一个高质量规格说明,尽量避免边界情况的漏洞。我想,这是一个长期的项目,我们不可能在 SoC 计划的时间内满足所有这些要点。现在我们正在划分什么是重要的问题以及什么是我们优先要解决的问题。设法避免规格里的漏洞在软件系统里总是一个难题,当该系统是一种语言时困难更大,其可能性范围及边界情况也是非常多的。因此我认为面临的挑战是做出好的分析,覆盖面尽可能的完善和详细。我的指导者(John Hornbeck)将是一个很重要的角色。

为 Ruby 创建规格是一个庞大的任务,伸出援助之手总是有帮助的。Pedro 指出感兴趣的人可以以该项目的Wiki 作为起点,对 RubySpec RubyTest 项目也是如此。 Pedro 的 Blog 也是一个好的信息来源。

查看英文原文: Google SoC Series: Creating RSpec specs for Ruby runtimes


译者简介:宋玮,多年软件开发经验,从 2002 年开始就使用 Java,在各个项目开发过程中先后使用过 Struts、Oracle ADF、AspectJ 等。最近正在使用 Spring 及 Ruby on Rails,对敏捷方法有比较大的兴趣并做过一些尝试。他的 blog 为 http://www.donews.net/victorsong 。为 InfoQ 中文站贡献内容,请邮件至 china-editorial[at]infoq.com

2007-05-22 23:00783
用户头像

发布了 150 篇内容, 共 43.4 次阅读, 收获喜欢 9 次。

关注

评论

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

生成式语言大模型的工程实践

百度开发者中心

自然语言处理 大模型 生成式AI

LLM大模型AI能力助力企业数字化智能化转型

百度开发者中心

大模型 #人工智能

预训练大模型的演变与突破

百度开发者中心

大模型 #人工智能 ChatGPT

KaiwuDB 亮相中国 5G+工业互联网大会,助力新型工业化

KaiwuDB

KaiwuDB 5G工业互联网大会

文心一言 VS 讯飞星火 VS chatgpt (144)-- 算法导论12.1 4题

福大大架构师每日一题

福大大架构师每日一题

3D模型材质编辑器

3D建模设计

纹理处理 材质 贴图 模型材质 三维模型材质

如何优化Nginx服务进程详细。

百度搜索:蓝易云

nginx 云计算 Linux 运维 云服务器

马斯克发布一封指控 Sam Altman 的匿名信引发猜测,OpenAI “宫斗大戏”终迎结局?

博文视点Broadview

📝 App备案与iOS云管理式证书  ,公钥及证书SHA-1指纹的获取方法

Windows10 下 CUDA 新旧多版本共存

北桥苏

Python tensorflow nlp cuda

NFTScan | 11.20~11.26 NFT 市场热点汇总

NFT Research

NFT\ NFTScan nft工具

营销数智化解析第7期:用友BIP | CRM 渠道工作台、伙伴管理

用友BIP

营销数智化

什么是小程序插件?

Geek_2305a8

Wireshark的数据包

小齐写代码

Sketchpad几何画板 for Mac v5.06完美激活版

mac

苹果mac Windows软件 Sketchpad 几何画板 几何教学工具

Docker和Kubernetes:区别与优势对比

EquatorCoco

Docker 容器化 Kubernetes, 云原生, eBPF

Linux如何使用Nano编辑器教程。

百度搜索:蓝易云

云计算 Linux 运维 云服务器 Nano

分布式基础概念 - ZAB协议&负载均衡策略

派大星

分布式 ZAB Java 面试题

这19个JS代码技巧,后悔没有早点看到

伤感汤姆布利柏

编程 程序员 低代码 js 代码技巧

活动回顾|阿里云云原生 Serverless 技术实践营 深圳站回放&PPT下载

Serverless Devs

Serverless AIGC

生产效率的革新:腾讯混元大模型实测!

老张

人工智能 大模型

特斯拉开源 Roadster 文件随便用;微软 Copilot AI 技术开放或不对大陆开放丨 RTE 开发者日报 Vol.92

声网

Vector Magic for mac(矢量图片转换工具) 1.2.0激活破解版

mac

苹果mac Windows软件 Vector Magic 图片转换矢量图软件

3招解决时序数据高基数难题,性能多维度提升!

华为云开发者联盟

数据库 后端 时序数据库 华为云 华为云开发者联盟

2023 中国 Serverless 用户调查,邀您填写!

Serverless Devs

云计算 Serverless AIGC

Git客户端工具 SourceTree中文最新安装包

mac大玩家j

git Mac软件 Git客户端

国内怎样申请openai 内涵120美刀的api key?内涵120美刀,月底要付120美元吗?

月满楼

ChatGPT chatgpt api

Mac电脑好用的音频修复和增强工具: iZotope RX 10最新版激活包

胖墩儿不胖y

Mac软件 音频处理工具 音频修复工具

一个基于.NET Core开源、跨平台的仓储管理系统

EquatorCoco

开源 仓储控制系统 .net core

3D数字孪生场景编辑器

3D建模设计

数字孪生 低代码平台 3d建模 3D场景编辑器 3D场景应用

IPQ8072 router and QCN9074 card combine to provide ultra-fast-stable-broad WiFi 6E network

wifi6-yiyi

QCN9074 IPQ8072

Google SoC系列:为Ruby运行时创建RSpec规格_Ruby_Werner Schuster_InfoQ精选文章