Scala十歲了
十年之前的 1 月 20 日,Michel Schinz 宣布了 Scala 編程語言的第一個實現。在宣布之時,Scala 被描述為“一種平滑地集成了面向對象編程和函數式編程的語言”,而且“是為以簡潔、優雅且類型安全的方式表達常見編程模式而設計的”。
當時是這么說的:
我們宣布,Scala 編程語言的第一個實現已經可用。Scala 平滑地集成了面向對象編程和函數式編程。它是為以簡潔、優雅且類型安全的方式表達常見編程模式而設計的。Scala 引入了一些創新性的語言構件。例如:
- 抽象類型和 mixin 統一了來自對象和模塊系統的理念。
- 類層次結構之上的模式匹配統一了函數式和面向對象的數據存取。它極大地簡化了 XML 樹的處理。
- 靈活的語法和類型系統支持構造高層的庫和新的領域特定語言。
與此同時,Scala 還兼容 Java。無需膠水代碼和額外聲明,Java 的類庫和框架都可以使用。
Scala 當前的實現運行在 JVM 上。它需要 JDK 1.4,可以在 Windows、MacOS、Linux、Solaris 及其他多數操作系統上運行。Scala 的一個 .net 版本正在開發之中。
盡管 .net 版本已經不再維護,但當時之所以要開發這個版本,其目標是提供一種能夠運行在這兩種虛擬機之上的、可以在不同操作系統間移植的公共語言。然而,隨著 JVM 的 JIT 的改進,以及對 Java 字節碼的依賴不斷的增加,到 Scala 2.10 發布時,.net 版本就中斷了。
Scala 將函數式編程帶入了主流 JVM 語言中,而且直接刺激了 Java 8 即將帶來的 lambda 表達式(往往被不正確地稱為閉包)和接口默認方法等特性。Scala 很早就通過函數和 Traits 提供了對這些特性的支持,它們為以更簡潔、可測試性更好的方式編程提供了新方法。
在 Scala 取得成功的同時,復雜性也隨之而來,因為這些特性是把雙刃劍,代碼的可讀性可謂冰火兩重天。Scala 允許將任何 Unicode 標識符用作方法名和函數(包括符號),標準 Scala 類庫已經發展到包含=:=、:+和:\等函數。Scala 的取舍是以潛在的可讀性損失為代價,改進編寫的靈活性。
最后,Scala 仍然把自己看作一門研究性語言,一直在嘗試新特性并棄用較舊的功能(比如原始的 Actors 包,它為 Scala 帶來了和 Go 語言的 coroutine 類似的聲望)。在不同版本之間,生成的字節碼也有所變化,這意味著為當前的 Scala 版本編譯的開源項目數量很有限,而且盡管 2.10 已經發布一年有余了,但是主要 Scala 版本之間的過度往往還是非常痛苦。
將于今年發布的 Java 8 會把 Scala 的一個特性子集帶向 JVM,那么看一下 Scala 下一步會添加什么特性,將會非常有趣。二進制兼容會給語言帶來穩定,但是看上去現在離二進制兼容之遙遠,幾乎和十年前一樣,不過時間會證明一切。
下一個十年,你認為 Scala 會走向何方呢?
<span id="shareA4" class="fl"> </span> </div>