IT资讯 Joker:Go 编写的 Clojure 解释型方言

teymur · 2021-09-03 10:00:06 · 热度: 15

此 Joker 非彼 Joker,本文将要介绍的 Joker 是一门使用 Go 编写的 Clojure 解释型方言,同时也是一个 Clojure(Script) linter。

Joker 代码示例

1. 在 Clojure 中编写脚本

Joker:Go 编写的 Clojure 解释型方言

2. 即时检查 Clojure(Script) 代码

Joker:Go 编写的 Clojure 解释型方言

特性

  • 拥有快速的启动时间
  • 提高明确的错误消息和堆栈跟踪
  • 支持发送 HTTP 请求、读取和解析 JSON、使用文件系统、启动外部进程等
  • 支持所有主流编辑器
  • 自动检查语法错误、函数数量不匹配、无法解析的符号、未使用的命名空间、变量、绑定等
  • ……

根据文档的说明,Joker 的目标包括:

  • 适用于编写脚本(并且具备轻量级、快速启动的特性)。作者表示这是 Clojure 不擅长的事情,也是他试图解决的个人问题。
  • 对用户友好。反馈良好的错误消息和堆栈跟踪对于 程序员 的幸福和生产力绝对至关重要。
  • 为 Clojure 及其方言提供一些工具。Joker 具有 linter 模式,可用于对 Joker、Clojure 和 ClojureScript 代码进行 linting,它会捕获一些基本错误。Joker 还可以对 Clojure 代码进行格式化(查看  format mode)或提供 EDN 数据结构。例如,以下命令可用于漂亮地打印 EDN 数据结构(从标准输入读取):
joker --hashmap-threshold -1 -e "(pprint (read))"
  • 尽可能地(在语法和语义上)接近 Clojure。Joker 应该真正成为 Clojure 的方言,而不是受 Clojure 启发的语言。也就是说,Clo​​jure 的许多特性是 Joker 没有也永远不会拥有的。但 Joker 会具备与 Clojure 接近但只适用于自身的特性。

Joker 也罗列了两个不关注的目标:

  • 性能。作者表示,如果使用者注重性能,请直接使用 Clojure,因为 Joker 只是解释器的一个简单实现,他没打算把优先级放在提升性能上。
  • 拥有所有 Clojure 特性。作者表示,由于使用了不同的宿主语言(Go 与 Java),Clojure 的某些特性无法在 Joker 实现。至于其他特性,他认为对于他想到的 Joker 使用场景来说并不重要。

语法对比

Joker type Corresponding Go type
BigFloat big.Float (see below)
BigInt big.Int
Boolean bool
Char rune
Double float64
Int int
Keyword n/a
Nil n/a
Ratio big.Rat
Regex regexp.Regexp
String string
Symbol n/a
Time time.Time
Joker type Corresponding Clojure type
ArrayMap PersistentArrayMap
MapSet PersistentHashSet (or hypothetical PersistentArraySet, depending on which kind of underlying map is used)
HashMap PersistentHashMap
List PersistentList
Vector PersistentVector

安装

在 macOS 上,安装 Joker 最便捷的方法是使用 Homebrew:

brew install candid82/brew/joker

如果使用 Linuxbrew,可以在 Linux 上使用相同的命令。

如果使用 Arch Linux,提供了 AUR 包

如果使用 Nix,可以用下面的方式安装 Joker

nix-env -i joker

在其他平台上(或者希望手动安装),为对应的平台下载预编译的二进制文件并将其放在 PATH 中。

当然还可以从源代码构建 Joker。

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册