【问题标题】:Do any languages have an equivalent of Ruby's RubySpec project?是否有任何语言与 Ruby 的 RubySpec 项目等效?
【发布时间】:2010-11-19 02:39:56
【问题描述】:

Ruby 是唯一具有test suite 描述该语言的语言,还是该想法已传播到其他语言?

【问题讨论】:

  • “描述语言的测试套件”具体是什么意思?我见过的大多数开源语言都有测试套件来测试所有预期的用途和已知的极端情况。另外,“语言”包括什么?标准库/内置计算吗?

标签: ruby unit-testing rubyspec


【解决方案1】:

Ruby 是唯一具有描述该语言的测试套件的语言,还是该想法已传播到其他语言?

你可能有相反的方向,你知道的。 Perl 有几个不同的这样的测试套件,它们都非常广泛,简直令人难以置信。

首先,Perl₅ 确实执行了 — 嗯,现在让我们看看 [...时间过去了...] 416172 (~4e5) 单独的测试,当您键入 make test 时。这些测试包括针对语言本身和 Perl 附带的标准库的测试。

% make test
[…]
All tests successful.
u=4.39  s=2.85  cu=422.24  cs=59.61  scripts=1853  tests=416172
433.328u 65.845s 12:19.59 67.4% 0+0k 1587+2563io 4pf+0w

当然,这比 Ruby 存在的时间要长得多。

但我认为您所说的可能更像Perl₆’s test suite,这是基于规范的更正式的安排。不过,这种情况在过去十年左右才出现——嗯,还在增长。

【讨论】:

  • 烤肉就是一个很好的例子。不确定 Perl5 测试套件。根据 Tim Bunce 的 Perly Myths 演讲,Perl5 测试套件等同于 YARV 测试套件,而不是 RubySpecs 测试套件。
【解决方案2】:

Perl 和 Python 都有针对其各种实现的测试套件。

【讨论】:

  • 所有 Ruby 实现都有针对其各种实现的测试套件,但这并不能回答问题。问题是关于语言规范的合规性测试套件,而不是编译器的回归测试套件。
【解决方案3】:

需要注意的语言之间有一个重要区别:参考实现定义的语言和标准定义的语言。许多语言都有标准:C、C++、Java、Haskell、Smalltalk,仅举几例。
有标准的语言不太可能有像 RubySpec 这样的项目,因为它们的语言已经被标准充分定义了。

有些语言主要由参考实现定义。我知道这些语言:Ruby、Python、Perl、PHP

据我所知,与 RubySpec 最相似的项目是为 Perl 烤。

Python 也有很多实现,但他们没有项目来分享他们的语言测试,我敢肯定,所有项目都有。我想这可能是因为Python有详细的语言参考,几乎等于一个标准。

在 Java 中至少有一种 PHP 实现。 PHP 可能有一些语言规范,但也没有像 RubySpec 这样的项目。

RubySpec 的特殊情况是,Ruby 没有标准。它仅由参考实现 MRI 定义。因此 RubySpec 旨在通过测试创建规范。不幸的是,大多数 MRI 的核心开发人员都没有参与 RubySpec。 RubySpec 有一些批评,因此 RubySpec 不被 MRI 接受。我真的推荐Ruby Design ProcessBrian Shirai 的采访

编辑:

关于 Ruby 的标准:
Ruby 于 2011 年通过 JIS 指定,2012 年由 ISO/IEC 指定。至少在this Wikipedia 页面上是这样说的。不过,我无法阅读此标准,因为您需要buy it 才能阅读。 This 也提供了一些关于标准的信息。
所以实际上我并没有正确地表达自己。现在有一些标准,但仍然没有,Ruby 的各种重新实现所使用的标准。我不能确切地说为什么,因为我看不懂标准,但我认为这是因为标准描述的语言太少了。 Ruby 的所有 gem 使用的东西太少了。
长期以来,Ruby 的标准一直缺失,以至于 MRI 的许多行为都变成了预期的行为,实际上也是用户(即 ruby​​ 程序员)期望该语言做的事情的一部分。很难说什么属于语言,什么是实现细节。我还推荐this Brian Shirai(原 Ford)在 RubyConf 2012 上的演讲。 此外,MRI 具有许多功能,并且仍在继续发展。 Ruby 2.0.0 已经发布,其中包含许多新功能。我认为这些功能还不是标准的一部分。
所以我认为 ISO/IEC 的标准不是 Ruby 编程语言的合适标准。

去年我一直在研究 MagLev,这是一种替代的 ruby​​ 实现。现在我正在写我的学士论文,这就是我在这个主题上进行大量研究的原因。

【讨论】:

  • 能否请您提供 Ruby 缺乏标准的引用?
  • 我已经添加了一些进一步的解释。我希望这有助于理解我的意思。
  • 您已经在 MagLev 上工作了一年,但您的大学负担不起 238 瑞士法郎的标准费用?
  • 事实是:我的大学可能可以使用该标准,但我不知道从哪里可以得到它。我想你可能错过了我的观点。标准中的任何内容显然都不够。标准从 2012 年 4 月开始,谈话从 2012 年 11 月开始,采访从 2013 年 2 月开始。尽管现在可能有一个标准,但这并不是 ruby​​ 语言的特点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 2013-10-25
  • 2010-09-12
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
相关资源
最近更新 更多