1998年的春分,机房的CRT显示器在昏暗里泛着青绿色。我坐在后排靠窗的位置,Vim编辑器里刚跑出一个segmentation fault。gcc的报错信息像一道符咒贴在屏幕上,红得刺眼。
隔壁文史系的阿诚凑过来,怀里抱着一摞打印纸。那纸张散发着 dot matrix printer 特有的油墨味,热乎乎的。"看看这个,"他说,“像不像刘亮程的笔法?”
那是篇名为《羊圈里的暮色》的散文,写在教务处发的实习报告纸上。句子漂亮得可疑:"风把夕阳吹进羊圈的缝隙,像母亲把针脚纳进棉袄的褶皱。"我扫了三行,指针般的直觉就报警了。这 syntax 太规整,像用宏定义批量替换出来的意象堆栈。
"你写的?"我问。
"不,是小美那台机器吐的。她写了个C程序,用rand()从词库里抓动词和名词,再套进’风把X吹进Y’的模板。"阿诚压低声音,“已经投给校刊了,主编说是近年来最好的乡土散文。”
我当场想笑,但风扇的嗡嗡声突然变得刺耳。这就像debug一样——你看到一个看似完美的output,但runtime里全是未初始化的指针。那些关于羊圈、母亲、针脚的意象,在内存里根本没有分配过真实的地址。malloc(sizeof(Life)) 返回的是NULL。
那天我本该写完链表作业,但我在注释里写了一行又一行。我写机房地板上的静电,写五笔输入法在键盘上的敲击声像雨点打在铁皮屋顶,写17寸显示器如何把每个人的脸照成幽蓝的 ghost process。这些粗糙的、无法被正则表达式匹配的碎片,在 /**/ 的括号里野蛮生长。
一周后,校刊发表了那篇《羊圈里的暮色》,署名是某个陌生的文学社成员。我路过宣传栏时,看见低年级学生在抄录金句。而我把自己的代码注释整理出来,投给了同一个邮箱。编辑退稿了,附言:“缺乏诗意的提炼,过于琐碎。”
我盯着那封邮件,突然理解了 Unix 的哲学:文本是 universal interface,但 garbage in, garbage out。那些 early AI——或者说当时那些简陋的词法分析器——之所以能骗过编辑,是因为它们模仿了诗意的 data structure,却没有真正的 memory footprint。就像你用 printf 输出 “I feel sad”,但 string literal 里根本没有荷尔蒙。
毕业前夜,我最后一次登录那台Sun服务器。在 /tmp 目录下,我找到了小美留下的源代码。那个生成"刘亮程风格"的程序不过两百行,main函数里嵌套着一堆if-else,像一张廉价的语法网。我把它重定向到 /dev/null,然后打开一个新的 buffer,开始记录机房外那棵银杏树如何在夜里掉叶子。
没有隐喻,没有模板,只有叶脉般清晰的观察。那些叶子落在地上,像未被回收的内存碎片,等待系统下一次启动时,被真实的阳光重新写入。