ClojureScript

緣由

JavaScript 的普及

在許多環境(例如瀏覽器)中,JavaScript 是唯一可程式化的技術。在其他環境(例如行動裝置)中,JavaScript 是最具可攜性的開發方法。而且 JavaScript 也廣泛用作擴充或腳本語言,例如在資料庫中用作擴充或索引語言。

JavaScript 並不穩健

然而,即使是 JavaScript 的支持者也會承認它的缺點。語言語義中存在許多陰暗的角落。它並不是特別簡潔,也不適合元程式設計或擴充。最令人擔憂的是,編寫穩健的 JavaScript 程式雖然可能,但需要廣泛的紀律和慣例,而且慣例在開發團隊、社群和函式庫之間有所不同。

客戶端服務應用程式正在興起

JavaScript 的最初用途是為以文件/頁面為導向的網站新增互動功能,這些網站與網路的連結超文字設計密切相關。越來越多地使用 JavaScript 來建構客戶端服務應用程式(例如 Google 的應用程式),其中 JavaScript 代表一個持續的邏輯、資料和 UI,連接到一個或多個網路可存取的服務。此類應用程式對其託管的 JavaScript 部分提出了更高的要求。

JavaScript 引擎效能提升

隨著 JavaScript 被要求做越來越多的事情,JavaScript 引擎已從簡單的直譯器轉變為相當複雜且高效能的執行平台,其中涉及原生程式碼產生以及經典和新穎的動態語言最佳化。總體而言,這些引擎專門針對 JavaScript 語義和執行,也就是說,它們不如 JVM 和 CLR 那樣通用。

Google 引領潮流

作為客戶端服務應用程式的領先供應商,擁有龐大的資源和對網路託管應用程式的既得利益,Google 在此領域擁有尖端技術。從 V8 JS 引擎到整個程式最佳化的共生組合 Closure 函式庫和 Closure 編譯器,Google 開放了此領域中最先進的技術。值得了解並利用他們提供的技術。

函式庫問題

隨著應用程式被要求做更多的事情,開發人員將尋求使用更多、更大的函式庫。但是,許多目標平台都受到記憶體限制或網路連線的限制,因此存在很大的縮減程式碼大小的壓力。縮減程式碼使每個函式庫變小,但是僅縮減程式碼仍然會導致程式碼大小等於縮減後的函式庫大小之總和。然而,應用程式很少使用其所消耗的函式庫中的所有程式碼。整個程式最佳化可以用於建構一個應用程式,其程式碼大小足跡僅包含實際使用的程式碼,而與所使用的函式庫數量或大小無關。這是 Google Closure 函式庫和編譯器組合所採取的策略。

機會

一個具有廣泛普及性、可攜性、多廠商支援、最佳化競賽、精巧工具、在所有新設備上實作的開發平台,以及對更豐富、更複雜的應用程式的需求 – 開發人員還想要什麼?一種不同的語言,就是這樣。雖然正在努力改進 JavaScript,但您無法及時顯著改進具有廣泛普及性的東西 – 您改進的版本在很長一段時間內,即使不是永遠,也不會具有相同的普及性。因此,JavaScript *目前的存在形式*是既定的,並成為目標,而不是來源語言。

ClojureScript

ClojureScript 試圖透過以穩健、簡潔且功能強大的程式語言 Clojure 取代 JavaScript,來解決客戶端/嵌入式應用程式開發中較弱的環節。在其實作中,ClojureScript 採用了 Google Closure 函式庫和編譯器的策略,並能夠有效地利用這兩種工具,從而獲得一個大型、生產品質的函式庫和整個程式最佳化。ClojureScript 將 Clojure 的豐富資料結構集、函數式程式設計、巨集、讀取器、解構、多型結構、狀態紀律和許多其他功能帶到 JavaScript 可觸及的每個地方。