有一种编程“风格”(或者可能是范式,我不知道该怎么称呼它)如下:
首先,您编写规范:对您的(整个或部分)程序要做什么的正式描述。这是在编程系统内完成的;它不是一个单独的工件。
然后,您编写程序,但是——这是这种编程风格与其他风格之间的关键区别——这个写作任务的每一步都以某种方式受到你在上一步中编写的规范的指导。这种指导的具体发生方式千差万别;在 Coq 中,你有一种元编程语言 (Ltac),它可以让你在幕后构建实际程序的同时“改进”规范,而在 Agda 中,你通过填充“漏洞”来编写程序(我实际上不确定它是如何进入的Agda,因为我主要习惯于 Coq)。
这并不是每个人都喜欢的编程风格,但我想尝试用通用的、流行的编程语言来练习它。至少在 Coq 中,我发现它相当容易上瘾!
...但是我什至如何在证明助理之外寻找方法呢?这就引出了一个问题:我正在为这种编程风格寻找一个名称,以便我可以尝试查找可以让我在其他编程语言中进行类似编程的工具。
请注意,当然更合适的问题是直接询问此类工具的示例,但要求答案列表的 AFAIK 问题不适合 Stack Exchange 站点。
需要明确的是,我并不是那么希望我真的会找到很多;这些主要是学术消遣,而您的典型编程语言并不真正适合这种编程风格(例如,规范语言最终可能会变得难以置信地复杂)。但值得一试!