一门新编程语言在Hacker News上引发关注——let-go,一个用Go实现的Clojure方言。它的卖点很直接:单文件约10MB,冷启动仅需7毫秒,可能是Clojure家族里启动最快的成员。

作者用"λ-gophers"自嘲地打招呼,暗示这门语言的双重血统。Clojure是运行在JVM上的Lisp方言,以函数式编程和不可变数据结构著称,但JVM的启动开销一直是痛点。let-go选择Go作为宿主语言,彻底换了性能底子。

打开网易新闻 查看精彩图片

核心特性围绕"快"和"小"展开。预编译的字节码格式(LGB)让启动时间压到6毫秒;二进制体积10MB,空闲内存占用14MB。对比来看,Babashka(另一个Clojure工具)大7倍,JDK则大30倍。

打开网易新闻 查看精彩图片

部署方式有两种极端:一是编译成独立可执行文件,lg -b myapp main.lg直接生成,无需运行时;二是输出自包含的WASM网页,内置xterm.js终端模拟,能跑在任何浏览器里,丢到GitHub Pages就能用。

功能层面没有缩水:宏、解构绑定、协议、记录类型、多方法、transducers、惰性序列、持久化数据结构、大整数运算都支持。还内置了core.async通道、HTTP客户端/服务器、JSON和Transit序列化、Babashka pods扩展机制,以及nREPL服务器

与Go的互操作性是另一张牌。可以把let-go嵌入Go程序,Go结构体能映射成记录类型,两边函数可以互相调用。作者甚至设想了一个" stretch goal":把let-go字节码反向翻译成Go源码。

打开网易新闻 查看精彩图片

兼容性测试用了jank-lang的跨方言测试套件,4696/4921项断言通过,通过率95.4%。没过的主要是边界情况:算术溢出检测、Long边界处的大整数提升、BigDecimal行为差异,以及一些占位命名空间。

作者列了几条"模糊目标",语气不太正经:提供"高质量的娱乐"、让"在Go dayjob里写Clojure"变得合法、把整个运行时塞进一个requestAnimationFrame里还能给60fps留出10毫秒余量、让浏览器里的WASM虚拟机也能通过WebSocket连上Emacs/Calva。

非目标同样明确:不做Clojure的平替,也不做通用Clojure工具链。日常Clojure代码读起来跑起来差不多,但非平凡项目移植过来大概率要改。