LISP的過去和現在

來源:互聯網
上載者:User
呵呵,題目大了點。其實我只想說點小小的瞬間感受。

休假的感覺真好,可以在家裡悠閑地讀書。今天一口氣讀了大半Paul Graham 的書Hackers & Painters。讀Paul的文章總是一種享受,幾個小時不知不覺就過了。放下書的時候,彷彿一場讓人迷醉的音樂劇戛然而止,而自己還沉侵當中,過了好一會兒才慢慢回到現實。我不一定同意書裡的觀點,但Paul的確是寫文章的一流高手,總是激情洋溢,同時周詳有力地論證他的觀點。Paul的網站上登了書裡大部分文章,有興趣地可以去看看。書的第13章,Revenge of the Nerds,提到了LISP誕生的曆史,原來那也是一段精彩傳奇:最早LISP是John McCarthy搞出的一套計算模型(當然,λ-calculus還是Alonso Church搞出來的),用來替代繁複的圖靈機。用TM做過推導的同學就知道用TM還是相當不容易的哈。只不過McCarthy的學生Steve Russel突然發現把這個理論裡的eval運算元翻譯成機器語言(當時他們能用的就是IBM 704爺爺機了),LISP就有一個解譯器。當時連McCarthy都覺得這個想法不可思議,對Steve說,老大,你把把理論和實踐混淆了哈。不過Steve還是用機器語言寫出了eval。於是世界上第一個LISP解譯器誕生了。直到現在,越流行的語言吸收的LISP元素越多,比如python,比如ruby。LISP直到現在仍然被眾多牛人推崇。當年LISP有9大創新,50年後,深刻影響了程式設計語言的進程。可見一個完善的理論被適當地應用,可以變得多麼強大,煥發多麼奪目的生機:
1. 條件陳述式。當初的語言是沒有if else的,goto統治世界。
2. 函數類型。函數成了語言裡的類型,可以被變數指代,可以被當成參數傳來傳去(的一類公民的必要條件,參考SICP第一章)。這一條可以極大簡化編程,讓我們寫出非常漂亮的程式。所以現在的流行語言紛紛加入了這個特性(可惜Java沒有)。
3. 遞迴。這個不用說了吧。
4. 動態類型。smalltalk, python, ruby。。。連C#也有一個類似的var了。
5. 垃圾收集。不要以為GC是Smalltalk的發明哈,更不是Java的。
6. 基於運算式的編程。任何錶達式都可以成為另一個運算式的一部分。不像很多語言,把表達和陳述分開。
7. 符號類型。這個在python和ruby裡被採用,廣受歡迎。
8. 代碼即解析樹。這個讓LISP能方便地定義新的句法,操作程式本身,編寫元程式,產生真正意義上的宏。
9. 語言無時不在。代碼運行/解析可以在任何時候發生。這點和8.配合可以讓語言的擴充和交流變得非常容易。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.