2008 Barbara Liskov —— 抽象的立法者與替換原則#
「程式要能被修改而不崩壞,需要一條關於『誰能替代誰』的 宪法。這條憲法以她的名字命名,出現在每一本 OOP 教科書。」
案件檔案#
| 項目 | 內容 |
|---|---|
| 得主 | Barbara Liskov (1939–) |
| 得獎理由 | 程式設計方法論與抽象化的貢獻:資料抽象、容錯分散式計算 |
| 關鍵詞 | CLU、資料抽象、Liskov 替換原則、Paxos 前傳 |
前因#
1960s 末,大型程式的崩壞模式:任何模組都能觸碰任何資料。 Parnas(1972 論文)提出「資訊隱藏」,但需要語言級 機制。Liskov 在 MIT 的謎題:如何讓「資料」也擁有 存取控制與型別保證?
線索與推理#
線索一:CLU 語言(1974–79)#
Liskov 與 Zilles 定義 cluster(CLU 的抽象資料型別):
cluster IntSet is create, insert, member, ...
rep = ... (表示式,外界不可見)
member = proc (s: cvt, x: int) returns (bool)
return exists e: rep[s](e) = x
end IntSet
要點:
- 表示式隱藏:cvt 轉換為唯一邊界
- 參數化型別(泛型):
Array[T]的 typegen—— 先於 Java/C++ 泛型二十年 - 迭代器(yield):控制抽象與資料抽象並列—— Python/C# 的 for-yield 直系
線索二:Liskov 替換原則(1987 OOPSLA 演講,1994 成文)#
若 φ(x) 對型別 T 的物件 x 成立,則對 T 的子型別 S 的
物件 y,φ(y) 亦應成立(行為子型別)。
操作化:子類的每個方法 m 須滿足
前置條件:不強於父類(req(m) ⊆ req(m'))
後置條件:不弱於父類(ens(m') ⊇ ens(m))
繼承從「語法允許」升級為「契約相容」——IS-A 必須是 行為意義的。這條原則是設計模式、SOLID 中的 L, 也是 Rust trait 與型別系統設計的倫理基準。
線索三:分散式容錯(1980s–90s)#
Liskov 學派(MIT PDOS)在拜占庭容錯上先行:
拜占庭將軍問題(Lamport 1982)的工程化
PBFT 式複製:2f+1 台容忍 f 台任意故障(含作惡)
Viewstamped Replication(Oki–Liskov 1988)——
與 Paxos(Lamport 2013 案)同期獨立發明的共識前作
線索四:Argus 與分佈式事務#
以「guardian」封裝分散式物件事務——把 CLU 的抽象 思想搬進網路世界(Gray 1998 案的 ACID × Liskov 的 封裝)。
理論評析#
Liskov 的統一母題:契約(contract)。
資料抽象 = 資料的契約(介面 vs 表示)
行為子型別 = 繼承的契約(不變式的保持)
容錯複製 = 機器間的契約(故障也要遵守承諾)
抽象層次每上一級,契約的強制力就由語言接管一分—— 把信任從人轉移到機制,是她四十年工作的單一主線。
後果#
- 泛型、迭代器、抽象類別成為主流語言標配。
- 她是圖靈獎第二位女性得主;2021 年與 Hoare 同年 再次獲獎(唯二兩度得主)。
關聯案件#
→ 2001-Dahl-Nygaard與物件導向程式設計、1998-Jim-Gray與交易處理及資料庫、2013-Leslie-Lamport與分佈式系統及Paxos