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應用框架: