Ruby 是唯一具有描述该语言的测试套件的语言,还是该想法已传播到其他语言?
3 回答
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₆ 的测试套件,这是基于规范的更正式的安排。不过,这只是在过去十年左右的时间里才出现——嗯,还在增长。
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 设计过程的 Brian Shirai 访谈
编辑:
关于 Ruby 的标准:
Ruby 于 2011 年通过 JIS 指定,2012 年由 ISO/IEC 指定。至少在这个Wikipedia 页面上是这样说的。不过,我无法阅读此标准,因为您需要购买它才能这样做。这也提供了一些关于标准的信息。
所以实际上我并没有正确地表达自己。现在有一些标准,但仍然没有,Ruby 的各种重新实现所使用的标准。我不能确切地说为什么,因为我看不懂标准,但我认为这是因为标准描述的语言太少了。Ruby 的所有 gem 使用的东西太少了。
长期以来,Ruby 的标准一直缺失,以至于 MRI 的很多行为都变成了预期的行为,实际上也是用户(即 ruby 程序员)期望该语言做的事情的一部分。很难说什么属于语言,什么是实现细节。我还推荐Brian Shirai(前 Ford)在 RubyConf 2012 上发表的演讲。此外,MRI 具有许多功能,并且仍在继续开发中。Ruby 2.0.0 已经发布,其中包含许多新功能。我认为这些功能还不是标准的一部分。
所以我认为 ISO/IEC 的标准不是 Ruby 编程语言的合适标准。
去年我一直在研究 MagLev,这是一种替代的 ruby 实现。现在我正在写我的学士论文,这就是为什么我在这个主题上进行了很多调查。