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 框架

#