Hotdry.

Article

墨水屏上的Lisp交互:Edsger手写REPL的延迟工程与渲染策略

解析Edsger项目如何将reMarkable 2手写平板转化为Clojure REPL,探讨电子墨水屏设备上笔迹采集、LLM识别与本地渲染的实时交互边界。

2026-06-03web

在电子墨水屏设备上实现手写代码的实时交互,本质上是一场与延迟的博弈。Edsger 项目展示了如何在 reMarkable 2 这一封闭生态中,通过巧妙的架构设计,构建一个完整的 Clojure REPL—— 用户用触控笔书写 Lisp 表达式,系统识别、求值并将结果以手写风格渲染回页面。

架构的九步循环

整个系统的数据流呈现清晰的流水线结构。用户在 Xochitl(reMarkable 官方笔记应用)中书写代码后,设备以约 12 秒的间隔将笔画数据持久化到文件系统 —— 这是整个链路中最不可控的延迟来源。随后,部署在设备上的 let-go 运行时以 500 毫秒为周期轮询文件变更,通过比对.lines格式文件的修改时间戳检测新输入。

检测到变更后,系统执行差异化的笔画提取:解析当前页面与上一状态的差异,仅将新增表达式转换为 PNG 图像。这一选择性处理策略避免了重复处理历史内容。转换后的图像经由 Anthropic Claude API 完成手写识别,将笔画转录为可解析的 Clojure 代码文本。识别成功后,let-go 调用readeval完成求值;若read抛出异常,系统采用宽容策略,假设用户尚未完成输入,而非立即报错。

求值结果通过 ImageMagick 渲染为图像,字体选用基于 Edsger Dijkstra 手稿风格设计的 Dijkstra 字体,使输出呈现与输入一致的手写质感。最终,借助 XOVI 框架注入的 Qt 资源补丁,图像以浮动元素形式插入到输入内容正下方,形成自然的对话流布局。

技术栈的选型逻辑

项目的技术选型体现了对设备约束的精准把握。let-go 作为作者自研的 Go 语言 Clojure 方言实现,具备良好的跨编译特性 ——Go 工具链对 ARMv7 架构的原生支持使得交叉编译几乎无痛。XOVI 框架则解决了封闭二进制程序的扩展难题:基于LD_PRELOAD机制,它允许在无需修改 Xochitl 本体的情况下拦截和替换函数行为,类似于 Emacs 的 advice 机制或 Common Lisp 的:around方法组合。

手写识别环节当前依赖云端 LLM,作者坦言这是 "眼中之刺"。Tesseract 等本地 OCR 方案在 armv7 设备上的性能与准确率尚难满足代码识别的精度要求,而基于笔画几何特征(如 "斜线 + 反斜线 + 中间横线" 判定为字母 A)的启发式识别方案仍停留在构想阶段。

延迟构成与优化空间

系统的端到端延迟可分解为三个层级:Xochitl 的自动保存间隔(约 12 秒)、轮询检测周期(500 毫秒)、以及 OCR 与渲染的处理时间。其中保存间隔占据绝对主导地位,作者推测通过更深层的逆向工程可能发现强制刷新或绕过写缓存的 API,但目前尚未找到可行路径。

针对 500 毫秒的轮询开销,项目文档提出可迁移至xovi-message-broker事件总线,以发布 - 订阅模式替代文件轮询,预计可削减约半秒的响应延迟。这一优化需要引入新的依赖,但架构上完全可行。

设计哲学与交互边界

Edsger 的设计决策展现了对 "最小可行界面" 的追求。系统不依赖显式的评估按钮或特定手势触发,而是通过语法有效性推断用户意图 —— 当 OCR 文本首次通过 Clojure reader 时,即视为输入完成并触发求值。这种隐式交互模式降低了认知负担,但也带来了模糊性:无法区分 "未完成的不完整代码" 与 "刻意写下的无效表达式"。

输出定位策略同样体现对阅读流线的尊重。系统解析笔画数据确定输入内容的底部边界,应用固定偏移量放置结果,确保对话式交互的自然流向。错误处理采用渲染异常信息替代崩溃,对于过量输出(如(range 100000))则留待后续版本通过美化打印器的尺寸限制解决。

局限性与迁移路径

项目的当前实现深度绑定 reMarkable 生态:.lines文件格式、Xochitl 的 QML 结构、以及 XOVI 的钩子机制均难以直接迁移至 Boox、Supernote 或 Kindle Scribe 等竞品设备。理论上的移植需要复刻三个核心能力:手写数据的结构化提取、宿主应用的运行时注入、以及本地 Lisp 运行时的部署。

作者对项目的维护态度坦诚而务实:Edsger 被定位为具有 "hack 价值" 的概念验证,而非生产工具。其命名致敬 Dijkstra—— 这位以手写手稿闻名的计算机科学家或许不会使用这个 REPL,但项目以他的字体渲染结果,形成了一种跨越媒介的致敬。

参考资料

web

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com