在基于抽象代数类型和等式理论的形式规范中,您使用等式理论公式来指定理论。满足这些约束的系统在形式逻辑中称为模型。
建模是创建模型的过程,该模型是某些方面的摘要,这些是特定案例的不必要细节。因此,具体系统必须遵守观察方面创建的模型。
编程是一个创建程序的过程,该程序将具有特定的行为 - 将执行特定的算法 - 并且通过不同的范例编程语言使我们能够以某种特定的方式进行思考,这些抽象的一些细节通常是机器特定的。 / p>
那么我们可以同时做所有这些事情,因为它们主要是相同的吗?声明式编程是最接近的尝试吗?我们可以使用某种编程语言,这对编程以及建模和规范都有好处吗?
答案 0 :(得分:5)
为推进这一观点做出最大努力的科学家是Tony Hoare。 Tony和他的同事Edsger Dijkstra一起倡导非确定性编程语言,这样从规范到实现的路径就会更加顺畅。 Tony肯定想要规范和实现的单语言。有关此视图的更多信息,请阅读编程方法上的书。托尼还做了关于证明抽象正确性的开创性工作。所有这些工作都是在简单,命令式语言的背景下完成的,具有结构化控制流程和经典的副作用程序。因此,与必要性的声明性编程没有任何联系。从历史上看,函数式编程(声明式编程的主要分支)的工作更多地来自Backus的图灵讲座,题目是“从冯·诺伊曼瓶颈中解放编程”;函数式编程一直与编程效率一样多。
我们从Hoare发现的是正式规格和正式模型<非常昂贵。除非在非常特殊的情况下,费用没有被证明是合理的,例如“如果软件不起作用,患者将死亡”或“如果软件不起作用,飞机将崩溃”。非正式的模型和规格非常有用,生产和使用起来便宜得多。关于建模,模型检查等方面的研究还有很多有趣的研究。我最喜欢的一件事是由Daniel Jackson在麻省理工学院完成的合金语言。微软研究院也有很棒的东西,其他地方也有很多好东西。在声明性编程方面也有一些工作,但它也是“便宜和开朗”的多样性,而不是像Hoare那样全面的程序化方法。我最喜欢的一个是Claessen和Hughes的QuickCheck,它提供了一种方式来陈述正式的属性并通过随机测试来探索它们。没有证据或定理,但仍然非常有用。
总之,您描述了在单个框架内执行正式模型,规范和程序的议程。仍然有很多好的工作在零碎地进行,但统一议程已被放弃。