你是否同意有些程式語言比其他語言更好?如果同意,那麼其中必定有一種是最好的。而實際上,通用 Lisp (Common Lisp) 就是最好的,尤其是在現在 LLM 能夠撰寫程式碼之後。

LLM 寫程式碼的速度非常快,這改變了很多事情,因為以前寫程式碼是比較慢的部分。現在比較慢的部分是找出你的程式是否真的能正常運作,而在那之前你必須重新建置它,這可能需要幾分鐘。

當人類撰寫程式碼時,這點不太重要,因為撰寫程式碼花費的時間遠比等待它編譯並開始執行來得長。但現在不同了,所以你的反饋循環需要多久時間,就決定了你能多快地建置。

在通用 Lisp 中,這個循環幾乎不存在,因為讀取時間 (read-time)、編譯時間 (compile-time) 和執行時間 (runtime) 之間沒有真正的區別 (Graham)。通用 Lisp 是基於圖像的 (image-based),這意味著你的程式在記憶體中是一個活躍的圖像,所以一個函數的新版本會立即取代舊版本,而無需重新啟動任何東西。

此外,在大多數語言中,錯誤會導致程式崩潰。所以如果你用 LLM 寫程式碼,它必須讀取你的崩潰日誌來進行一些修改並重新執行你的程式。在通用 Lisp 中,你的程式不會崩潰,它會停止並開啟一個調試器 (debugger),顯示整個堆疊和所有變數。你只需將你的 LLM 指向調試器,它就能進行修復並恢復程式執行。

據我所知,通用 Lisp 是唯一做到這一切的主流語言。

Lisp 代表「列表處理」(List Processing)。在通用 Lisp 中,程式碼是以列表的形式撰寫的。例如,(+ 1 2) 是一個加兩個數字的程式,但它也只是一個包含三樣東西的列表:符號 +,以及數字 1 和 2。

有趣的是,這與通用 Lisp 用來儲存資料的列表是相同的類型,而且由於該語言圍繞著列表處理而建構,因此它處理資料的所有工具也能處理程式碼。所以一個程式可以接收另一個程式並修改它,例如它可以將 (+ 1 2) 變成 (* 1 2),並立即執行結果。

這就是巨集 (macros) 的可能性所在。巨集是一個函數,它接收你的程式碼並在其位置返回新的程式碼,這意味著你可以為語言本身添加新的結構。

一旦你可以為語言添加東西,你就可以圍繞著你的問題來建構它。所以在 Lisp 中,你不僅僅是寫一個程式,你還為你的領域寫一種語言,然後用它來寫程式。

這點現在變得更加重要,因為程式的價值在於其背後的觀念。我們正朝著一個軟體公司允許用戶自行更改產品的世界邁進,因為有了 LLM,這變得很容易。所以如果一家公司為其產品建構了一個好的、有觀念的領域語言,那麼用戶在其之上建構的一切都會更好,因為他們從公司的觀念開始,而不是從零開始。

以企業資源規劃 (ERP) 為例。每家公司運作方式都略有不同,所以幾乎每個人最終都需要對其進行修改。但如果 ERP 是用自己的領域語言編寫的,你就可以要求 LLM 用該語言進行修改。這些修改將自然地遵循領域語言的潛在觀念,因此它會契合產品而不是破壞它。

這不僅更好,也更便宜。Lisp 程式通常更簡潔,因為巨集可以讓你抽象化重複的模式,並將它們變成語言本身的一部分。所以程式越大,差異就越大。以我自己的經驗來看,我在通用 Lisp 中建置的應用程式,其程式碼長度大約是 Python 版本的六到七倍。

對於 LLM 來說,更少的程式碼意味著更少的 token,而 token 是你需要付費的部分,所以你在開發上花費更少。

這也意味著你的程式更大一部分可以放入 LLM 的上下文視窗 (context window)。如果你的 LLM 在其上下文視窗中擁有你的整個程式,那麼它就對你的意圖有完整的了解,這將使其做出更好的決策。以我的經驗來看,很多 LLM 的錯誤源於它在不看到其餘部分的情況下更改了我程式的一個部分。所以使用通用 Lisp,這種情況發生的頻率較低。

通用 Lisp 是一個 ANSI 標準,自 1994 年以來就沒有更新過。我喜歡這個特性。回到我們的 ERP 範例,如果你的用戶自行更改產品,這正是你想要的,因為底層語言從未改變,他們在其之上建構的任何東西也不會損壞。

當你在通用 Lisp 中撰寫程式時,你經常找不到所需的函式庫。Quicklisp,主要的通用 Lisp 套件管理器,有幾千個專案,而 npm 有數百萬個。

但我認為這不再是問題了。如今大多數程式都依賴於數百萬行程式碼的套件,這些套件不斷被破解。你不想在你的程式中遇到這種情況。此外,有了 LLM,你可以自己編寫所需的部分,或者移植整個函式庫——而 LLM 在移植程式碼方面似乎非常擅長。

最後,我現在看到很多人都在編寫程式,希望建立自己的事業。建立通用 Lisp 產品的一個明顯的缺點是,你很難找到工程師,因為很少有人知道如何用它來編寫程式。

但我認為這現在並不重要。如果你想建立一家成功的公司,你想要僱用最頂尖的技術人才:那些非常擅長學習新事物的人。所以,在你的程式設計面試中,讓他們學習通用 Lisp,這樣就可以了。你會看到人們學習的速度有多快,而那些表現出色的人可能會繼續學習它並變得非常擅長。

總之,下次你想寫程式時,請使用通用 Lisp。

Graham, Paul. "What Made Lisp Different." Paul Graham, May 2002, paulgraham.com/diff.html. Accessed 5 Oct. 2026.