代码即记忆
——法律是最早的可执行记忆:规则替社会记住教训,也替社会藏起理由
软件工程里有一个不响亮、但越老的程序员越信的说法:代码即记忆。一家公司真正的制度不写在员工手册里,写在代码里——写代码的人离职了,当初的争论没人记得了,但那个古怪的 if 分支还在原地,拦着当年那个 bug。文档会撒谎,它描述的只是写文档的人以为的系统;代码不会,它就是系统本身。决策沉淀进代码之后,组织可以放心遗忘,代码替所有人记着。
这句话放进法律,不但成立,而且法律是它最古老、最大规模的例证。但法律同时演示了这句话的病理——两面都值得讲。
安全地遗忘
每一条强制性规定背后,几乎都能挖出一次具体的事故。合同要求骑缝章,因为有人抽换过内页;票据法苛刻的形式要求,因为流通中验不了每一手的诚实;公司清算里繁琐的公告义务,因为有人偷偷分完财产走人,留下一群找不到被告的债权人。安全领域的说法最直白:规程是用血写成的。
这些规则的共同结构是:教训被编译成条文之后,社会就获得了遗忘的许可。后来的人不需要知道那场骗局的细节,照着盖章就行;不需要重演那次清算纠纷,照着公告就行。《清单从哪里来》说规则不是蒸出来的、是长出来的——从失败里长出来。本篇接着问一句:长出来的规则是什么?是固化的记忆。法律是人类最大规模的“代码即记忆”工程——几千年的事故、纠纷与教训,编译成一套后人无需理解就能执行的条文。规则的全部意义,就是让遗忘变得安全。
被 squash 的历史
但记忆有两种存法,差别巨大。
普通法的记忆带着语境:每条规则拴在一个案子上,案情、争议、当年法官的权衡都还在判例里,想知道“这条规则为什么存在”,回去读那个案子就行。法典的记忆是压缩过的:立法者把几百年判例、几十场论战消化成一个条文,只留结论,不留过程——用《法律的版本控制》的语言说,这是把整段提交历史 squash 成了一个 commit,连 message 一起删了。
squash 的好处是执行便宜:查条文比读两百年判例快得多。代价在几十年后到期:没人答得出为什么。霍姆斯有一句著名的抱怨——一条规则存在的全部理由,竟然只是亨利四世时代就这么定了,这是件令人作呕的事。令人作呕的不是规则老,是记忆断了:规则还在执行,它所记忆的那场事故早已无人知晓,于是没人敢改它,也没人知道它是不是还承重。程序员对此并不陌生——每个老代码库里都有几段没人敢删的死代码,注释只有一行“不要动”。《法律的版本控制》提过切斯特顿的栅栏:在弄清栅栏为什么立起来之前,不要拆它。这条原则是明智的,但要看清它的位置——栅栏原则不是记忆的替代品,是记忆丢失之后的防御工事。一个提交历史完好的系统,不需要靠“一律不许拆”来自保。
不会自己跑的记忆
法律和软件在这里还有一个关键差别,决定了这句行话在法律场景要打的折扣。
软件的代码记忆是自执行的:违反即失败,当场报错。那个 if 分支不需要谁来激活,每次运行都在原地站岗——记忆自带牙齿。法条不会自己跑。它需要有人起诉、有法院受理、有法官援引,才从存储变成执行;而法院这个 runtime 又慢又贵,于是大量条文常年处于“写着但从不运行”的状态。每部法律里都有这样的条款:从未被援引,从未被解释,久了之后,连它还算不算数都成了疑问——记忆还在介质上,只是从未被读取。
《断言与劝诫》给规矩立过一把尺:答得出“违反了会怎样”的是断言,答不出的是劝诫。按这把尺量,软件的代码记忆全部是断言;法条的记忆则一半是断言、一半是劝诫,而分界线不在条文里,在条文之外——取决于有没有人真的去按那个开关。同一条规则,在诉讼频繁的领域是断言,在无人起诉的角落退化成劝诫。 法律的记忆密度,不由立法决定,由执行决定。
机器该怎么记
这句行话对法律 AI 还有一层直接的操作含义,因为一个法律 Agent 恰好面对两种记忆载体的选择。
第一种是散文记忆:把踩过的坑写成经验笔记——“这类案子要注意时效”“这类合同的付款条款容易埋雷”。第二种是代码记忆:把同一个教训写成一条会跑的检查——扫描付款节点与交付义务,错位即报警。
差别不在优雅,在可靠性。散文记忆每次使用都要经过模型的转述,转述会漂移:限定词被吞掉,例外被磨平,十次调用十个版本。代码记忆的第一万次执行和第一次逐字相同。《给机器一张桌子》说过,一条跑出来的核对记录和一句“我核对过了”,是证据和陈述的区别;同样,一条会跑的规则和一段“要注意”的笔记,是记忆和印象的区别。《写给机器的纸条》说机器产出的文本生来该是明文——顺着再走一步:机器沉淀的教训,生来该是代码。
而且机器的规则库有条件不重蹈法典的覆辙。《清单从哪里来》定过规则层的生长机制:规则从红灯里长出来,每条规则背后挂着一次真实的漏检记录。这个“挂着”正是要害——它等于每个 commit 都强制附带 message,记忆连着语境入库。想删一条规则?回去看它出生的那次失败,答得出“为何不会再发生”就删,答不出就留——切斯特顿的栅栏于是有了退休条件。这是法典做不到的事:立法没有条件为每个条文留住它的事故现场,机器可以。给机器建的记忆,从第一天起就不必 squash。
尾声
代码即记忆,法律先做了几千年:把事故编译成条文,让社会可以安全地遗忘。但法律也把这句话的病理演示得同样彻底——squash 掉历史的记忆答不出为什么,等不到 runtime 的记忆退化成劝诫。
给机器造记忆的人,两个坑都绕得开:让每条规则会跑,记忆自带牙齿;让每条规则挂着出处,记忆连着语境。代码化的记忆让系统可以安全地遗忘;连着出处的记忆,才让系统知道哪些遗忘是安全的。