大家好,我是何三,独立开发者

7 毫秒,冷启动一个 Clojure REPL。

什么概念?你眨个眼要 300 毫秒,眼睛都还没合上,人家一个完整的 Lisp 方言环境已经跑起来了,还能运行你的代码。

比 JVM 上的官方 Clojure 快了整整 50 倍

速度对比

这个项目叫 let-go,一个用 Go 写的 Clojure 方言,昨天刚登上 Hacker News 首页,89 分。作者 marcingas 在 2021 年就开始了这个项目——动机你绝对想不到。

他说,这是个精心设计的"恶作剧"。

"我想找个写 Clojure 的借口,同时假装自己在写 Go。"

真有你的。

7ms 怎么做到的?

JVM 版 Clojure 慢在哪?JVM 启动就要加载类加载器、初始化运行时、预热 JIT……一套组合拳下来,几百毫秒就没了。

而 let-go 直接跳过这些。

它用 Go 写了一个轻量级编译器 + 栈式虚拟机,全部编译成一个 ~10MB 的静态二进制。冷启动的时候不需要加载任何外部运行时,直接跑。

说白了,以前你得先装个 JVM,再倒杯水等它启动,现在双击文件就开干。

而且这玩意儿不是玩具。作者说它和 JVM Clojure 的兼容性大概在 90% 左右。常见的语法、宏、数据结构基本都能跑。它还带了一个 nREPL 服务器,Calva、CIDER 这些编辑器都能连上去用。

等一下,说到 CIDER……我之前折腾 Emacs 配 Clojure 环境的时候,光等 JVM 启动就花了快一分钟。后面改用 babashka,快是快了,但有些库不兼容。如果 let-go 能在保持兼容性的同时做到毫秒级启动……

说实话,这块我还没完全搞懂它怎么处理那些底层 Java 互操作的。毕竟 Clojure 很多库底子是 Java,let-go 又不跑 JVM,遇到这种情况怎么办?有懂的大佬欢迎指正。

作者说它已经在生产场景里跑过东西了——他用 let-go 写了一个无守护进程的容器运行时。容器运行时!用 Lisp 写的!这你敢信?

哦对了,它还支持 Plan9

Plan9 啊朋友们,那个比 Linux 还古老的系统。一个 2026 年的项目居然还想着兼容 Plan9,作者是真的有情怀。

上手试试

安装简单到离谱:

# macOS / Linux
curl -sSf https://nooga.github.io/let-go/install.sh | bash

# 或者直接从 GitHub Releases 下载

装完就能跑了:

;; hello.lgo
(println "Hello from let-go!")
# 运行
let-go hello.lgo

启动速度怎么说呢……就是你刚敲完回车,输出就已经在屏幕上了。没有任何"正在加载……"的等待感。

它还支持 AOT 编译,可以把你的 Clojure 代码编译成字节码,甚至可以打包成独立的二进制文件(运行时 + 字节码合一)。这就意味着你可以写一个 CLI 工具,发给别人直接跑,对方不用装任何东西。

# AOT 编译
let-go compile my-app.lgo -o my-app

# 直接跑
./my-app

12MB 一个二进制,里面装着你的 Lisp 代码和运行时。这体积,放 Docker 镜像里都嫌占地方。

Clojure 的轻量替代方案其实有几个:

Babashka 是目前最火的,用 GraalVM 编译,启动大概 20ms,兼容性也不错。但 let-go 比它还要快 3 倍,而且纯 Go 实现意味着嵌入 Go 项目极其丝滑——函数、struct、channel 直接跨语言调用,不需要任何 FFI。

还有一个叫 SCI(Small Clojure Interpreter)的,也是 GraalVM 方案,性能不错,但启动速度被 let-go 按在地上摩擦。

当然,let-go 现在的 Star 还不多(不到 200),毕竟是老项目刚火起来。但作者从 2021 年维护到现在,稳定性应该没问题。

说点实话

这个项目适合谁?

  • Clojure 爱好者想找个更轻量的运行时
  • Go 开发者想在项目里内嵌脚本语言
  • 写 CLI 工具的人不想用 Python 或 Node.js
  • 纯粹猎奇——"Go 写的 Lisp?我看看有多离谱"

不适合谁?

  • 重度依赖 Java 库的 Clojure 项目(毕竟不跑 JVM)
  • 追求 100% 兼容性的生产环境

作者自己也说了——这不是 JVM Clojure 的平替,也不能直接跑你现有的 Clojure 项目。它是个"几乎 Clojure",不是"就是 Clojure"。

但这个"几乎",已经比绝大多数人想象的要多得多了。

项目地址:https://github.com/nooga/let-go

本文使用 MGO 编辑并发布

关注"何三笔记",回复"mgo" 免费下载使用