複製鏈接
請複製以下鏈接發送給好友

Scala

(計算機編程語言)

鎖定
Scala是一門多範式的編程語言,一種類似java的編程語言 [1]  ,設計初衷是實現可伸縮的語言 [2]  、並集成面向對象編程函數式編程的各種特性。Scala是一種純粹的面嚮對象語言,因為每個值都是一個對象。對象的類型和行為由類和特徵描述。類可以通過子類化和使用靈活的基於mixin的組合機制作為多繼承的乾淨替代來擴展。 [4] 
中文名
Scala
上線時間
2001年
最近更新時間
2023年1月20日
開發商
EPFL
運行平台
Windows、LinuxMacOS [5] 
最新版本
3.2.2 [5] 

Scala產生背景

Scala是一種通用編程語言。它由Martin Odersky創建和開發。Martin於2001年在洛桑聯邦理工學院(EPFL)開始研究Scala。它於2004年1月20日正式發佈。 [6] 

Scala發展歷史

聯邦理工學院洛桑(EPFL)的Martin Odersky於2001年基於Funnel的工作開始設計Scala。Funnel是把函數式編程思想和Petri網相結合的一種編程語言。Odersky先前的工作是Generic Javajavac(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不是Java的擴展,但它完全可以與Java互操作。在編譯時,Scala文件將轉換為Java字節碼並在JVM(Java虛擬機)上運行。Scala被設計成面向對象和函數式的。它是一種純粹的面嚮對象語言。scala的名字來源於單詞scalable,意思是它可以隨着用户的需求而增長。 [6] 

Scala版本記錄

主要版本
版本
發佈日期
2.0
2006年3月12日
2.1.8
2006年8月23日
2.3.0
2006年11月
2.4.0
2007年3月9日
2.5.0
2007年5月2日
2.6.0
2007年7月27日
2.7.0
2008年2月7日
2.8.0
2010年7月14日
2.9.0 [6] 
2011年5月12日
3.2.2 [5] 
2023年1月20日

Scala語言特點

Scala得以提供一些出眾的特性,包括:
面向對象風格
函數式風格;
更高層的併發模型
Scala把Erlang風格的基於actor的併發帶進了JVM。開發者可以利用Scala的actor模型在JVM上設計具伸縮性的併發應用程序,它會自動獲得多核心處理器帶來的優勢,而不必依照複雜的Java線程模型來編寫程序。
Scala是一種純面向對象的語言,每一個值都是對象。對象的數據類型以及行為由類和特徵(Trait)描述。類抽象機制的擴展有兩種途徑。一種途徑是子類繼承,另一種途徑是靈活的混入(Mixin)機制。這兩種途徑能避免多重繼承的種種問題。 [3] 
輕量級的函數語法
高階;
嵌套;
局部套用(Currying);
匿名;
Scala也是一種函數式語言,其函數也能當成值來使用。Scala提供了輕量級的語法用以定義匿名函數,支持高階函數,允許嵌套多層函數,並支持柯里化 。Scala的Case Class及其內置的模式匹配相當於函數式編程語言中常用的代數類型(Algebraic Type)。 [3] 
更進一步,程序員可以利用Scala的模式匹配,編寫類似正則表達式的代碼處理XML數據。在這些情形中,順序容器的推導式(comprehension)功能對編寫公式化查詢非常有用。
由於JVM不支持尾部遞歸,Scala也不能完全支持尾部遞歸優化。不過,在簡單的情況下,Scala編譯器可以把尾部遞歸優化成循環。
以下代碼以函數式風格實現了快速排序算法,可以與Erlang快速排序的例子做個比較:
def qsort(list: List[Int]): List[Int]=
list match{
case Nil => Nil
case pivot::tail =>
qsort(for(i <- tail if i < pivot)yield i)::: pivot :: qsort(for(i <- tail if i >= pivot)yield i)
}
靜態類型
Scala是具備類型系統,通過編譯時的檢查,保證代碼的安全性和一致性。類型系統具體支持以下特性:
泛型類,型變註釋(Variance Annotation),類型繼承結構的上限和下限,把類別和抽象類型作為對象成員,複合類型,引用自己時顯式指定類型,視圖,多態方法。 [3] 
擴展性
Scala的設計承認一個事實,即在實踐中,某個領域特定的應用程序開發往往需要特定於該領域的語言擴展。Scala提供了許多獨特的語言機制,可以以庫的形式輕易無縫添加新的語言結構
任何方法可用作前綴或後綴操作符,可以根據預期類型自動構造閉包。聯合使用以上兩個特性,可以定義新的語句而無須擴展語法也無須使用宏之類的元編程特性。 [3] 
與XML集成
可在Scala程序中直接書寫XML
可將XML轉換成Scala類

Scala運行環境

Scala運行於Java平台(Java虛擬機),併兼容現有的Java程序。它也能運行於Java ME, CLDC(Java Platform, Micro Edition Connected Limited Device Configuration)上。還有另一.NET平台的實現,不過該版本更新有些滯後。
Scala的編譯模型(獨立編譯,動態類加載)與Java和C#一樣,所以Scala代碼可以調用Java類庫(對於.NET實現則可調用.NET類庫) 。
Scala包中包含了編譯器和類庫,以BSD許可證發佈。

Scala編程範例

以下是用Scala編寫的典型的Hello Scala中文程序:
object HelloScalachina extends Application { println("Hello, Scala中文!")}
object HelloScalachina {def main(args: Array[String]){ println("Hello, Scala中文!")}}
請注意它與Java的Hello Scala中文應用程序有哪些相似之處。一個顯著區別在於,Scala版的Hello Scala中文程序沒有把任何東西標記為static,而是用object 關鍵字創建了一個單件。
假設該程序保存為HelloScalachina.scala文件,接下來可以通過以下命令行進行編譯:
> scalac HelloScalachina.scala
若要運行:
> scala -classpath . HelloScalachina
這與編譯和運行Java的“Hello Scala中文”程序是不是很像,事實上,Scala的編譯和執行模型與Java是等效的,因而它也兼容於Java的構建工具,比如Ant.
直接使用Scala解釋器也可以運行該程序,使用選項-i (從文件加載代碼)和選項-e (若要運行額外的代碼,就得實際執行HelloScalachina對象的方法)即可:
> scala -i HelloScalachina.scala -e 'HelloScalachina.main(null)'
參考資料