我认为便携式Clojure CLI包装器的想法不错,但对于大多数平台,例如Linux、BSD、OSX,bash
可能实际上是一个更好的选择,因为它的运行速度足够快。不需要为不同的目标编译,也不需要编译32位和64位版本,也不需要下载适合您平台的适当版本。
如果GraalVM的原生镜像已经退出预览版,特别是在Windows上,我个人会倾向于使用它。根据这个基准:https://github.com/chocolateboy/startup-time,它的速度实际上和bash一样快,甚至更快。
根据上述基准和这个基准:https://github.com/bdrung/startup-time,似乎Pascal的启动时间实际上是最短的,其次是C。它表明Nim的运行速度几乎和C一样快,比Go和Bash都快。
依赖另一种语言似乎有点奇怪,但另一方面,bash也是一种语言,尽管出于某种原因,它似乎不那么奇怪。Windows不支持真正的Bash真的很遗憾。
如果GraalVM原生镜像足够健壮,可以在Windows上工作,我会投票支持它。随着Oracle在这方面的积极工作,它应该会随着时间而不断改进。我不认为Clojure CLI启动脚本所做的任何事情在Graal上不会工作。而且它是纯粹的Clojure。
否则,使用Nim、C、Pascal或Go而不是bash是一个我认为只有维护者应该做出的决定。bash管道是最容易的。只需打包脚本,无需为不同的目标编译,也不需要发布不同的安装程序。这比Graal要容易得多。我理解为什么做出这个选择。Windows的情况确实为倾向于其他东西提供了一个论据。
无论如何,只是想在这里补充一些基准信息,特别是 Graal 本地图像在启动时间方面应该与 bash 有竞争力。
为了使这更像是一个答案,我认为我在回答 bash 提供了所有选项中最简单的包装方式,这让它最初成为一个明智的选择,但是随着 Windows 的加入,我们看到 bash 并不具备足够的可移植性,因此我们需要两个实现,在本例中,一个是 bash,另一个是 powershell,或者一个更可移植的语言如 Java,用 GraalVM 编译,Nim 或者 C,这样可以使单个代码库跨平台运行,但代价是更复杂的编译和打包流程。