“Scala” 一個(gè)有趣的語(yǔ)言
本文摘選自博客:“Mike's World-O-Programming”,原文名為“Why Scala Is Interesting”全文如下:
常讀我的博客的人應(yīng)該知道,我最喜歡的編程語(yǔ)言是Haskell。我喜歡函數(shù)式編程,Haskell是一個(gè)能把函數(shù)式編程推向極致的語(yǔ)言。雖然如此,我仍然時(shí)刻關(guān)注著其它新興的和即將產(chǎn)生的編程語(yǔ)言,特別是函數(shù)式的編程語(yǔ)言,所以,當(dāng)Scala誕生之初我就知道了這種語(yǔ)言。當(dāng)時(shí),我粗略的對(duì)它了解了一下,并不是很喜歡;我感覺(jué)它的那些語(yǔ)法對(duì)于我的口味來(lái)說(shuō)過(guò)于甜膩,而且這種語(yǔ)言看起來(lái)異常的復(fù)雜。然而,一些我很尊敬的人都喜歡這種語(yǔ)言,所以我就再次的看了看。我的評(píng)論并不是基于對(duì)這種語(yǔ)言的一個(gè)全面的了解之上,只是我通過(guò)幾周的閱讀和實(shí)驗(yàn)得到的收獲。不管怎樣,我已經(jīng)有足夠的認(rèn)識(shí)來(lái)聲明,Scala是個(gè)有趣的語(yǔ)言,值得去研究,特別是當(dāng)你有Haskell編程背景的情況下。我使用的是一本“階梯教程”(Programming In Scala by Odersky et al),這本書(shū)寫(xiě)的非常好,我全力的推薦大家讀一下。
我想學(xué)一種新的編程語(yǔ)言主要有兩個(gè)原因。一個(gè)是我想找一種跟目前我使用的語(yǔ)言不同的語(yǔ)言,我想尋找一種另外的編程體驗(yàn)。另一個(gè)是我想找一種具有很多我從沒(méi)見(jiàn)過(guò)的有趣的新特征的語(yǔ)言。Scala的出現(xiàn)完全滿足了我的苛求。.
本質(zhì)上來(lái)講,Scala是一種運(yùn)行在JVM之上的語(yǔ)言,它很快,使用它我可以做圖形界面編程,web編程(用它的Lift框架),和移動(dòng)設(shè)備編程(使用Android,我也知道讓Scala程序在Android上運(yùn)行并不是一個(gè)很容易的事)。Scala在這些領(lǐng)域出現(xiàn)的時(shí)間比Haskell早的多。我期望Haskell能最終趕上,但是我現(xiàn)在就已經(jīng)喜歡上了寫(xiě)這些類型的程序了。
從理論的角度來(lái)看,Scala的訴求是靜態(tài)類型背景下的函數(shù)式編程和面向?qū)ο缶幊痰慕M合。這可不容易做到。在動(dòng)態(tài)語(yǔ)言里倒是容易些(例如Lisp使用CLOS),而靜態(tài)類型會(huì)使事情變得非常的復(fù)雜,尤其是子類型化和繼承方面。Haskell可部分的支持面向?qū)ο缶幊蹋ㄌ貏e是使用類型類和現(xiàn)有類型),但我在Haskell里沒(méi)有發(fā)現(xiàn)面向?qū)ο箫L(fēng)格的繼承模型,盡管這是十分有用的。Scala有一個(gè)非常復(fù)雜的面向?qū)ο笙到y(tǒng),還包括一些諸如顯式sub-和supertype標(biāo)記,協(xié)方差(covariance)和反變(contravariance)標(biāo)記,等等。這些都超越了我所見(jiàn)過(guò)的其它的面向?qū)ο蟮木幊陶Z(yǔ)言。實(shí)際上,Scala實(shí)現(xiàn)了把所有的函數(shù)性特征都作為對(duì)象,所以把它稱作一種對(duì)象-函數(shù)式語(yǔ)言并不準(zhǔn)確,不如稱作為超級(jí)面向?qū)ο笳Z(yǔ)言更合適。
我認(rèn)為Scala的面向?qū)ο蟛皇荋askell能比的;它是對(duì)于它的這種范式上的一個(gè)最佳案例。(我這里忽略掉了那些類型依賴的函數(shù)式語(yǔ)言,諸如Agda/Coq/Epigram,我知道它們,但基本上它們已經(jīng)不再被當(dāng)成一種用來(lái)做普通編程的語(yǔ)言了。)對(duì)于在靜態(tài)類型的環(huán)境中,是否對(duì)象已經(jīng)超過(guò)函數(shù)變成一種更基礎(chǔ)的結(jié)構(gòu),我并不清楚。在動(dòng)態(tài)類型語(yǔ)言中,你可以由函數(shù)得到對(duì)象(可以假設(shè)函數(shù)就是閉包),或者你可以由對(duì)象得到函數(shù),所以兩種觀念是可以相互轉(zhuǎn)換的。不論這是不是一種使用靜態(tài)類型的案例,我想,用兩種語(yǔ)言從不同的方向來(lái)考慮這個(gè)問(wèn)題是件很有趣的事情。另一方面,我曾學(xué)習(xí)過(guò)Smalltalk的面向?qū)ο筇卣鳎也坏貌徽f(shuō),我從沒(méi)見(jiàn)過(guò)第二個(gè)靜態(tài)類型的語(yǔ)言具有Smalltalk這樣優(yōu)雅的簡(jiǎn)單消息傳輸模型。再一方面,我更希望用Scala而不是Smalltalk來(lái)寫(xiě)一個(gè)大型程序。(并且,如果你真的想直接進(jìn)行消息傳輸時(shí),Scala也有Actors類庫(kù)來(lái)支持你。)
另一個(gè)Scala里我喜歡的東西,也是Haskell共有的東西,就是他們都有學(xué)院理論根源。當(dāng)你在設(shè)計(jì)一種具有深?yuàn)W的類型系統(tǒng)的語(yǔ)言時(shí),了解一些類型理論會(huì)非常的有幫助。Scala和Haskell的設(shè)計(jì)者都清楚這一點(diǎn),這也就是在這些語(yǔ)言里有很多高質(zhì)量的特性的原因。我希望有一天那些把希曼式實(shí)用主義當(dāng)作理論基礎(chǔ)的人會(huì)閉嘴,因?yàn)槭聦?shí)證明通過(guò)學(xué)院派設(shè)計(jì)出來(lái)的語(yǔ)言才是解決現(xiàn)實(shí)問(wèn)題的上上之選。
我會(huì)一直關(guān)注著Scala,我希望能對(duì)它了解的更多。但我仍然喜歡Haskell,我從來(lái)不會(huì)打算放棄它。
原文地址:http://mvanier.livejournal.com/3395.html
【編輯推薦】