文式编程

ero 进化了,结果依然是 ero

安装项目位于 https://github.com/liyanrui/zero安装步骤:$ git clone https://github.com/liyanrui/zero.git$ cd zero$ autoreconf -i$ ./configure$ make$ cd po ; make update-po ; cd ..$ sudo make install名可

ero 对 YAML 的支持

在程序源码片段的渲染方面,zero 的 day 模式提供了棱镜机制。zero 程序可以将某个程序源码片段写入一份临时文件,然后调用称为『棱镜程序』的一个外部程序对这份临时文件中的代码进行“渲染”。这个外部程序会将渲染结果写回临时文件,zero 程序通过再次读取临时文件获得程序源码片段的渲染结果。若不知 zero 为何物,可阅读『zero 进化了,结果依然是 zero』。棱镜

ero 与 ConTeXt MkIV 的结合

zero 所输出的 YAML 文档,现在可由 zero 项目提供的 yml2ctx 转换为 ConTeXt 源文档,再经过 ConTeXt MkIV 的排版处理后,可生成我认为效果挺不错的 PDF 文档。 排版,是个艺术活。艺术,向来需要一些繁琐的人类交互行为。所以,在 zero 与 ConTeXt MkIV 的结合中,在排版方面,需要对 ConTeXt MkIV 足够熟悉

程序与文档

经过半年的实践,期间也断断续续的在折腾自己所写的一个文式编程工具。现在可以正式但不严肃的谈谈对文式编程的一些体会了。写程序不难,关键是写出有用的程序。写出有用的程序也不难,关键是写出可让别人继续维护下去的程序。文档是重要的,没有文档,单凭代码中那些经常很蹩脚的变量名与函数名,往往很难理解一段代码的功能及用途。编程语言所提供的注释机制可以解释代码,但是它不能替代程序文档。如果

ero 的故事 [0] = 它什么也没做

有一个在 Linux 系统中比较容易安装和使用的软件,它叫 zero,寄居于 github 篱下:https://github.com/liyanrui/zero它之所以叫 zero,是因为它貌似做了一些事,但实质上它什么也没有做。它就像一个讲大道理的人,即使它努力写了一本《道德经》,但是它还是什么也没有做。大道理就是这样的,它看似告诉了你关于一切事物的终极真理,但这种终极

ero 的故事 [2] = 秩序

虽然在 zero 文件中,代码片段并非是按照编译器的逻辑顺序分布的,但是 zero 提供了一些特殊的标记,通过这些标记可以随时将代码片段按照编译器或解释器的逻辑顺序提取出来。这是上一节『绕出』部分所讲述的内容。我们在 zero 文件中实际上维护了代码片段的两种顺序,一种是人序,另一种是机序。人序是可见的,当我们从上而下逐行阅读 zero 文件或它经由排版软件产生的文档时,所

ero 的故事 [1] = 绕出

km.zero 是以 zero 所提倡的那种编程方式的一个示例,可使用以下命令获取它:$ wget https://github.com/liyanrui/zero/raw/master/example/ConTeXt/km.zerokm.zero 包含了许多 C 代码片段,还有一部分 Bash 代码,其他内容完全由 ConTeXt(一种 TeX 格式)标记文本构成。这些

ero 的故事 [5] = FAQ

Q:使用『zero -m night』命令从 zero 文件中提取的代码,若在调试中出错,如何将错误信息定位到 zero 文件?A:由 zero 文件提取的代码中含有 # line 语句。对于 C/C++ 代码而言,这些 # line 语句可以让编译器将代码定位到 zero 文件。例如:line 170 "./km.zero"AgnTree agn_km_classify(

ero 的故事 [4] = 与 Nikola 的合作

Nikola 是使用 Python 语言开发的一个静态网站生成工具。它接受使用 Markdown 或 reStructuredText 之类的标记语言撰写的文档,输出 HTML 页面。Nikola 的安装以及基本用法,可参考它的『Getting Started』文档。下面我要讲述 zero 如何与 Nikola 取得结合,以实现 zero 文件向 HTML 页面的逐步转换。

ero 的故事 [3] = 织出

zero 可将 zero 文件转换为 YAML 文件。Donald Knuth 将类似的过程称为 weave。因为程序文档像一张网,不仅文档的内容中存在着许多交叉引用,而且代码片段之间也存在着许多交叉引用——代码片段之间的引用关系以及带标签的代码片段的 + 与 ^+ 运算均产生交叉引用。事实上,将 zero 文件转换为 YAML 文件的过程中,zero 程序的主要工作是生成