既然 Lisp 以及基於此的語言好到不行,為什麼基於 C 的語言一經問世便佔據統治地位?

而且可見的未來也同樣如此,而且這個世界上絕大多數重要的軟體都是使用這類語言實現?

問題的背景有知乎上有好多這樣學術語言的狂熱粉。

一個顯而易見的可能回復是這樣的語言的門檻太高,智商一般的程序員根本不能拿來實用。如果是這樣,一群智商一般的程序員反而成就這個信息世界,是不是有點反諷呢?

歡迎一切靠譜的討論,無論從技術,市場,推廣,還是文化方面。語言之爭就免了,不想挨磚。


本答案劣質,作廢


為什麼C/Pascal/Fortran語言會大行其道,正是因為以前的內存只有幾個KB大小啊……而且大多數人都覺得lisp太難看,所以lisp就沒有成為工業基礎。

至於為什麼三門語言裡面C存活了下來,這大概只是因為【Unix是C寫的】的這個隨機因素。為什麼Unix要用C呢,因為他們共享同一個爹……所以這個世界變成這樣,其實也有一部分原因是因為他的個人口味造成的


總結一下其他人列出的幾篇文章:

  1. 早期的 Lisp 語言有缺陷。
  2. Lisp 社區對新人不友好。
  3. Lisp 用戶喜歡單幹,把代碼寫到自己能用即可,不會為其他使用者考慮。
  4. Lisp 程序員更難被取代,對僱主而言不好招人。

我斷斷續續學過半個月的 Lisp,雖然覺得有很多優點,但真心覺得難學:

  1. 方言太多,我花了大量時間,也沒搞清哪個方言適合我。
  2. 資料太少。我在學 Scheme 的時候,基本找不到 R6RS 的資料,很多語法特性只能讀寫得很學術的文檔,並且解釋很少,實在難以理解。
  3. 讀起來離自然語言很遠。

有些很淺顯的道理我就不詳述了:

早期的硬傷太大,就被滾雪球了,後期很難翻身。

老用戶花了多少工夫才能精通啊,智商必須高人一等啊,這麼牛逼怎麼還能去做引導和幫助新人的事呢,沒罵他們傻逼就很不錯了。社區不能健康發展,就越來越小眾。

人少也就話語權低,繼續被滾雪球。

還有個關鍵因素是沒一個牛逼的後台,例如 Apple 或 Google。


你以為你的 C 語言在經過語法分析之後得到的所謂 AST 是什麼東西?

不知道的,去拿 C 寫這個題目:

給定四則運算表達式,轉換成逆波蘭表達式。

說完 Lisp 回到題目里第二個問題:

一群智商一般的程序員反而成就這個信息世界,是不是有點反諷呢?

不要小瞧大量非智能生物集體的力量,不然你以為 Java 是怎麼火的。

就是這樣。


狂熱粉的話聽聽就可以了 他們自己也不用lisp寫所有東西的

實用和好是兩套不同的標準. 沒有銀彈.

學術意義上的"好"可能是某個特性先進 未必就合適特定的情景.

不同的使用者 不同的需求 都是"實用"的要素.

具體到lisp, 我們可以看到它的優點都伴隨了相應的成本.

這些成本無法避免, 優點卻不是人人能發揮.

高度抽象:

- (有可能) write less do more.

- 學習成本高.

- 代碼和實際執行的指令序列可能差別大到無法想像. "lisp程序員知道萬物的value, 但不問cost"

s-expression語法:

- 解釋器好寫

- 運算符和函數得到規整化

- 難讀 http://xkcd.com/297/

GC:

- 使指令的實際執行時間不能簡單被估計


據說lisp machine開機就需要半天的時間,程序員當然很爽,一個上午嗑嗑瓜子再看看報紙等它開機就過去了。然後老闆當然就覺得很不爽,然後就被unix工作站給淘汰了。然後程序員當然就很懷念過去的好時光~~

unix hater book 裡面說的


OK,看到了各路神仙的不同見解,也重新溫習了PG的Hackers and Painters。其實PG試圖回答這個問題,但是我個人不太滿意。自己加一個答案,算是對這個問題的理解的備註吧。

我們假設要解決的特定問題的複雜性是常量(也就是誰徹底解耦後子問題的複雜性之和),那麼解決這個問題的複雜性則等於這個常量加上解決方法引入的複雜性。而我們解決問題的工具就是編程語言與庫,運行環境,支撐環境(如IDE,社區,文檔,商業支撐等)。

