【发布时间】:2010-11-19 02:39:56
【问题描述】:
Ruby 是唯一具有test suite 描述该语言的语言,还是该想法已传播到其他语言?
【问题讨论】:
-
“描述语言的测试套件”具体是什么意思?我见过的大多数开源语言都有测试套件来测试所有预期的用途和已知的极端情况。另外,“语言”包括什么?标准库/内置计算吗?
标签: ruby unit-testing rubyspec
Ruby 是唯一具有test suite 描述该语言的语言,还是该想法已传播到其他语言?
【问题讨论】:
标签: ruby unit-testing rubyspec
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,这是基于规范的更正式的安排。不过,这种情况在过去十年左右才出现——嗯,还在增长。
【讨论】:
Perl 和 Python 都有针对其各种实现的测试套件。
【讨论】:
需要注意的语言之间有一个重要区别:参考实现定义的语言和标准定义的语言。许多语言都有标准: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 实现。现在我正在写我的学士论文,这就是我在这个主题上进行大量研究的原因。
【讨论】: