Socket REPL,尤其是随着 prepl 的出现,似乎成为了推荐并且最可靠的 Clojure Repl 方法。
然而,目前启动 Socket REPL 的唯一方法是通过在 <{{-J}}> 选项中使用一个非常长的参数。例如,以下是启动节点 CLJS repl 的方式:
clojure -J-Dclojure.server.repl="{:port 5555 :accept cljs.server.node/repl :args [{:opts $(cat cljsc_opts.edn)}]}"
这里有几个问题,主要是与 {{-D}} 和 {{:args}} 向量的包装问题。更不用说用户可能不知道那个特定的 JVM 属性接受 edn 了。
所有这些细节似乎都是实现细节,启动器应该隐藏起来,目标是让用户能够轻松地为自己的编辑器启动 Socket REPL。
对此的反对意见可能是编辑器可以构建命令行,但这当然是脆弱的:理想情况下,编辑器只知道地址和端口,然后它可以从 REPL 直接查询信息(例如,在某些像 unrepl 一样的特性广告中)。
提议是将一些 socket repl 选项作为高级公民并使其“可变”。无论如何,避免整个 JVM 属性的问题。第一类可以是别名的。
哪些选项是第一类对我来说还不清楚,因此工具维护者/创建者需要稍微思考一下,但把这个票据拿出来讨论是很好的。