人和計算機的交互

世界不需要編程語言,能處理表(無語言就不需要區分代碼和數據)就夠了,人想給計算機賦予語言的特性,臆想使機器像人一樣的溝通,這是一廂情願,到頭來無非是自縛手腳。實際上表處理可能是人和計算機中間最合適的交互方式。

中間層:太厚浪費資源,降低效率,滋生貪腐。政府、軟件、商業均如此

最好直白

現象:信息技術讓政府、商業、人之間的路徑縮短了,但是這個卻在IT行業內是相反的方向發展。有種無形的東西從一種資源附着到另一種資源的,或者權力轉移。

以下摘錄自:http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html

四、

Lisp語言誕生的時候,就包含了9種新思想。其中一些我們今天已經習以爲常,另一些則剛剛在其他高級語言中出現,至今還有2種是Lisp獨有的。按照被大衆接受的程度,這9種思想依次是:

  1. 條件結構(即"if-then-else"結構)。現在大家都覺得這是理所當然的,但是Fortran I就沒有這個結構,它只有基於底層機器指令的goto結構。

  2. 函數也是一種數據類型。在Lisp語言中,函數與整數或字符串一樣,也屬於數據類型的一種。它有自己的字面表示形式(literal representation),能夠儲存在變量中,也能當作參數傳遞。一種數據類型應該有的功能,它都有。

  3. 遞歸。Lisp是第一種支持遞歸函數的高級語言。

  4. 變量的動態類型。在Lisp語言中,所有變量實際上都是指針,所指向的值有類型之分,而變量本身沒有。複製變量就相當於複製指針,而不是複製它們指向的數據。

  5. 垃圾回收機制。

  6. 程序由表達式(expression)組成。Lisp程序是一些表達式區塊的集合,每個表達式都返回一個值。這與Fortran和大多數後來的語言都截然不同,它們的程序由表達式和語句(statement)組成。

區分表達式和語句,在Fortran I中是很自然的,因爲它不支持語句嵌套。所以,如果你需要用數學式子計算一個值,那就只有用表達式返回這個值,沒有其他語法結構可用,因爲否則就無法處理這個值。

後來,新的編程語言支持區塊結構(block),這種限制當然也就不存在了。但是爲時已晚,表達式和語句的區分已經根深蒂固。它從Fortran擴散到Algol語言,接着又擴散到它們兩者的後繼語言。

  7. 符號(symbol)類型。符號實際上是一種指針,指向儲存在哈希表中的字符串。所以,比較兩個符號是否相等,只要看它們的指針是否一樣就行了,不用逐個字符地比較。

  8. 代碼使用符號和常量組成的樹形表示法(notation)。

  9. 無論什麼時候,整個語言都是可用的。Lisp並不真正區分讀取期、編譯期和運行期。你可以在讀取期編譯或運行代碼;也可以在編譯期讀取或運行代碼;還可以在運行期讀取或者編譯代碼。

在讀取期運行代碼,使得用戶可以重新調整(reprogram)Lisp的語法;在編譯期運行代碼,則是Lisp宏的工作基礎;在運行期編譯代碼,使得Lisp可以在Emacs這樣的程序中,充當擴展語言(extension language);在運行期讀取代碼,使得程序之間可以用S-表達式(S-expression)通信,近來XML格式的出現使得這個概念被重新"發明"出來了。

五、

Lisp語言剛出現的時候,它的思想與其他編程語言大相徑庭。後者的設計思想主要由50年代後期的硬件決定。隨着時間流逝,流行的編程語言不斷更新換代,語言設計思想逐漸向Lisp靠攏。

思想1到思想5已經被廣泛接受,思想6開始在主流編程語言中出現,思想7在Python語言中有所實現,不過似乎沒有專用的語法。

思想8可能是最有意思的一點。它與思想9只是由於偶然原因,才成爲Lisp語言的一部分,因爲它們不屬於John McCarthy的原始構想,是由他的學生Steve Russell自行添加的。它們從此使得Lisp看上去很古怪,但也成爲了這種語言最獨一無二的特點。Lisp古怪的形式,倒不是因爲它的語法很古怪,而是因爲它根本沒有語法,程序直接以解析樹(parse tree)的形式表達出來。在其他語言中,這種形式只是經過解析在後臺產生,但是Lisp直接採用它作爲表達形式。它由列表構成,而列表則是Lisp的基本數據結構。

用一門語言自己的數據結構來表達該語言,這被證明是非常強大的功能。思想8和思想9,意味着你可以寫出一種能夠自己編程的程序。這可能聽起來很怪異,但是對於Lisp語言卻是再普通不過。最常用的做法就是使用宏。

術語"宏"在Lisp語言中,與其他語言中的意思不一樣。Lisp宏無所不包,它既可能是某樣表達式的縮略形式,也可能是一種新語言的編譯器。如果你想真正地理解Lisp語言,或者想拓寬你的編程視野,那麼你必須學習宏。

就我所知,宏(採用Lisp語言的定義)目前仍然是Lisp獨有的。一個原因是爲了使用宏,你大概不得不讓你的語言看上去像Lisp一樣古怪。另一個可能的原因是,如果你想爲自己的語言添上這種終極武器,你從此就不能聲稱自己發明了新語言,只能說發明了一種Lisp的新方言。

我把這件事當作笑話說出來,但是事實就是如此。如果你創造了一種新語言,其中有car、cdr、cons、quote、cond、atom、eq這樣的功能,還有一種把函數寫成列表的表示方法,那麼在它們的基礎上,你完全可以推導出Lisp語言的所有其他部分。事實上,Lisp語言就是這樣定義的,John McCarthy把語言設計成這個樣子,就是爲了讓這種推導成爲可能。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章