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