編者按 第一周:Ruby 有糖相伴好下藥?!狹ary Poppins 松本行弘(Yukihiro Matsumoto)大約在1993年發(fā)明了Ruby,大家多稱他為Matz。從語言的角度看,Ruby出身于所謂的腳本語言家族,是一種解釋型、面向對象、動態(tài)類型的語言。解釋型,意味著Ruby代碼由解釋器而非編譯器執(zhí)行。動態(tài)類型,意味著類型在運行時而非編譯時綁定。從這兩方面看,Ruby采取的策略是在靈活性和運行時安全之間尋找平衡點,我們稍后還會深入討論這一點。面向對象,意味著Ruby支持封裝(把數據和行為一起打包)、類繼承(用一棵類樹來組織對象類型)、多態(tài)(對象可表現(xiàn)為多種形式)等特性。Ruby多年來一直默默蟄伏,只為等待一個恰當的出現(xiàn)時機。終于,隨著Rails框架嶄露頭角,Ruby也在2006年前后一鳴驚人。在企業(yè)開發(fā)的叢林中跋涉了十年之后,Ruby指引人們重新找回了編程樂趣。盡管從執(zhí)行速度上說,Ruby談不上有多高效,但它卻能讓程序員的編程效率大幅提高。 關于Ruby、關于松本行弘請參見松本行弘的程序世界 第二周:Io 問題不是“我們要干點兒什么”而是“我們有什么不能干”?!狥erris Bueller Io和Ruby一樣,Io懂得變通,行事不拘小節(jié)。他血氣方剛、聰明過人,想了解他不難,想猜透他要做什么可就難了,活脫一個Ferris Bueller 。如果你愿意享受喧囂熱鬧的狂歡,跟著Io逛逛絕對沒錯,他什么都會帶你嘗試一遍。和他在一起,你可能會有最美妙刺激的體驗,但你老爸的車也可能變成一堆廢銅爛鐵。不過,無論發(fā)生什么,你都決不會無聊。正如本頁最上方Ferris所說,沒那么多清規(guī)戒律束手束腳。 第三周:Prolog Prolog這門語言有時特別聰明,有時又特別令人失望。只有當你知道如何提問時,你才會得到令人驚奇的答案?;叵胍幌隆队耆恕?這部電影。我還記得片中的主角Raymond,他在前一晚讀過一本電話簿后便可以背出Sally Dibbs的電話號碼,而他當時翻電話簿的時候根本沒有考慮是否需要記住這個號碼。對于Raymond和Prolog,我經常問出這樣兩個分量等同的問題,“他是怎么知道的?”和“他怎么不知道?”。只要你能以正確的方式表達你的問題,那么他將是一個知識源泉。 Prolog與前兩章談到的編程語言有較大的不同。Io和Ruby被稱為命令式語言(imperative language)。命令式語言就像是一本烹飪食譜,你需要精確地告訴計算機如何去完成一項工作。更高級別的命令式語言可能會給你帶來更多杠桿效力,即將多個比較長的步驟合并為一個步驟。不過從根本上說,你其實是在列出原料的購物清單,并描述烤蛋糕的詳細步驟。 第四周:Scala 我們不是綿羊?!舻妒?Edward Scala可以說是一個科學怪人,但卻不是一個怪物。想一想《剪刀手愛德華》 這部電影。 隨著對計算機程序的需求越來越復雜,計算機語言也在發(fā)展演化。每隔20年左右,老的編程范型就會變得不足以應對一些組織和表達思想的新要求。新的范型必定會涌現(xiàn)出來,但這并不是一個簡單的過程。每個新的編程范型都會引入一批編程語言,而不僅僅只是一種語言。最初的語言往往具有驚人的生命力,但也很不實用。比如面向對象編程語言Smalltalk或者函數式編程語言Lisp。接下來,其他范型的語言會加入一些新特性,允許開發(fā)人員在采用新概念的同時也可以安全地使用原先的老范型。例如Ada語言,它能夠在過程式語言中使用一些面向對象的核心思想,比如封裝。某些時候,一些混合語言恰恰是搭建在新老范型之間的一座實用的橋梁,比如C++。緊接著,你將看到一些可用于商業(yè)應用的編程語言,比如Java或C#。最后,你才會看到新范型的一些成熟且完整的實現(xiàn)。 Scala與Java的密切關系 Scala至少可以作為一座橋梁,也許還不僅如此。它與Java緊密集成,為人們提供了一個保護投資的機會,這體現(xiàn)在以下幾個方面。
第五周:Erlang 似Erlang這般充滿神秘感的語言寥寥無幾。這門并發(fā)語言既可將難事化易,也可將易事變難。在健壯企業(yè)部署方面,它的虛擬機BEAM是唯一堪與Java虛擬機匹敵的對手。它調用起來十分高效,甚至效率以外的東西它都很少考慮。因此,它的語法也不像Ruby那樣優(yōu)雅和簡潔。 Erlang其名,乍聽之下很怪。但你若知道,它既是Ericsson Language的縮寫,又恰是一位丹麥數學家的大名,你就不會再抱怨“這什么破名兒”了。作為電話網絡分析的數學奠基人,Agner Karup Erlang 可稱得上是赫赫有名。 1986年,Joe Armstrong在愛立信公司(Ericsson)開發(fā)了Erlang語言的首個版本。隨后的五年間,Erlang在他的精心雕琢下日漸完善。20世紀90年代整整十年間,Erlang的發(fā)展都不溫不火、時斷時續(xù),但到了2000年之后,它卻開始成為眾人矚目的焦點。兩個廣受歡迎的云數據庫CouchDB和SimpleDB,都是用Erlang開發(fā)出來的,此外,Erlang還是Facebook的聊天系統(tǒng)所采用的語言。正因為Erlang身懷可伸縮并發(fā)性和可靠性這兩項拿手絕技,而其他語言在這兩方面都力不從心,所以Erlang開始越來越多地成為人們談論的話題。 第六周:Clojure 做或不做,不要嘗試。 ——Yoda(尤達大師) Clojure是JVM上的Lisp實現(xiàn)。Lisp復雜強大,是計算機領域里最早和最新的編程語言之一。許多Lisp方言都曾嘗試擠進主流語言的行列,卻都無功而返。即便是對今天的開發(fā)者而言,其語法和編程模型也有些難以消化。即便如此,Lisp的特質仍叫人禁不住去重溫,去回味,新的方言層出不窮,一些編程領域最好的院校也用Lisp語言來幫助學生們塑造創(chuàng)新、開放的思維方式。 從很多方面來看,Clojure就像是睿智的功夫大師,神隱山脈的先知或是高深莫測的絕地師父。想想Yoda。在《星球大戰(zhàn)系列之五:帝國反擊戰(zhàn)》 中,Yoda是一位小巧、可愛的配角。他總是使用“倒裝”語序說話,但卻意味高深 ,就像Lisp所使用的前綴表示法(相信過一會兒你就會明白)。他小巧到難以辨別,就像Lisp的語法不過是一些括號和符號。但是和Yoda一樣,它絕非看上去那么簡單。Yoda和Lisp年歲都很高,擁有的智慧(例如開頭的引語)經過時間磨礪與烈火考驗。Lisp宏和高階編程單元如同Yoda掌握的內在原力,看似無人能掌控。從許多角度講, Lisp開創(chuàng)了一切。在深入Clojure之前,讓我們先來談談Lisp,然后再來了解Clojure的激動人心之處。 第七周:Haskell 邏輯是草地上幾只吱吱作聲的小鳥在鳴叫。 ——Spock 對于很多函數式編程的忠實擁躉來說,Haskell 象征著純潔和自由。它的功能豐富且強大,但擁有這些功能是需要付出一定代價的。你不可能輕易地就掌握這門語言,因為Haskell 會迫使你去了解關于函數式編程的全部內容。想想《星際迷航》的Spock吧,他上面說的那句話 很有代表性,完美地結合了邏輯和真理。他性格中擁有的那種堅定的純潔性,這使他得到了幾代人的愛戴。當Scala、Erlang和Clojure還允許你少量使用命令式編程概念的時候,Haskell卻沒有留下任何的回旋余地。在使用Haskell做I/O操作或狀態(tài)累積(accumulate state)時,你將遇到這門純函數語言所帶來的挑戰(zhàn)。 和以往一樣,如果想了解一門語言為何包含那些妥協(xié)方案,就應該從它的歷史開始。在20世紀80年代中前期,純函數編程領域涌現(xiàn)出了多門語言。純函數式編程和我們曾在Clojure語言中見到過的惰性處理(lazy processing)等關鍵概念引領著新研究的方向。1987 年的“函數式編程語言與計算機體系結構大會”(Functional Programming Languages and Computer Architecture)成立了一個小組,決定建立一個關于純函數編程語言的開放標準。Haskell就出自于這個小組,它于1990年誕生并于1998年重新修訂。目前的標準是Haskell 98,經過多次修訂,包括一份Haskell 98 標準的修訂版和一個稱為Haskell Prime的新版本定義。 因此,Haskell是一門從開始就按照純函數式編程思想構建的語言,它結合了一些最好的函數式語言思想,并著重于支持惰性處理。 和Scala一樣,Haskell也是一門強類型定義的靜態(tài)類型語言。它的類型模型基于推斷理論(inferred)并被公認為是函數語言中最高效的類型系統(tǒng)之一。你會發(fā)現(xiàn)該類型系統(tǒng)支持多態(tài)語義并有助于人們作出十分整潔清晰的設計。 |
|
來自: 看見就非常 > 《軟件開發(fā)》