Scala 概述

pythopen 9年前發布 | 68K 次閱讀 Scala Scala開發

摘要

Scala 是一種融合了面向對象和函數式編程的靜態類型語言,他被定位為構建組件及組件系統。本文是 Scala 語言的概述,適合于理解編程方法和熟悉程序語言設計的讀者閱讀。

1 簡介

真正的組件系統,一直是軟件業一個近乎虛幻(elusive)的目標。從理想的角度看,軟件應該可以使用組件庫中預先設計好組件的構建,一如硬件可以用預制的芯片進行組裝。然而現實中,任何軟件中都有很大一部分是用 “從頭開始”(“from scratch”)的方式編寫的,正因為如此,軟件開發迄今為止仍然是一種工藝(Craft)而沒有成為工業。

這里所說的組件是指軟件的某種部件(parts),他們可以被更大的部件或整個應用以某種形式所調用;組件可以有很多形式,如:模塊(modules)、類(classes)、框架(frameworks)、過程(processes)或 web services。其代碼規模也可以從幾行到成百上千行。他們可以與其他組件以很多方式相連接,包括聚合、參數傳遞、繼承、遠程調用及消息傳遞等。

我們始終認為,基于組件的軟件開發一直以來缺乏進展,很大程度上是由于我們用來定義和集成各種組件的編程語言本身的缺陷。絕大部分編程語言為組件的抽象和編寫(composite)提供的支持極為有限,這一點在 Java 或者 C# 這種靜態類型語言中尤為明顯,恰恰當今的大部分組件系統都是由他們寫成的。

(瑞士)洛桑聯邦理工學院(EPFL)的程序設計實驗室從 2001 年開始研發 Scala,并于 2004 年 1 月發布了基于 JVM 的版本,6 月又發布了基于 .NET 的版本。Scala 的第二版在 2006 年 3 月發布,這是一個改進的版本,也就是本文描述內容所基于的版本。

Scala 工作起源于研究更好地支持組件開發的編程語言,我們有兩個假設希望通過 Scala 進行驗證:首先,我們認為一種適合于組件系統的編程語言應該具有某種可擴展性(scalable),也就是說:相同的概念可以既適用于描述小型部件,也同樣適用于描述大型部件。因此,我們專注于組件的抽象、組成和分解的機制,而非加入一整套基本語法結構來描述組件,因為這樣做很可能在某種規模的組件層面上有效,而在另一個規模的層面上卻無效。其次,我們認為可擴展的組件支持可以來自于這樣一種編程語言:它能夠統一并進一步泛化(generalize)面向對象編程和函數式編程這兩種編程模式。迄今為止,在靜態類型語言中(Scala 屬于其中之一),這兩個范式差距是很大的。(很顯然這里所說 “Scala 屬于其中之一” 并非是指 Scala 中這兩種編程模式也存在很大差異,而是在表明把 Scala 設計成為靜態類型語言的意義所在 —— 譯注)

為驗證我們的假設,需要能夠真正用于設計組件和組件系統,因為只有得到用戶社區的正式應用才能說明 Scala 語言所體現的這些概念是否在設計組件系統時真正有效。為了使用戶更容易采用這種新語言,它必須能很好的與現有平臺和組件相整合。因此 Scala 被設計成為能夠與 Java 和 C# 很好的工作在一起,他采納了這兩種語言的主要語法和類型系統。當然,為了獲得真正的進步,也必須拋棄很多固有的傳統,這也就是為什么 Scala 并不是 Java 的超集:有些功能被去掉了,另一些概念被重新解釋,以便獲得一致性。

盡管 Scala 的語法刻意地遵守傳統,但其類型系統至少在三方面有新的突破:首先,抽象類型定義和路徑依賴類型(path-dependent types)將 νObj Calculus [36] 應用到了具體的語言設計上。其次,模塊化的 mixin 組合方式(modular mixin composition)結合了 mixins 和 traits 的優勢。第三,視圖(views)的概念使組件得以按照模塊化的方式被使用。

本文其余部分給出了 Scala 的概述,按照下列幾個關鍵方面進行組織:

  • Scala 程序與 Java 在很多方面十分相像,并且可以與 Java 程序無縫銜接(第 2 節)
  • Scala 有一個統一的對象模型,這意味著所有的值都是對象,所有的操作都是方法調用(第 3 節)
  • Scala 是一個函數式語言,這意味著函數是“一等公民”的值對象(first-class values)(第 4 節)
  • Scala 有統一和強有力的抽象概念來描述類型和值(第 5 節)
  • Scala 有靈活的,模塊化的 mixin 組合構造用于編寫類和特征(traits) (第 6 節)
  • 它允許使用模式匹配來對對象進行分解(decomposition)(第 7 節)
  • 模式(Pattern)和表達式被進一步泛化,用于對 XML 文檔的自然處理(第 8 節)
  • Scala 支持通過視圖(views)對組件進行外部擴展(第 9 節)

最后第十節討論相關工作,第十一節是結論。

本文是 Scala 語言的高層概括,主要面向對程序設計語言有一定知識的讀者,它既不是簡化版的 Scala 語言參考,也不是一個教程。完整的語言參考可以參見《Scala 語言規范》[35],教程則可參見 [34,18] 等。

項目主頁:http://www.baiduhome.net/lib/view/home/1421985021562

 本文由用戶 pythopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!