---
order: 34
date: 2026-08-17
summary: ——法律是最早的可执行记忆：规则替社会记住教训，也替社会藏起理由
---

# 代码即记忆

**——法律是最早的可执行记忆：规则替社会记住教训，也替社会藏起理由**

软件工程里有一个不响亮、但越老的程序员越信的说法：代码即记忆。一家公司真正的制度不写在员工手册里，写在代码里——写代码的人离职了，当初的争论没人记得了，但那个古怪的 if 分支还在原地，拦着当年那个 bug。文档会撒谎，它描述的只是写文档的人以为的系统；代码不会，它就是系统本身。决策沉淀进代码之后，组织可以放心遗忘，代码替所有人记着。

这句话放进法律，不但成立，而且法律是它最古老、最大规模的例证。但法律同时演示了这句话的病理——两面都值得讲。

## 安全地遗忘

每一条强制性规定背后，几乎都能挖出一次具体的事故。合同要求骑缝章，因为有人抽换过内页；票据法苛刻的形式要求，因为流通中验不了每一手的诚实；公司清算里繁琐的公告义务，因为有人偷偷分完财产走人，留下一群找不到被告的债权人。安全领域的说法最直白：规程是用血写成的。

这些规则的共同结构是：教训被编译成条文之后，社会就获得了遗忘的许可。后来的人不需要知道那场骗局的细节，照着盖章就行；不需要重演那次清算纠纷，照着公告就行。《清单从哪里来》说规则不是蒸出来的、是长出来的——从失败里长出来。本篇接着问一句：长出来的规则是什么？是固化的记忆。法律是人类最大规模的“代码即记忆”工程——几千年的事故、纠纷与教训，编译成一套后人无需理解就能执行的条文。**规则的全部意义，就是让遗忘变得安全。**

## 被 squash 的历史

但记忆有两种存法，差别巨大。

普通法的记忆带着语境：每条规则拴在一个案子上，案情、争议、当年法官的权衡都还在判例里，想知道“这条规则为什么存在”，回去读那个案子就行。法典的记忆是压缩过的：立法者把几百年判例、几十场论战消化成一个条文，只留结论，不留过程——用《法律的版本控制》的语言说，这是把整段提交历史 squash 成了一个 commit，连 message 一起删了。

squash 的好处是执行便宜：查条文比读两百年判例快得多。代价在几十年后到期：没人答得出为什么。霍姆斯有一句著名的抱怨——一条规则存在的全部理由，竟然只是亨利四世时代就这么定了，这是件令人作呕的事。令人作呕的不是规则老，是记忆断了：规则还在执行，它所记忆的那场事故早已无人知晓，于是没人敢改它，也没人知道它是不是还承重。程序员对此并不陌生——每个老代码库里都有几段没人敢删的死代码，注释只有一行“不要动”。《法律的版本控制》提过切斯特顿的栅栏：在弄清栅栏为什么立起来之前，不要拆它。这条原则是明智的，但要看清它的位置——**栅栏原则不是记忆的替代品，是记忆丢失之后的防御工事**。一个提交历史完好的系统，不需要靠“一律不许拆”来自保。

## 不会自己跑的记忆

法律和软件在这里还有一个关键差别，决定了这句行话在法律场景要打的折扣。

软件的代码记忆是自执行的：违反即失败，当场报错。那个 if 分支不需要谁来激活，每次运行都在原地站岗——记忆自带牙齿。法条不会自己跑。它需要有人起诉、有法院受理、有法官援引，才从存储变成执行；而法院这个 runtime 又慢又贵，于是大量条文常年处于“写着但从不运行”的状态。每部法律里都有这样的条款：从未被援引，从未被解释，久了之后，连它还算不算数都成了疑问——记忆还在介质上，只是从未被读取。

《断言与劝诫》给规矩立过一把尺：答得出“违反了会怎样”的是断言，答不出的是劝诫。按这把尺量，软件的代码记忆全部是断言；法条的记忆则一半是断言、一半是劝诫，而分界线不在条文里，在条文之外——取决于有没有人真的去按那个开关。**同一条规则，在诉讼频繁的领域是断言，在无人起诉的角落退化成劝诫。** 法律的记忆密度，不由立法决定，由执行决定。

## 机器该怎么记

这句行话对法律 AI 还有一层直接的操作含义，因为一个法律 Agent 恰好面对两种记忆载体的选择。

第一种是散文记忆：把踩过的坑写成经验笔记——“这类案子要注意时效”“这类合同的付款条款容易埋雷”。第二种是代码记忆：把同一个教训写成一条会跑的检查——扫描付款节点与交付义务，错位即报警。

差别不在优雅，在可靠性。散文记忆每次使用都要经过模型的转述，转述会漂移：限定词被吞掉，例外被磨平，十次调用十个版本。代码记忆的第一万次执行和第一次逐字相同。《给机器一张桌子》说过，一条跑出来的核对记录和一句“我核对过了”，是证据和陈述的区别；同样，一条会跑的规则和一段“要注意”的笔记，是记忆和印象的区别。《写给机器的纸条》说机器产出的文本生来该是明文——顺着再走一步：机器沉淀的教训，生来该是代码。

而且机器的规则库有条件不重蹈法典的覆辙。《清单从哪里来》定过规则层的生长机制：规则从红灯里长出来，每条规则背后挂着一次真实的漏检记录。这个“挂着”正是要害——它等于每个 commit 都强制附带 message，记忆连着语境入库。想删一条规则？回去看它出生的那次失败，答得出“为何不会再发生”就删，答不出就留——切斯特顿的栅栏于是有了退休条件。这是法典做不到的事：立法没有条件为每个条文留住它的事故现场，机器可以。**给机器建的记忆，从第一天起就不必 squash。**

## 尾声

代码即记忆，法律先做了几千年：把事故编译成条文，让社会可以安全地遗忘。但法律也把这句话的病理演示得同样彻底——squash 掉历史的记忆答不出为什么，等不到 runtime 的记忆退化成劝诫。

给机器造记忆的人，两个坑都绕得开：让每条规则会跑，记忆自带牙齿；让每条规则挂着出处，记忆连着语境。**代码化的记忆让系统可以安全地遗忘；连着出处的记忆，才让系统知道哪些遗忘是安全的。**
