任何语言都有相当于Ruby的RubySpec项目吗?

时间:2010-11-19 02:39:56

标签: ruby unit-testing rubyspec

Ruby是唯一一种用test suite描述语言的语言,还是将这个想法传播到其他语言?

3 个答案:

答案 0 :(得分:2)

  

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

可能会方向逆转,你知道。 Perl有几个不同的测试套件,这两个测试套件都非常广泛,而且非常不可信。

首先,Perl 5确实执行 - 嗯,让我们看一下[...时间过去...] 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,这是一个基于规范的更正式的安排。然而,在过去十年左右的时间里,这种情况只会出现 - 并且正在增长。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

要注意的语言之间有一个重要的区别:参考实现定义的语言和标准定义的语言。许多语言都有标准: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有一些批评,因此MRI不接受RubySpec。我真的推荐在Ruby Design Process

上采访Brian Shirai

修改

关于Ruby的标准:
Ruby在2011年通过JIS指定,2012年通过ISO / IEC指定。至少这是它在this维基百科页面上所说的内容。我无法阅读此标准,因为您需要buy it这样做。 This也提供了有关标准的一些信息 所以事实上我没有正确表达自己。现在有一些标准,但仍然没有,Ruby的各种重新实现正在使用什么。我不能确切地说为什么,因为我无法阅读标准,但我认为这是因为标准对语言的描述太少。 Ruby的所有宝石使用的东西太少了 很长一段时间以来,Ruby的标准已经缺失,MRI的许多行为成为预期的行为,实际上是用户(意味着ruby程序员)期望语言行为的一部分。很难说什么属于语言,什么是实现细节。我还推荐他在RubyConf 2012上给出的Brian Shirai(前身为福特)给出的this讲话。 此外,MRI具有许多功能,并且仍在继续开发。 Ruby 2.0.0已经发布,它有许多新功能。我认为这些功能尚未成为标准的一部分 所以我认为ISO / IEC的标准不适合Ruby编程语言。

我一直致力于MagLev,去年是另一种ruby实现方式。现在我正在写我的学士论文,这就是为什么我在这个主题上进行了很多调查。