OpenLDK:把整个 Java 世界搬进 Common Lisp
来源:atgreen.github.io — 2026-10-25
📋 概述
作者早年在 gcj(GNU 的 Java 编译器)上工作过,如今主要写 Common Lisp。2024 年底他想让 SBCL 直接使用 Java 库,找不到合适的集成方式,于是决定写一个 Lisp 版的 JVM 字节码处理器。OpenLDK 读 Java 字节码,翻译成 Lisp,交给 SBCL 编译成原生机器码,Java 对象与 Lisp 应用共用同一进程与堆。Java 类变成 CLOS 类,字段变成 slot,实例方法变成按 JVM 签名区分的泛型函数方法,异常体系映射成 Lisp condition;类加载时只装桩,首次调用才编译,编译结果进持久代码缓存。结果是七种 JVM 语言能在同一个 Lisp 表达式里各自用原生语法接力,初始化好的 Spring Boot 应用存进 Lisp 镜像后约 84 毫秒启动。
🔑 核心要点
- 翻译链路明确:字节码 → 中间表示 → Lisp → SBCL 原生代码,整数溢出语义用 mask-signed-field 32 保留。
- 对象模型一一对应:Java 类=CLOS 类、字段=slot、重载方法按 JVM 签名区分、异常=condition。
- 懒编译加持久代码缓存:加载库不等于编译全部方法,未用到的代码永不编译。
- 84 毫秒的来源:Spring Boot 应用已在镜像里初始化完成,重启只是恢复镜像,不是冷启动。
💡 金句
An initialized Spring Boot application can be saved in a Lisp image and launched again in about 84 milliseconds.
👍 0
👎 0
← 返回 Hacker News 首页