问候.我现在一直在研究Literate Programming,我确实喜欢它背后的想法:你基本上写了一些关于你的代码的文章并写下了尽可能多的设计决策,代码可能围绕模块,内部工作原理由设计决策,潜在扩展产生的模块,假设和结论,所有这些都可以使用tex以一种很好的方式写下来.当然,第一点:它是文档.它必须保持最新,但这不应该那么糟糕,因为你的改变应该有理由,你可以写下来.
但是,文学编程如何在更大程度上扩展?总体而言,文学编程仍然只是文本.当然,非常人类可读的文本,但仍然是文本,因此,很难遵循大型系统.例如,我重新编写了我的编译器的大部分内容以使用>>和一些魔法来将编译步骤链接在一起,因为一些"x.register_follower(y); y.register_follower(z); y.register_follower(a); ... "变得非常笨拙,并将其改为x >> y >> z >> a使它变得更好,尽管这也是它的突破点.
那么,Literate Programming如何扩展到更大的系统?有人试图这样做吗?
我的想法是使用LP来指定使用事件流相互通信的组件,并使用graphviz的子集将所有这些组合在一起.这将是LP的一个相当自然的扩展,因为您可以从网络中提取文档 - 数据流图 - 并且也可以从中生成代码.你怎么看呢?
- Tetha.
"基于物理的渲染" (pbrt.org)这本书是我所知道的大规模文学编程的最好例子.本书实现了一个完整的渲染系统,书籍文本和光线跟踪器代码都是从同一个"源"生成的.
在实践中,我发现只使用像Doxygen这样的系统并且真正挖掘并利用它的所有功能比完整的"文化"编程更好,除了像这样的东西,即教科书,教育材料.