12.1 縮排即語法:強制可讀性與語言設計美學#
聖誕假期的厭倦之作#
Guido van Rossum(1956–,荷蘭人)1989 年聖誕假期開始寫一門「給自己用」的腳本語言,作為 ABC 語言的改良接班人。1991 年 2 月首次發布。他自嘲地取了名字——致敬英國喜劇團體蒙提·派森,不是蟒蛇。
ABC 語言(CWI,1980s)的遺產與教訓:Guido 在 CWI 參與 ABC 的開發,ABC 有極簡語法與縮排區塊,但封閉(不可擴充、不接系統)且未開源——學術完美主義錯失採用。Python 的設計起點就是修正 ABC 的錯誤:保留 ABC 的可讀性,嫁接 C/UNIX 的可擴充性。Guido 後來總結為「用 Python 是與電腦對話的方式,用 C 是與 CPU 對話」。
縮排即語法:一個爭議五十年的決定#
Python 用縮排(空白層級)取代大括號表達區塊:
def quicksort(xs):
if len(xs) <= 1:
return xs
pivot = xs[0]
less = [x for x in xs[1:] if x < pivot]
greater = [x for x in xs[1:] if x >= pivot]
return quicksort(less) + [pivot] + quicksort(greater)
| 支持方的論證 | 反對方的論證 |
|---|---|
| 縮排本來就是程式的視覺結構——語法應與視覺一致(消除「語法正確但縮排誤導」的 C 經典 Bug) | 複製貼上出錯、tab/空格混用地獄(PEP 8 為此立法) |
| 可讀性被語言強制,而非被團隊規範(Dijkstra 8.3:靠結構不靠紀律) | 嵌套太深後縮排失去可讀性 |
| 減少符號噪音,接近偽代碼 | 工具(diff、模板嵌入)處理困難(現代工具已解決) |
歷史定位:縮排語法是「ALGOL 區塊思想(8.1)的視覺化極端」——begin-end → {} → 空白。Python 證明:把格式紀律寫進語法,是「可讀性即正確性」哲學的最大膽實踐。與 Tim Peters 的《Python 之禪》(2004):「可讀性至上(Readability counts)」一脈相承。
「只有一種做法」#
Python 設計的獨特立場:限制表達的自由,換取社群的統一:
- 沒有
++、明確反對函數式炫技(Guido 曾想刪除 lambda/map/filter!2005 年的著名論戰) - PEP 流程(2000):語言演進的公開提案制度——成為後繼者(Rust RFC、TC39 提案)的模板。治理結構成為語言的核心競爭力
- 對比 Perl 的「有多種做法」(TMTOWTDI)與 C++ 的「什麼都能做」:Python 押注可維護性 > 表達力
BDFL 制度:仁慈的終身獨裁者#
Python 的治理是程式語言史獨特樣本:BDFL(Benevolent Dictator For Life)——Guido 個人擁有最終決定權,運作依賴他的品味與節制。
2018 年 7 月,Guido 因「賦值表達式(walrus :=)之戰」身心俱疲,宣布退出 BDFL:「我現在是一個孤獨的獨裁者……我累了。」此後轉為指導委員會制。語言治理的難題與國家治理同構:獨裁的效率 vs 共識的成本——JavaScript(TC39)、Rust(RFC+核心組)、Go(Google 內部共識)各自給出答案。語言的治理結構,最終決定它能長多大。
教育與科學的起飛(簡述,12.3 詳展)#
- 1990s 末,Python 進入教學(替代 Pascal/BASIC——「可執行的偽代碼」正是 Pascal 教學理想的直系繼承)
- 2001 SciPy/NumPy 生態起步——科學計算從 MATLAB 的專有授權轉向開源
- 2008 Python 3 的分裂(不向下相容的豪賭——十年陣痛,生態到 2020 才完成遷移):語言治理最昂貴的教訓之一