今天,計算機科學博客 Computational Complexity 披露了一則消息:圖靈獎得主、快速排序算法發明人、null 引用的提出者託尼·霍爾(Tony Hoare)於 2026 年 3 月 5 日在英國劍橋安然離世,享年 92 歲。

圖 |(來源:Computational Complexity)
如果你寫過代碼,那麼一定遇到過它:一個讓程序突然崩潰、屏幕上跳出紅色報錯的元兇——“NullPointerException”,也就是我們常說的“null”,代表“無效的,缺失的,無意義的,空值”。

(來源:Autodesk)
這個讓無數程序員頭疼、讓無數系統宕機的概念,正是由霍爾在 1965 年親手引入。他後來稱之爲“價值十億美元的錯誤”,並在 2009 年的一場軟件大會上公開爲它致歉。
但他的一生也成就無數,霍爾是快速排序算法、霍爾邏輯、CSP 併發理論的奠基者,也是 20 世紀最具影響力的計算機科學家之一。
從古典學到計算機:一段意外的旅程
託尼·霍爾,全名查爾斯·安東尼·理查德·霍爾(Charles Antony Richard Hoare),1934 年 1 月 11 日出生於錫蘭(今斯里蘭卡)科倫坡。父親是英國殖民地公務員,母親出身茶園主家庭。他在英國接受教育,先後就讀於牛津龍校和坎特伯雷國王學校,隨後進入牛津大學默頓學院。有趣的是,他主修的既不是數學也不是工程,而是古典文學與哲學。
1956 年從牛津畢業後,霍爾在皇家海軍服役 18 個月,期間系統學習了俄語。這段語言訓練後來成爲他人生的關鍵轉折:他以英國文化協會交換生身份前往莫斯科國立大學,師從數學家安德烈·柯爾莫哥洛夫,參與早期計算語言學與機器翻譯研究,由此他真正踏入了計算機科學領域。

圖 | 託尼霍爾在莫斯科(來源:Not yet ready)
1960 年回國後,霍爾加入倫敦埃利奧特兄弟有限公司(Elliott Brothers Ltd),正式開啓編程生涯。訃告作者吉姆·邁爾斯(Jim Miles)在回憶文章中提到,霍爾曾擔任早期計算機的“演示員”,足跡遍佈全球,尤其是蘇聯。在那個年代,既精通俄語又懂計算機原理的人,實在鳳毛麟角。
就在倫敦工作期間,霍爾完成了一件改變算法史的事。
當時公司要求他實現一種排序算法。霍爾完成任務後告訴老闆,自己其實知道一種更快的方法。老闆半信半疑,回應說:“我賭你六便士,你做不到。”但結果,快速排序(Quicksort)果真更快,賭注也如實兌現。
霍爾晚年多次向朋友講述這段往事,每次都繪聲繪色。邁爾斯回憶,自己曾好奇這個“賭注”究竟是比喻還是真事,霍爾明確確認:那六便士他真的拿到了。
快速排序發明於 1959 至 1960 年間,霍爾當時年僅 26 歲。這個算法至今仍是全球使用最廣泛的排序算法之一,幾乎出現在所有計算機科學的基礎教材中。毫不誇張地說,如今你每天使用的絕大多數軟件系統,都在某處運行着快速排序。
憑藉這項貢獻,以及他在編程語言理論、操作系統、併發模型等領域的系列成就,霍爾於 1980 年獲得計算機科學最高榮譽:ACM 圖靈獎,表彰他“在編程語言定義和設計方面的基礎性貢獻”。2001 年,他因對計算機科學的傑出貢獻獲封爵士。
“我發明了它,我來道歉”
然而,讓霍爾在程序員羣體中廣爲熟知的,或許並非那些成就,而是一次公開的致歉。
2009 年,在倫敦 QCon 軟件大會上,75 歲的霍爾站上臺,以一種罕見的姿態,向全場數百名工程師正式致歉。他稱 null 引用爲“價值十億美元的錯誤”(the Billion Dollar Mistake)。因爲一個小小的 null 在過去四十年間造成了無數錯誤、漏洞和系統崩潰,帶來的損失恐怕超過十億美元。

