跳轉到

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 才完成遷移):語言治理最昂貴的教訓之一

下一節:12.2 膠水語言