Scala 簡介
Scala 是 Scalable Language 的簡寫,是一門多範式的程式語言
聯邦理工學院洛桑(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基礎設施編寫的。
Scala 特性
物件導向特性
Scala是一種純粹物件導向的語言,每個值都是物件。物件的資料類型以及行為由類別和特質描述。
類別抽象機制的擴展有兩種途徑:一種途徑是子類別繼承,另一種途徑是靈活的混入機制。這兩種途徑能避免多重繼承的種種問題。
函數式程式設計
Scala也是一種函數式語言,其函數也能當成值來使用。 Scala提供了輕量級的語法用以定義匿名函數,支援高階函數,允許嵌套多層函數,並支援柯里化。 Scala的case class及其內建的模式匹配相當於函數式程式語言中常用的代數類型。
更進一步,程式設計師可以利用Scala的模式匹配,編寫類似正規表示式的程式碼處理XML資料。
靜態型別
Scala具備型別系統,透過編譯時檢查,確保程式碼的安全性與一致性。類型系統具體支援以下特性:
泛型類別
#協變與逆變
標註
類型參數的上下限約束
#把類別和抽象型別當作物件成員
#複合型別
引用自己時明確指定型別
#多態方法
擴展性
Scala的設計秉承一項事實,即在實踐中,某個領域特定的應用程式開發往往需要特定於該領域的語言擴展。 Scala提供了許多獨特的語言機制,可以以庫的形式輕易無縫添加新的語言結構:
任何方法可用作前綴或後綴操作符
可以根據預期型別自動建構閉包。
並發性
Scala使用Actor作為其並發模型,Actor是類似執行緒的實體,透過郵件信箱發收訊息。 Actor可以重複使用線程,因此可以在程式中可以使用數百萬個Actor,而線程只能創建數千個。在2.10之後的版本中,使用Akka作為其預設Actor實作。
誰使用了Scala
2009年4月,Twitter宣布他們已經把大部分後端程式從Ruby遷移到Scala,其餘部分也打算要遷移。
此外,Wattzon已經公開宣稱,其整個平台都已經是基於Scala基礎設施編寫的。
瑞銀集團把Scala用於一般產品。
Coursera把Scala當作伺服器語言使用。
Scala Web 框架
以下列出了兩個目前比較流行的Scala 的Web應用框架:
Lift 框架
Play 框架