格林斯潘第十定律

維基百科,自由的百科全書

格林斯潘第十定律(Greenspun's tenth rule)是計算機編程領域,尤其是編程語言領域的一句格言[1][2]

任何CFortran程序複雜到一定程度之後,都會包含一個臨時開發的、不合規範的、充滿程序錯誤的、運行速度很慢的、只有一半功能的Common Lisp實現。

這表現了Lisp語言的靈活性和可擴展性,它包含了理論上編寫複雜計算機程序需要的所有功能。而其他編程語言的核心實現卻不能提供開發複雜程序的關鍵性功能支持。

來源[編輯]

該定律由菲利普·格林斯潘(Philip Greenspun)於1993年前後提出。儘管被稱作「第十定律」,然而實際上並沒有前九個定律。格林斯潘曾解釋說:

對不起,Han-Wen,前面並沒有九個定律。我只是想給它取一個令人印象深刻的名字。[3]

含義[編輯]

Lisp語法幾乎是抽象的,其程序以S-表達式形式構建,這等價於其他編程語言內置編譯器中的抽象語法樹。Lisp作為一種同像(homoiconic)的語言,不區分代碼與數據,即:Lisp程序本身即Lisp數據結構。Lisp程序自身可通過生成額外的Lisp程序。因此,程序員可以相對輕鬆地構建複雜的特定領域語言。

如同保羅·格雷厄姆所說,Lisp比起其他語言可以更快地構建更健壯的程序。[4]特別是Common Lisp有相當大的標準庫,其中有大量的功能和靈活的接口,能寫出符合各種編程範式的程序(如removereducemap等)。格林斯潘第十定律表示,任何複雜軟件系統都需要上述的功能,都將從頭到尾重新設計開發這一套系統,而這在Common Lisp中已經存在了。

莫里斯推論[編輯]

知名黑客羅伯特·泰潘·莫里斯後來給該定律加上了推論,澄清適用該定律的「足夠複雜的」程序集合:

……包括Common Lisp。[5]

可以認為是對編寫龐大而複雜的Common Lisp程序困難性的評論,或僅僅是對於Lisp中eval函數的幽默。格林斯潘第十定律和莫里斯推論都具備黑客幽默中「哈哈,但的確如此」的風格特徵。[6]

參見[編輯]

參考[編輯]

  1. ^ Philip Greenspun's Research. [2012-05-21]. (原始內容存檔於2009-01-24). 
  2. ^ Paul Graham. Revenge of the Nerds. 2002-05. (原始內容存檔於2019-06-07). 
  3. ^ Philip Greenspun. 10th rule of programming. 2003-11-27. (原始內容存檔於2022-01-25). 
  4. ^ Paul Graham. Beating the Averages. 2003-04. (原始內容存檔於2022-01-29). 
  5. ^ Paul Graham. Lisp Quotes. [2022-02-02]. (原始內容存檔於2023-04-20). 
  6. ^ Jargon File entry on "ha ha only serious". [2012-05-21]. (原始內容存檔於2021-02-27).