Scala 簡(jiǎn)介
Scala 是 Scalable Language 的簡(jiǎn)寫(xiě),是一門(mén)多范式的編程語(yǔ)言
聯(lián)邦理工學(xué)院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作開(kāi)始設(shè)計(jì)Scala。
Funnel是把函數(shù)式編程思想和Petri網(wǎng)相結(jié)合的一種編程語(yǔ)言。
Odersky先前的工作是Generic Java和javac(Sun Java編譯器)。Java平臺(tái)的Scala于2003年底/2004年初發(fā)布。.NET平臺(tái)的Scala發(fā)布于2004年6月。該語(yǔ)言第二個(gè)版本,v2.0,發(fā)布于2006年3月。
截至2009年9月,最新版本是版本2.7.6 。Scala 2.8預(yù)計(jì)的特性包括重寫(xiě)的Scala類(lèi)庫(kù)(Scala collections library)、方法的命名參數(shù)和默認(rèn)參數(shù)、包對(duì)象(package object),以及Continuation。
2009年4月,Twitter宣布他們已經(jīng)把大部分后端程序從Ruby遷移到Scala,其余部分也打算要遷移。此外, Wattzon已經(jīng)公開(kāi)宣稱(chēng),其整個(gè)平臺(tái)都已經(jīng)是基于Scala基礎(chǔ)設(shè)施編寫(xiě)的。
Scala 特性
面向?qū)ο筇匦?/h3>
Scala是一種純面向?qū)ο蟮恼Z(yǔ)言,每個(gè)值都是對(duì)象。對(duì)象的數(shù)據(jù)類(lèi)型以及行為由類(lèi)和特質(zhì)描述。
類(lèi)抽象機(jī)制的擴(kuò)展有兩種途徑:一種途徑是子類(lèi)繼承,另一種途徑是靈活的混入機(jī)制。這兩種途徑能避免多重繼承的種種問(wèn)題。
函數(shù)式編程
Scala也是一種函數(shù)式語(yǔ)言,其函數(shù)也能當(dāng)成值來(lái)使用。Scala提供了輕量級(jí)的語(yǔ)法用以定義匿名函數(shù),支持高階函數(shù),允許嵌套多層函數(shù),并支持柯里化。Scala的case class及其內(nèi)置的模式匹配相當(dāng)于函數(shù)式編程語(yǔ)言中常用的代數(shù)類(lèi)型。
更進(jìn)一步,程序員可以利用Scala的模式匹配,編寫(xiě)類(lèi)似正則表達(dá)式的代碼處理XML數(shù)據(jù)。
靜態(tài)類(lèi)型
Scala具備類(lèi)型系統(tǒng),通過(guò)編譯時(shí)檢查,保證代碼的安全性和一致性。類(lèi)型系統(tǒng)具體支持以下特性:
泛型類(lèi)
協(xié)變和逆變
標(biāo)注
類(lèi)型參數(shù)的上下限約束
把類(lèi)別和抽象類(lèi)型作為對(duì)象成員
復(fù)合類(lèi)型
引用自己時(shí)顯式指定類(lèi)型
視圖
多態(tài)方法
擴(kuò)展性
Scala的設(shè)計(jì)秉承一項(xiàng)事實(shí),即在實(shí)踐中,某個(gè)領(lǐng)域特定的應(yīng)用程序開(kāi)發(fā)往往需要特定于該領(lǐng)域的語(yǔ)言擴(kuò)展。Scala提供了許多獨(dú)特的語(yǔ)言機(jī)制,可以以庫(kù)的形式輕易無(wú)縫添加新的語(yǔ)言結(jié)構(gòu):
任何方法可用作前綴或后綴操作符
可以根據(jù)預(yù)期類(lèi)型自動(dòng)構(gòu)造閉包。
并發(fā)性
Scala使用Actor作為其并發(fā)模型,Actor是類(lèi)似線程的實(shí)體,通過(guò)郵箱發(fā)收消息。Actor可以復(fù)用線程,因此可以在程序中可以使用數(shù)百萬(wàn)個(gè)Actor,而線程只能創(chuàng)建數(shù)千個(gè)。在2.10之后的版本中,使用Akka作為其默認(rèn)Actor實(shí)現(xiàn)。
誰(shuí)使用了 Scala
2009年4月,Twitter宣布他們已經(jīng)把大部分后端程序從Ruby遷移到Scala,其余部分也打算要遷移。
此外,Wattzon已經(jīng)公開(kāi)宣稱(chēng),其整個(gè)平臺(tái)都已經(jīng)是基于Scala基礎(chǔ)設(shè)施編寫(xiě)的。
瑞銀集團(tuán)把Scala用于一般產(chǎn)品中。
Coursera把Scala作為服務(wù)器語(yǔ)言使用。
Scala Web 框架
以下列出了兩個(gè)目前比較流行的 Scala 的 Web應(yīng)用框架:
Lift 框架
Play 框架