歡迎您光臨本站 註冊首頁

「Scala」 一個有趣的語言

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  本文摘選自博客:「Mike's World-O-Programming」,原文名為「Why Scala Is Interesting」全文如下:

  常讀我的博客的人應該知道,我最喜歡的編程語言是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,我從來不會打算放棄它.

  原文地址:http://mvanier.livejournal.com/3395.html


[火星人 ] 「Scala」 一個有趣的語言已經有490次圍觀

http://coctec.com/docs/java/show-post-60186.html