9
为什么在大多数现代编程语言中对合同设计的支持如此有限?
我最近发现了按合同设计(DbC),发现这是一种非常有趣的编写代码的方式。除其他外,它似乎提供: 更好的文档。由于合同是文件,因此不可能过时。此外,由于合同明确规定了例程的功能,因此有助于支持重用。 更简单的调试。由于程序在合同失效时立即停止执行,因此错误不会传播,并且可能会突出显示违反的特定断言。这在开发和维护期间提供了支持。 更好的静态分析。DbC基本上只是Hoare逻辑的一种实现,应该应用相同的原理。 相比之下,成本似乎很小: 额外的手指打字。由于必须明确说明合同。 进行一些培训以使自己习惯于写合同。 现在,首先熟悉Python,我意识到实际上可以编写前提条件(只针对不适当的输入抛出异常),甚至可以使用断言再次测试某些条件。但是,如果没有一些最终被认为不是Python风格的额外魔术,就不可能模拟“旧”或“结果”之类的某些功能。(此外,有一些库提供支持,但最终我感觉使用它们是错误的,因为大多数开发人员没有这样做。)我假设所有其他语言都存在类似的问题(当然,除外) ,埃菲尔)。 我的直觉告诉我,缺乏支持一定是由于某种拒绝做法的结果,但是在线搜索并没有取得丰硕的成果。我想知道是否有人可以弄清楚为什么大多数现代语言似乎提供的支持很少?DbC有缺陷还是过于昂贵?还是由于极限编程和其他方法而过时?