-
Scala
(計算機編程語言)
鎖定
Scala產生背景
Scala是一種通用編程語言。它由Martin Odersky創建和開發。Martin於2001年在洛桑聯邦理工學院(EPFL)開始研究Scala。它於2004年1月20日正式發佈。
[6]
Scala發展歷史
聯邦理工學院洛桑(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.
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日 |
2011年5月12日 | |
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)功能對編寫公式化查詢非常有用。
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)
}
靜態類型
擴展性
與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編程範例
以下是用Scala編寫的典型的Hello Scala中文程序:
object HelloScalachina extends Application { 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 HelloScalachina.scala -e 'HelloScalachina.main(null)'
- 參考資料
-
- 1. Language Specification .scala-lang[引用日期2014-12-23]
- 2. WHAT IS SCALA? A Scalable language .scala-lang[引用日期2014-12-23]
- 3. 編程語言 Scala .開源社區網[引用日期2012-08-18]
- 4. Introduction | Tour of Scala | Scala Documentation .Scala文檔.2020-01-05[引用日期2023-04-05]
- 5. Install | The Scala Programming Language .Scala文檔.2020-01-05[引用日期2023-04-05]
- 6. History of Scala - javatpoint .javatpoint.2020-01-05[引用日期2023-04-05]