我是识字编程概念的新手。我正在阅读Donald Knuth关于这个主题的论文 (PDF),在一开始,在引言中,他说:
与其想象我们的主要任务是指导计算机做什么,不如专注于向人类解释我们希望计算机做什么。
他或她 [识字编程的实践者] 力求一个易于理解的程序,因为它的概念是按照最适合人类理解的顺序引入的,使用了相互加强的正式和非正式方法的混合。
然后,进一步阅读:
一个程序的一个特点是它的结构关系。一个复杂的软件由简单的部分和这些部分之间的简单关系组成;程序员的任务是陈述这些部分和那些关系, 以最利于人类理解的顺序——而不是像自上而下或自下而上那样严格确定的顺序。
(...)
自上而下的编程让你清楚地知道你要去哪里,但它迫使你在脑海中保留很多计划;悬念不断增加,因为直到最后都没有真正确定下来。编程的优势在于,随着越来越多的子程序被构建,你会不断地使用越来越强大的铅笔;但它迫使您将整个程序组织推迟到最后一分钟,因此您可能会漫无目的地挣扎。
因此,WEB 语言允许人们以“意识流”的顺序来表达程序。TANGLE 能够将所有内容打乱成 PASCAL 编译器要求的安排†</sup>。WEB 的这一特性也许是它最大的资产。
上面的摘录让我对这个主题很感兴趣,所以我调查了一下。从任何搜索引擎提供的结果中不难看出 Haskell 和 literate 编程之间的关系,但我没有看到“人类理解的最佳顺序”。相反,我看到了一个非常完善的文档,同时保持了计算机工作所需的顺序。
- 你能用“文学编程”这个词来解决这个顺序问题吗?
- 有没有其他不需要“意识流”顺序特征的文学编程定义?
- Haskell 真的有识字编程能力(使用 Knuth 的定义)吗?
最后,作为个人观点,我不得不说,即使 Haskell 所做的(可能还有许多其他语言所做的)也不是 Knuth 的文学编程,当涉及到对方法和算法的详尽描述时,我仍然喜欢这个想法。当评论远远超过代码时,它会起到很好的作用。
†</sup> WEB 和 TANGLE 是最初 D. Knuth 在他第一次实现识字编程概念时使用的系统的一部分。