現代的lisp毫無疑問非常優美,但是這種優美是以犧牲可用性為代價的。何為可用性?那就是快速構建解決方案的可能性。這個依賴於強大的庫,而庫則依賴於語言的直觀與簡單。lisp相比C並不簡單,儘管其思想很簡單,但是深入學習你會發現要理解的地方很多(參照Lisp best practice)。比如等價關係就有至少三種不同深度。

lisp並不對應的到大規模使用的物理機器模型。曾經雄心勃勃的LISP機後來也不了了之,可見lisp並不適合硬體實現。這種不對應造成的一個後果是對硬體的理解無助於你對軟體的理解,這種知識上的割裂是致命的,特別是在編程語言發展的早期。而C直接就是基於簡單的抽象硬體。

lisp背後的思想一頁紙就可以寫下。它把大量的複雜性推到了前端。lisp程序員需要完成好多編程語言才需要關心的工作(lisp迷熱衷於基於lisp構造自己的編程世界),這應該就是lisp的受眾為什麼很小的重要原因之一。

而解決現實問題需要的是成熟的工程實踐,一致的介面,模型,範式,甚至紀律。lisp自由主義的范兒,哪受得了這樣的約束?

說到支撐環境,lisp社區的混亂有目共睹,商業支持泛善可陳。方言有幾百種,來自其他的語言的程序員如果學習lisp,一周之內就可以搞出另一種方言。現在Common Lisp和Scheme分庭抗禮,似乎要二統山河。但是仍然問題多多。

一句話,lisp只能玩玩,不值得投入太多精力,因為這種屠龍之技,用處真的不大。


http://blog.csdn.net/sedgewick/article/details/6941797 難怪Lisp不流行


從歷史角度,Lisp遠沒有C語言流行是跟上個世紀人工智慧發展的經歷有關,上個世紀人工智慧發展經歷了一個「AI winter」,以及馮諾依曼體系的發展和Lisp Machine的衰落,C語言(包括類C語言)更適合主流的硬體結構成為了主流的編程語言。

先佔坑,細節晚上慢慢補充。

有興趣可以去看《Land of Lisp》,開篇解釋的很清楚。


我覺得樓主是理解錯了, 說一門語言好, 並不是就一定會流行.

比如說, 小學, 學會了解一次方程, 很厲害, 中學到了二次, 大學還來微積分..

然後有人跑來跟你說, 微積分真好啊, 然後說一堆你聽不懂的東西...

後來又有人來說, 他學了相對論, 量子引力論, 又去計算引力波之類東西.. 說真東西真好..

甚至擺一大堆理由, 沒有那些理論不能研究電磁波, 不能開發計算機, 不能載人航天等等..

那你說量子力學那樣稀奇古怪的理論強大不強大呢, 或者好不好?

也許你說跑一個股票大漲的公司去, 問一撥人, 你會不會量子力學啊.. 就幾個人搭理

也許又有人說, 你看你買的手機, 納米級的工藝離不開理論, 因此理論很牛啊

的確 Lisp 沒有成為市場的主流, 相對 C/Java 會有種種沒有做好的地方..

但是個人覺得一個語言歷經十幾年沒有被歷史埋掉, 本身就很牛.

更何況 Lisp 發源的各種特寫一次次在主流語言里出現, 背後的原因可以挖很多


c語言是基於馮諾依曼體系的,

而lisp不是,所以lisp看起來很古怪,但也很獨特很有創意.


因為Lisp好到不行的時候,也慢到不行啊……

每種語言都有它的優勢和劣勢,比如Lisp的學習曲線就比較陡,不是特別適合新手入門。

關於C和Lisp的具體分析,等我抽空來補。


There are only two kinds of programming languages: those people always bitch about and those nobody uses.——C++之父 Bjarne Stroustrup

譯文:只有兩種編程語言:天天挨罵的或沒人用的。


C語言比較符合直觀思維。Lisp有點像是直觀思維的某種變換,比如直角坐標系和極坐標系的關係。C語言很恰好在很多方面取得了較好的平衡,對大部分問題都能給出較好的解。出現的時機也非常對。


(才怪 (流行 lisp) 這語言)


Lisp 最大的問題是內存佔用


什麼叫好到不行?什麼叫統治地位?

討論問題能不能嚴謹一些?


lisp沒有好到不行吧


推薦閱讀:

既然 TeX 語法這麼爛,為什麼不用 Python 把 TeX 重寫一遍?
如何評價 C++11 的右值引用(Rvalue reference)特性?
零基礎(轉行)能學unity3d嗎?
什麼是"Core Dumps",為什麼"Haskell"可以沒有?
虎書ML版裡面關於garbage collector的問題?

TAG:編程語言 | C編程語言 | Lisp |