scala 簡介
scala 是 scalable language 的簡寫,是一種類似 java 的面向對象的函數式編程語言,設計初衷是要集成面向對象編程和函數式編程的各種特性。
聯邦理工學院洛桑(epfl)的martin odersky于2001年基于funnel的工作開始設計scala。
funnel是把函數式編程思想和petri網相結合的一種編程語言。
odersky先前的工作是generic java和javac(sun java編譯器)。java平臺的scala于2003年底/2004年初發布。.net平臺的scala發布于2004年6月。該語言第二個版本,v2.0,發布于2006年3月。
截至2009年9月,最新版本是版本2.7.6 。scala 2.8預計的特性包括重寫的scala類庫(scala collections library)、方法的命名參數和默認參數、包對象(package object),以及continuation。
2009年4月,twitter宣布他們已經把大部分后端程序從ruby遷移到scala,其余部分也打算要遷移。此外, wattzon已經公開宣稱,其整個平臺都已經是基于scala基礎設施編寫的。
1. scala 特性
1) 面向對象特性
scala是一種純面向對象的語言,每個值都是對象。對象的數據類型以及行為由類和特質描述。
類抽象機制的擴展有兩種途徑:一種途徑是子類繼承,另一種途徑是靈活的混入機制。這兩種途徑能避免多重繼承的種種問題。
2) 函數式編程
scala也是一種函數式語言,其函數也能當成值來使用。scala提供了輕量級的語法用以定義匿名函數,支持高階函數,允許嵌套多層函數,并支持柯里化。scala的case class及其內置的模式匹配相當于函數式編程語言中常用的代數類型。
更進一步,程序員可以利用scala的模式匹配,編寫類似正則表達式的代碼處理xml數據。
3) 靜態類型
scala具備類型系統,通過編譯時檢查,保證代碼的安全性和一致性。類型系統具體支持以下特性:
- 泛型類
- 協變和逆變
- 標注
- 類型參數的上下限約束
- 把類別和抽象類型作為對象成員
- 復合類型
- 引用自己時顯式指定類型
- 視圖
- 多態方法
4) 擴展性
scala的設計秉承一項事實,即在實踐中,某個領域特定的應用程序開發往往需要特定于該領域的語言擴展。scala提供了許多獨特的語言機制,可以以庫的形式輕易無縫添加新的語言結構:
- 任何方法可用作前綴或后綴操作符
- 可以根據預期類型自動構造閉包。
5) 并發性
scala使用actor作為其并發模型,actor是類似線程的實體,通過郵箱發收消息。actor可以復用線程,因此可以在程序中可以使用數百萬個actor,而線程只能創建數千個。在2.10之后的版本中,使用akka作為其默認actor實現。
2. 誰使用了 scala
- 2009年4月,twitter宣布他們已經把大部分后端程序從ruby遷移到scala,其余部分也打算要遷移。
- 此外,wattzon已經公開宣稱,其整個平臺都已經是基于scala基礎設施編寫的。
- 瑞銀集團把scala用于一般產品中。
- coursera把scala作為服務器語言使用。
3. scala web 框架
以下列出了兩個目前比較流行的 scala 的 web應用框架:
- lift 框架
- play 框架