(來源:InfoQ)
null 到底錯在哪裏?要理解這一點,得回到 1965 年。
彼時,霍爾正在設計 ALGOL W 語言的引用類型系統。他希望系統足夠安全,避免程序員因使用不存在的對象而導致程序崩潰。但在設計過程中,他引入了一個特殊值——null,用於表示“這個引用目前什麼都沒有指向”。邏輯上看,這似乎是個合理甚至有用的設計。但現實中,問題卻像滾雪球般擴大。
因爲 null 的本質是“什麼都不是”,所以它基本可以出現在任何需要"某個東西"的地方,冒充任何類型的引用值。而當代碼沒有檢查變量是否爲 null 就直接使用時,程序就會在運行時崩潰,這就是所謂的“空指針解引用”。
這類錯誤幾乎出現在所有主流編程語言中:Java 會拋出 NullPointerException,C/C++ 可能導致程序崩潰,JavaScript 甚至同時存在 null 和 undefined 兩個相似概念,讓人困惑。
更嚴重的是,null 引發的漏洞還被黑客利用,成爲安全攻擊的突破口。在底層系統中,如果程序在解引用指針前沒有檢查其是否爲空,就可能觸發“空指針解引用”。在某些情況下,攻擊者甚至可以藉此操控程序執行流程,從而實現提權或代碼執行。
例如在 Linux kernel 的早期版本中,研究人員曾發現多處空指針解引用漏洞。由於當時系統允許用戶程序映射地址 0,攻擊者可以在該位置放置惡意代碼,再觸發內核錯誤,從而實現本地提權。
類似問題也曾出現在 Mozilla Firefox 等瀏覽器軟件中。攻擊者通過構造特定網頁觸發空指針訪問,輕則導致瀏覽器崩潰,重則可能成爲更復雜攻擊鏈的一部分。
而且,有些魔幻的是,null 帶來的麻煩還不只停留在代碼世界裏。
在美國,至今仍有許多姓 Null 的人,他們的日常生活被這個特殊字段攪得一團糟。由於 null 的特殊性,他們買機票時系統會認定爲姓氏欄是空的,酒店預訂表單一填完就自動清空,簽證申請顯示"用戶不存在"。弗吉尼亞州的詹妮弗·努爾(Jennifer Null)向媒體承認說,越是重要的服務,越難跟系統講清楚自己“真實存在”。
更離奇的遭遇者是約瑟夫·塔塔羅(Joseph Tartaro)。2016 年,他爲了和妻子湊一對“NULL + VOID”的情侶車牌,向加州車管所申請了"NULL"號牌。2018 年他繳納了一張 35 美元的普通罰單,系統由此將他的信息與"NULL"字段綁定,此後,全州所有忘記填寫車牌號的空白罰單,都自動寄到了他名下。從弗雷斯諾到蘭喬庫卡蒙加,他從未涉足的城市接連發來罰單,累計金額超過 12,000 美元。
他在黑客大會“DEF CON”上公開講述此事,演講題目直接叫《去你的 NULL》。
如何消除 null
過去幾十年間,語言設計者們紛紛嘗試從根本上解決這個問題。Java 後來引入了 Optional 類型,Kotlin 在語法層面嚴格區分可空類型與非空類型,Rust 則乾脆取消 null,改用 Option<T> 枚舉來表示"有值"或"無值"兩種狀態,並由編譯器強制要求程序員處理所有可能情況。Swift、Haskell、Elm 等語言也採用了類似思路。
在這些新語言中,一個變量如果可能爲空,它的類型本身就會明確標註,編譯器會拒絕那些忘記做空值檢查的代碼通過編譯。
這場語言層面的變革,在一定程度上由霍爾那次坦誠的公開道歉所推動。他的“錯誤”,反而成爲了推動編程語言安全性進步的重要動力。
瑕不掩瑜:霍爾的其他貢獻
在 null 和快速排序之外,霍爾還有許多影響深遠的成就。
他提出的霍爾邏輯(Hoare Logic),是一套用數學方式驗證程序正確性的公理體系。簡單來說,它允許程序員用嚴格邏輯證明一段代碼“一定會做到它聲稱要做的事”,而不只是靠測試碰運氣。這套理論奠定了形式化驗證領域的基礎,今天航空、汽車、核能等安全關鍵領域的軟件認證,仍在使用它的衍生工具。

(來源:Wickopedia)
他發展的 CSP(通信順序進程),是描述併發程序行爲的形式語言。Go 語言的 channel 機制、Erlang 的 Actor 模型,都在不同程度上受到 CSP 的影響。在多核、多線程計算早已普及的今天,這套理論的價值不言而喻。
他還參與編寫了《結構化編程》一書,與迪傑斯特拉等人共同推動"結構化編程"思想的普及,終結了充斥着 goto 語句的混亂代碼時代。
1977 年,霍爾受聘牛津大學,成爲編程研究小組負責人,後來擔任首位克里斯托弗·斯特拉奇計算教授,直至 2000 年退休。此後,他在劍橋微軟研究院繼續工作,將畢生所學貢獻給學術社區。

圖 | 霍爾相關成就和論文(來源:De Programmatica Ipsum)
邁爾斯的回憶文章中,還有一個令人印象深刻的細節。
晚年時,霍爾與友人聊到計算機的未來:關於摩爾定律是否觸頂、量子計算能否破解現有加密算法。霍爾沉吟片刻,說了一句讓在場所有人都不禁深思的話:
“當然,我們擁有的東西根本無法接近政府能接觸到的。它們永遠遠遠領先於你能想象的。”
當被追問是否相信量子技術已能破解大素數分解難題時,他只是聳了聳肩。
誰也不知道,這是他真實掌握的內幕,還是故意用玩笑調侃提問者。據邁爾斯形容,霍爾極具幽默感,完全有能力用一本正經的諷刺把人帶進溝裏,直到你恍然大悟這是個玩笑。
邁爾斯還在文章中特別提到了霍爾的謙遜。在快速排序的“六便士賭注”故事裏,有個細節尤爲動人:霍爾在提出自己知道更快算法之前,老老實實先把公司要求的那個較慢算法完整實現了。他認爲自己是對的,但沒有先叫板,而是先完成工作,再表達不同意見。
這種專業精神貫穿了他整個職業生涯。霍爾不僅願意承認別人的貢獻,也願意公開承認自己的錯誤。他對 null 的那次道歉,在計算機科學界至今仍是一段佳話,不僅因爲內容本身,更因爲一位圖靈獎得主願意就此公開站出來說“我錯了,我很抱歉”。
真正的大師,不會因爲榮耀而回避錯誤,反而正是通過正視錯誤,讓整個行業走得更遠。霍爾或許就是一個最好的詮釋。
願他安息。
參考鏈接:
1.https://blog.computationalcomplexity.org/2026/03/tony-hoare-1934-2026.html
運營/排版:何晨龍




