×

健全完整的合同模式。 (英语) Zbl 1122.68019号

摘要:即使在静态类型语言中,动态检查某些不变量也很有用。Findler和Felleisen给出了一种动态检查表示性高阶类型的算法,称为契约。然而,他们没有给出合同的语义。由于缺乏语义,因此无法定义和证明检查算法的可靠性和完整性。(给定一个语义,声音检查器从不报告该语义下不存在的违规行为;原则上,完整的检查器能够在违规行为存在时找到违规行为。)理想情况下,语义应该捕捉程序员直觉上感觉到的是合同的含义,或者明确指出直觉与现实不符的地方。在本文中,我们对合同进行了解释,并证明了Findler-Flelisen算法的正确性和(在合理假设下)完整性。虽然我们的语义大多与直觉相匹配,但它也暴露了谓词契约的一个问题,即可以说比我们更直观的解释会使检查算法不健全。在我们的语义中,我们必须使用安全的概念(我们在本文中定义)来避免不安全。我们可以通过改变语言,用限制形式替换无限制谓词契约的原始版本,从而消除语义中的安全“泄漏”。通过将安全明确表示为契约,可以恢复相应的表达能力损失。这可以通过特别的方式完成,也可以通过包含一般递归契约来完成。递归契约的添加具有深远的影响,深刻影响了我们模型的制定,并且需要不同的技术来证明其合理性。

MSC公司:

68甲15 编程语言理论
68甲18 函数编程和lambda演算

软件:

DrScheme博士
PDF格式BibTeX公司 XML格式引用
全文: 内政部