Scala是個有趣的語言

       經常讀我的博客的人應該知道,我最喜歡的編程語言是Haskell。我喜歡函數式編程,Haskell是一個能把函數式編程推向極致的語言。雖然如 此,我仍然時刻關注着其它新興的和即將產生的編程語言,特別是函數式的編程語言,所以,當Scala誕生之初我就知道了這種語言。當時,我粗略的對它瞭解 了一下,並不是很喜歡;我感覺它的那些語法對於我的口味來說過於甜膩,而且這種語言看起來異常的複雜。然而,一些我很尊敬的人都喜歡這種語言,所以我就再 次的看了看。我的評論並不是基於對這種語言的一個全面的瞭解之上,只是我通過幾周的閱讀和實驗得到的收穫。不管怎樣,我已經有足夠的認識來聲 明,Scala是個有趣的語言,值得去研究,特別是當你有Haskell編程背景的情況下。我使用的是一本“階梯教程”(Programming In Scala by Odersky et al),這本書寫的非常好,我全力的推薦大家讀一下。

 

       我想學一種新的編程語言主要有兩個原因。一個是我想找一種跟目前我使用的語言不同的語言,我想尋找一種另外的編程體驗。另一個是我想找一種具有很多我從沒見過的有趣的新特徵的語言。Scala的出現完全滿足了我的苛求。.

本質上來講,Scala是一種運行在JVM之上的語言,它很快,使用它我可以做圖形界面編程,web編程(用它的Lift框架),和移動設備編程 (使用Android,我也知道讓Scala程序在Android上運行並不是一個很容易的事)。Scala在這些領域出現的時間比Haskell早的 多。我期望Haskell能最終趕上,但是我現在就已經喜歡上了寫這些類型的程序了。

        從理論的角度來看,Scala的訴求是靜態類型背景下的函數式編程和麪向對象編程的組合。這可不容易做到。在動態語言裏倒是容易些(例如Lisp使 用CLOS),而靜態類型會使事情變得非常的複雜,尤其是子類型化和繼承方面。Haskell可部分的支持面向對象編程(特別是使用類型類和現有類型), 但我在Haskell裏沒有發現面向對象風格的繼承模型,儘管這是十分有用的。Scala有一個非常複雜的面向對象系統,還包括一些諸如顯式sub-和 supertype標記,協方差(covariance)和反變(contravariance)標記,等等。這些都超越了我所見過的其它的面向對象的編 程語言。實際上,Scala實現了把所有的函數性特徵都作爲對象,所以把它稱作一種對象-函數式語言並不準確,不如稱作爲超級面嚮對象語言更合適。

        我認爲Scala的面向對象不是Haskell能比的;它是對於它的這種範式上的一個最佳案例。(我這裏忽略掉了那些類型依賴的函數式語言,諸如 Agda/Coq/Epigram,我知道它們,但基本上它們已經不再被當成一種用來做普通編程的語言了。)對於在靜態類型的環境中,是否對象已經超過函 數變成一種更基礎的結構,我並不清楚。在動態類型語言中,你可以由函數得到對象(可以假設函數就是閉包),或者你可以由對象得到函數,所以兩種觀念是可以 相互轉換的。不論這是不是一種使用靜態類型的案例,我想,用兩種語言從不同的方向來考慮這個問題是件很有趣的事情。另一方面,我曾學習過 Smalltalk的面向對象特徵,我不得不說,我從沒見過第二個靜態類型的語言具有Smalltalk這樣優雅的簡單消息傳輸模型。再一方面,我更希望 用Scala而不是Smalltalk來寫一個大型程序。(並且,如果你真的想直接進行消息傳輸時,Scala也有Actors類庫來支持你。)

         另一個Scala裏我喜歡的東西,也是Haskell共有的東西,就是他們都有學院理論根源。當你在設計一種具有深奧的類型系統的語言時,瞭解一些 類型理論會非常的有幫助。Scala和Haskell的設計者都清楚這一點,這也就是在這些語言裏有很多高質量的特性的原因。我希望有一天那些把希曼式實 用主義當作理論基礎的人會閉嘴,因爲事實證明通過學院派設計出來的語言纔是解決現實問題的上上之選。

        我會一直關注着Scala,我希望能對它瞭解的更多。但我仍然喜歡Haskell,我從來不會打算放棄它。 ;-)

 

 

翻譯來源:外刊IT評論

 

 

;)

發佈了2 篇原創文章 · 獲贊 0 · 訪問量 3610
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章