我发现一些工具如 Noweb 不支持宏。我想知道识字编程中宏的优缺点是什么?
2 回答
我假设“宏”是指让 LP 工具像 C 预处理器和大多数汇编程序一样执行“宏替换”。
宏替换是“语法糖”。这是一种编写代表许多类似细节的单个符号的方法。因此,术语“宏”:它是“宏编程”,以更高的抽象级别编写。
这就是我们在过去没有面向对象编程来提供易于访问的抽象层时所做的事情。
从技术上讲,仅使用函数调用就可以在 C 中进行抽象层和宏式编程。不需要预处理器“宏”编程。例如,我们曾经将内联函数定义为预处理器“宏”来手动优化我们的代码。那是因为早期的 C 编译器没有很好地优化。
现在我们有了 OO 编程,就不需要更原始的编程语言的宏功能了。
Literate Programming 宏功能用于非 OO 语言(如 C 和 Pascal)中,以在 LP 级别创建类似类的功能和类似继承的功能。
这没有任何意义。只需定义适当的类并使用适当的继承即可。
我写了 2 个不同的 LP 工具:TCLP - 不支持宏: http ://code.google.com/p/tclp amd NanoLP,支持非常灵活的宏: http ://code.google.com/p/nano- LP。
当我编写 TCLP 时,我对宏的想法是——这很糟糕,因为它破坏了程序结构,就像另一个宏系统一样——你可以像 C 语言中的并行宏系统一样思考它。C 宏隐藏真实代码 - 它们不是真实的函数调用,但隐藏(如占位符!)真实代码和 LP 宏是隐藏代码的并行方式。这是缺点。
但是,如果您编写好的 LP 宏,可读且易于理解,那么使用它们就没有问题,所以我将 flex 宏系统(带有占位符、导入、变量字典......)包含在我的下一个工具 - NanoLP 中。