问候。我现在一直在研究文学编程,我确实喜欢它背后的想法:你基本上写了一篇关于你的代码的小论文,并写下了尽可能多的设计决策、可能围绕模块的代码、模块的内部工作原理、设计决策产生的假设和结论、潜在的扩展,所有这些都可以写下来使用 tex 以一种很好的方式进行下来。当然,第一点:它是文档。它必须保持最新,但这不应该那么糟糕,因为您的更改应该有理由,并且您可以将其写下来。

然而,文学编程如何更大程度地扩展呢?总的来说,文学编程仍然只是文本。当然,非常适合人类阅读的文本,但仍然是文本,因此很难遵循大型系统。例如,我重新设计了编译器的大部分,以使用 >> 和一些魔法将编译步骤链接在一起,因为一些“x.register_follower(y);”y.register_follower(z);y.register_follower(a);..." 真的很笨重,将其更改为 x >> y >> z >> a 使它好一点,尽管这也处于临界点。

那么,文学编程如何扩展到更大的系统呢?有人尝试这样做吗?

我的想法是使用 LP 来指定使用事件流相互通信的组件,并使用 graphviz 的子集将所有这些组件链接在一起。这将是对 LP 的相当自然的扩展,因为您可以从网络中提取文档(数据流图),并且还可以很好地从中生成代码。你怎么看呢?

——特莎。

有帮助吗?

解决方案

很好的问题。文学编程的动机永远不会消失,但我认为它应该被视为流畅的。这意味着<!>“给读者一个休息时间,并教育他们你想要做什么<!>”。我认为这并不意味着<!>“使你的代码真的很罗嗦<!>”。

那就是说,读者必须付出一些努力,这取决于他们已经知道的东西。据推测,代码值得理解,没有任何东西是免费的。

我认为这不仅仅意味着制作可读代码。很可能是某人阅读代码的原因是因为他们需要进行更改。您应该预测可能需要的可能更改,并告诉他们如何在必要时执行此操作。

其他提示

本书<!>“基于物理的渲染<!>”; (pbrt.org)是我所知道的大规模文学编程的最佳范例。本书实现了一个完整的渲染系统,书籍文本和光线跟踪器代码都是从同一个<!>“源<!>”生成的。

在实践中,我发现只使用像Doxygen这样的系统并且真正挖掘并利用它的所有功能比完全成熟的<!>`literate <!>更好。编程,除了这样的事情,即教科书,教育材料。

大约 15 年前,我用 WEB 进行了一些文学编程。最近,我尝试从 wiki 中提取代码并从 Squeak Smalltalk 环境中生成文档。

自下而上的部分可以通过从 TDD/BDD 框架生成文档来处理,但 LP 侧重于向读者解释代码。

有几个问题:

  • 对于不同的利益相关者/读者来说,要讲述的故事是不同的;
  • 大多数环境中的项目结构并不是讲故事所需的结构;
  • 缺少对连续细化/披露的支持;
  • 除了文字还需要图片的支持;
  • 从源代码控制系统中的注释中,我们可以得出系统是如何构建的。故事应该是如何构建系统的(具有完美的事后诸葛亮)。

为了让 LP 适用于更大的系统,您需要比 wiki 或对象浏览器更好的 IDE 支持。

  

<!>“总的来说,文学编程是   仍然只是文字<!>“;

假。

图表很好。

  

我的想法是使用LP来指定使用事件流相互通信的组件

那只是建筑,没关系。

  

您可以从网络中提取文档 - 数据流图 - 并且也可以从中生成代码。你觉得怎么样?

数据流图对于生成详细代码并不是那么有用。它们是一个方便的摘要,而不是确切的信息来源。

一个好的书写工具(如LaTex)可以对文档中的图表进行编码。您可以从文档的其他部分找到图表的方法。

底线

从长远来看,您最好将图表生成为文本摘要。

为什么呢?

图表故意隐瞒细节。图表是摘要或概述。但作为代码的来源,图表很糟糕。为了提供所有细节,图表变得非常混乱。

但是其他一些LP标记的图表摘要会很好。

pbrt 是一种基于物理的光线追踪器,以文学风格编写,用于计算机科学毕业生的教育(和我),这是一个中等规模的系统。作为一名非专业程序员,这一级别的文档对于理解程序的功能以及执行程序的原因非常重要。

我还可以访问Java中的研究渲染器,该编写器编写得很好但相对没有文档,但是有一些SIGGRAPH论文。这也是比较容易理解的,但我也可以访问作者。

我也使用了 ImageJ ,并且看了很多底层Java的引擎盖 - 如果不了解基础哲学,就很难理解。

总而言之,我的观点是,如果有人能够找到时间做得好而且很可能是在教育环境中,那么有文化的编程就很棒。在商业代码生产中很难看到它的完成。我对代码可以完全自我记录的想法持怀疑态度。

文学编程背后的理念是强调文档,代码通过文档散布,而不是通过代码散布的注释。

这是一种本质上不同的哲学,诸如较长的变量名,命名空间和类之类的差异不会影响哲学。文学编程提倡有意义的变量名称。

它扩展到更大的系统,因为文档与代码的基本比例与代码的大小成线性比例。

Literate Programming是在一个长期变量和函数名称根本无法实现的时代开发的。因此,代码真的不那么可读。

显然,从那以后发生了很多事情。

在今天的世界中,代码本身就是文档,因此术语<!>“自我记录代码。<!> quot;实现是没有任何注释或外部文档可以与底层代码保持同步。因此,当今许多程序员的目标是以对其他人可读的方式编写代码。

尝试NanoLP-LP可扩展工具,支持多种文档格式(Markdown,OpenOffice,Creole,TeX,Asciidoc等),导入其他LP程序,模板等。用户可以添加自己的命令/宏(在Python中),例如,从VCS进行特殊导入... http://code.google.com/p/nano-lp

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top