Joker:Go 編寫的 Clojure 解釋型方言
此 Joker 非彼 Joker,本文將要介紹的 Joker 是一門使用 Go 編寫的 Clojure 解釋型方言,同時也是一個 Clojure(Script) linter。
Joker 代碼示例
1. 在 Clojure 中編寫腳本
2. 即時檢查 Clojure(Script) 代碼
特性
- 擁有快速的啟動時間
- 提高明確的錯誤消息和堆棧跟蹤
- 支持發(fā)送 HTTP 請求、讀取和解析 JSON、使用文件系統(tǒng)、啟動外部進程等
- 支持所有主流編輯器
- 自動檢查語法錯誤、函數(shù)數(shù)量不匹配、無法解析的符號、未使用的命名空間、變量、綁定等
- ……
根據(jù)文檔的說明,Joker 的目標(biāo)包括:
- 適用于編寫腳本(并且具備輕量級、快速啟動的特性)。作者表示這是 Clojure 不擅長的事情,也是他試圖解決的個人問題。
- 對用戶友好。反饋良好的錯誤消息和堆棧跟蹤對于程序員的幸福和生產(chǎn)力絕對至關(guān)重要。
- 為 Clojure 及其方言提供一些工具。Joker 具有 linter 模式,可用于對 Joker、Clojure 和 ClojureScript 代碼進行 linting,它會捕獲一些基本錯誤。Joker 還可以對 Clojure 代碼進行格式化(查看 format mode)或提供 EDN 數(shù)據(jù)結(jié)構(gòu)。例如,以下命令可用于漂亮地打印 EDN 數(shù)據(jù)結(jié)構(gòu)(從標(biāo)準(zhǔn)輸入讀取):
- joker --hashmap-threshold -1 -e "(pprint (read))"
- 盡可能地(在語法和語義上)接近 Clojure。Joker 應(yīng)該真正成為 Clojure 的方言,而不是受 Clojure 啟發(fā)的語言。也就是說,Clojure 的許多特性是 Joker 沒有也永遠不會擁有的。但 Joker 會具備與 Clojure 接近但只適用于自身的特性。
Joker 也羅列了兩個不關(guān)注的目標(biāo):
- 性能。作者表示,如果使用者注重性能,請直接使用 Clojure,因為 Joker 只是解釋器的一個簡單實現(xiàn),他沒打算把優(yōu)先級放在提升性能上。
- 擁有所有 Clojure 特性。作者表示,由于使用了不同的宿主語言(Go 與 Java),Clojure 的某些特性無法在 Joker 實現(xiàn)。至于其他特性,他認為對于他想到的 Joker 使用場景來說并不重要。
語法對比
安裝
在 macOS 上,安裝 Joker 最便捷的方法是使用 Homebrew:
- brew install candid82/brew/joker
- 如果使用 Linuxbrew,可以在 Linux 上使用相同的命令。
- 如果使用 Arch Linux,提供了 AUR 包。
- 如果使用 Nix,可以用下面的方式安裝 Joker
- nix-env -i joker
在其他平臺上(或者希望手動安裝),為對應(yīng)的平臺下載預(yù)編譯的二進制文件并將其放在 PATH 中。
當(dāng)然還可以從源代碼構(gòu)建 Joker。
本文轉(zhuǎn)自O(shè)SCHINA
本文標(biāo)題:Joker:Go 編寫的 Clojure 解釋型方言
本文地址:https://www.oschina.net/news/158495/joker-lang