Show HN: 我用 Go 制作了一个类 Clojure 语言,启动时间为 7 ms
Source: Hacker News
概览
Let-go 是一种类似 Clojure 的语言(约 90% 与 JVM Clojure 兼容),使用纯 Go 编写。它以约 10 MB 的静态二进制文件形式发布,冷启动时间约为 7 ms——比 JVM 快约 50 倍,比 Babashka 快约 3 倍。它在算法工作负载下拥有相当的吞吐量,大致与基于 GraalVM 的 sci 相当。
起源
我在 2021 年启动了这个项目,最初是作为一个精心策划的玩笑:我想找个借口在“写 Go”的同时实际写 Clojure。
特性
- 感觉像真正的 Clojure,并且内置 nREPL 服务器(可在 Calva、CIDER 等工具中使用)。
- 易于嵌入 Go 程序;函数、结构体和通道可以毫不费力地跨越边界。
- 适用于 CLI、Web 服务器、数据处理脚本,甚至一些系统编程——我曾用它编写了一个无守护进程的容器运行时。
- 可在 Plan 9 上运行。
实现细节
实现包括一个相当简洁的编译器和一个栈式虚拟机,均为运行类似 Clojure 的代码专门手工打造。编译器可以在 AOT 模式下工作,生成可移植的字节码块以及独立的二进制文件(运行时 + 字节码)。
限制
这并不是通用的 Clojure 替代品:
- 不加载 JAR 包。
- 缺少完整的 Java API。
- 现有的 Clojure 项目大概率需要修改才能运行。
入门指南
试一试并告诉我你的感受。欢迎提交 Issue 和 PR!