伴隨 Java 8 的發佈,Oracle 也一同發佈了 Nashorn,它是在 Java 虛擬機上運行 Javascript 語言的一個引擎。Nashorn 的設計是為了替換最初的運行在 JVM 上的項目——被稱之為 Rhino(Nashorn 是 rhino 的德語中的詞語)。 Nashorn 完 ...
伴隨 Java 8 的發佈,Oracle 也一同發佈了 Nashorn,它是在 Java 虛擬機上運行 Javascript 語言的一個引擎。Nashorn 的設計是為了替換最初的運行在 JVM 上的項目——被稱之為 Rhino(Nashorn 是 rhino 的德語中的詞語)。
Nashorn 完全重寫和實現,謀求和 Java 的高效的交互性,精準地保證與 JavaScript ECMA 規範的一致性。Nashorn 是第一個達到 100% 遵從 JavaScript 的規範,並且在絕大部分工作量上運行速度是 Rhino 的20倍之多。
介紹Nashorn
在JVM 上運行的非 Java 語言
實際上,有很多非 Java 的語言運行在 JVM 上,有很多語言看起來不同與Java,例如 JavaScript。這就使 Java 和 JVM 保持松耦合提供了可能,並且真正通過類文件格式的定義進行交互。 這裡可以通過兩種不同的方式實現:
- 源語言具有在Java中實現的解釋器。解釋器在 JVM上 運行,並執行以源語言編寫的程式。
- 源語言附帶有一個編譯器,它從源語言代碼的單元生成類文件。生成的編譯類文件然後在JVM上直接執行,這通常需要一些額外的語言特定的運行時支持。
Nashorn 採用第二種方法, 但是增加了細化,編譯器在運行時內部,所以JavaScript 源代碼從不在程式執行開始之前編譯。 這意味著不是專門為 Nashorn 編寫的 JavaScript 仍然可以輕鬆地部署在平臺上。
註意:
Nashorn 不像許多其他 JVM 語言(如JRuby),因為它不實現任何形式的解釋>器。 Nashorn 總是將 JavaScript 編譯為 JVM 位元組碼,並直接執行位元組碼。
Nashorn 的動機
Nashorn 在 Java 和 JVM 生態系統中提供多種用途。
- 首先,它為 JavaScript 開發人員提供了一個可行的環境來發掘 JVM 的強大功能。
- 第二,它使公司能夠繼續利用他們對 Java 技術的現有投資,同時另外採用 JavaScript 作為開發語言。
- 最後,它為 HotSpot JVM 中的高級虛擬機技術提供了一個偉大的工程展示。
隨著 JavaScript 的不斷增長和應用,從瀏覽器的傳統首頁擴展到更通用的計算和伺服器端,Nashorn 在現有的堅如磐石的Java生態系統和有前途的新技術之間架起了巨大的橋梁。
在 Nashorn 下執行 JavaScript
接下來會介紹 Nashorn 的運行環境,還有兩種執行 JavaScript 的方式(這兩種方式都會在 JAVA_HOME 環境變數下的 bin 目錄里執行):
- jrunscript:執行以.js 結尾的 JavaScript 腳本
- jjs:一個更多功能的 shell - 適用於運行腳本和作為一個交互,實時代碼預覽功能環境以及探索 Nashorn 其他功能。