1
22
这是一个规范。 这不是一个非常有用的规范,因为它不能为用户提供实现该规范的许多保证。如果我想编写一个添加两个整数的程序,我不能仅仅通过阅读规范来实现。 它 做 给出 实施者 但有很多自由。通常,您希望您的规范 准确的 对于 使用者 但是 模糊的 对于 实施者 通过这种方式,用户可以获得编写程序所需的保证,但这也给了实现者根据其特定的利基定制其实现的自由。 例如,Java语言规范没有提到垃圾收集。它只定义对象何时可访问和不可访问,并定义您可以创建新对象。内存分配如何工作,垃圾收集器如何工作,它是引用计数、跟踪还是基于区域的收集器等等,所有这些都被忽略了,因此不同利基的不同实现可以使用不同的垃圾收集器实现,而同一利基的实现可以相互竞争。
这也是一个规范。它甚至不如上面的那个有用。它 做 定义方法的名称,但它没有定义它的功能。
是该规范的完全有效的实现
同样,用户没有保证,实现者有太多的余地(或者更准确地说:在错误的领域有余地)。
我不一定称之为规范。这是代码,因此也是实现。
注意:当然,在Java中,
同样,这是一个实现。
规范不包含任何内容。这是一张纸。 通常,规范是用英语编写的。事实上,它们是用一种专门的规范编写语言编写的,这种语言通常是英语的一种高度风格化的形式子集,具有特定的语义。例如 BCP14/RFC2119: Key words for use in RFCs to Indicate Requirement Levels 定义了与IETF标准文件相关的一些常用英语单词的确切含义。(有趣的是,它也是一个规范,因此成为编写规范的规范。) 形式逻辑有时也被使用,特别是在编程语言规范中,用来描述类型规则。有时,甚至使用专门的形式规范语言,如 Z Notation .
一个简单但不太令人满意的答案是,如果一个规范被关心规范的人称为规范,那么它就是规范。(或更一般地说: 思考 作为规范。) 不同的社区对规范有不同的看法。他们有不同的名字。 例如 scheme 编程语言只是发表在一份科学报告中。经过几轮改进和新的报告后,他们发表了“算法语言方案修订报告”。之后是“算法语言方案修订报告”。由此开始了一种玩笑,目前的语言版本在“算法语言方案的修订、修订、修订和修订报告”中定义,通常写为“修订 7. 关于算法语言方案的报告“或只是” R 7 RS ". 这些报告都不被称为“规范”,但每一份都是规范。在Scheme之前,ALGOL也使用了“报告”一词,其他几种语言也是如此。 互联网RFC也是一个很好的例子。从技术上讲,RFC就是“征求意见”。这些RFC中只有极少数真正提升为“标准”状态。其中一些也是“当前最佳实践”。其中没有一个被称为“规范”,但很多都是这样对待的。例如,HTTP不是一个标准,但它被视为一个标准和一个规范,我们新世界经济的很大一部分都建立在这一基础上。 如果你想了解一下规范,最好是读一些:
|
2
16
我认为这里的关键思想是“规范不包括实现” 当Sun担任Java管家时,他们会为Java EE和JPA等特性编写规范,让其他供应商可以自由实现。Sun通常会有自己的实现与之竞争,但他们的目标是销售硬件。鼓励其他供应商提供竞争性的实现只会进一步促进这一目标。 Sun的规范既没有代码也没有JAR;它们是对代码如何工作的散文式描述。 |
3
5
|
4
4
如果一个人做了 Google search ,一个人会得到:
因此,它意味着你 描述 事情应该如何运作,而不是为了让它运作而必须做什么(这是 实施 ) 例如,有正式语言可以指定 之前 -和 后置条件 方法。然后可以使用工具(半)自动验证这些条件的子集。 其他形式语言使您能够实现自动化 约束程序设计 (例如,我的规范解决了 multi-sudoku puzzle ). 另一个例子是CSS:you 具体说明 关于如何使按钮变为绿色的说明不是CSS的一部分。 |