Martin Fowler 指出:Java 技術的核心價值在於 JVM 平台,而非 Java 語言本身。JVM 解耦語言與運行時,催生了 200+ 種語言。Oracle 舉辦的 JVM 語言峰會推動跨語言協作。本系列聚焦三大現代 JVM 語言:Groovy、Scala、Clojure。
沒有銀彈語言。不同問題領域適合不同范式:
JVM 統一字節碼與類庫,使混合開發零成本。ThoughtWorks 專案常混用多語言,工具鏈全系支持。
從 Pecan Pascal 字節碼到 Java GC,平台能力增強倒推語言特性上層遷移。如 Groovy 2010 引入 memoize() 自動緩存函數結果,Java 後續引入高階函數使此模式原生化。學習下一代語言 = 預覽 Java 未來特性。
| 語言 | 類型系統 | 核心范式 | 設計哲學 |
|---|---|---|---|
| Groovy | 強動態 (可選靜態 @TypeChecked) | 命令式 OO + 函數式特性 | 21 世紀 Java 語法,平滑遷移,元編程強 |
| Scala | 強靜態 (類型推導極致) | 融合 OO 與函數式,偏好函數式 | 為 JVM 重新設計語法,橋接兩大范式 |
| Clojure | 強動態 | 純函數式 (不可變、STM) | Lisp 方言,義無反顧函數式,工程原則驅動 |
@TypeChecked
void typeChecking() {
List l = factory.getCollection("Stack-like")
l.add("foo")
def r = l.pop() // 編譯期檢查 pop() 存在性
}
開啟靜態檢查後失去部分動態特性,但提供安全網。
開發者身處多語言時代,掌握新語言擴展解決問題工具箱。即使堅守 Java,新特性亦會逐步回流。下篇將詳細比較三語言共性特性。