Edsger: 为 reMarkable 2 带来手写 Clojure REPL
触觉手写与高级编程的交汇在现代软件开发中是一个罕见的领域。大多数开发者依赖机械键盘和高分辨率显示器,但 "Edsger" 项目试图弥合数字笔记本的模拟感与 Read-Eval-Print Loop (REPL) 的交互性之间的鸿沟。Edsger 专为 reMarkable 2 设计,允许用户通过手写 Clojure 代码并直接在设备上执行。
这项实验挑战了传统的编程输入方式,将 reMarkable 2 从一个被动的笔记设备转变为一个主动的计算环境。通过利用电子墨水屏和数字墨水的独特属性,Edsger 提供了一种沉思且实用的方式来参与 Clojure 的符号特性。
手写 REPL 的架构
为 reMarkable 2 这样的设备构建 REPL 需要一种专门的架构方法来处理从手写到可执行代码的转换。系统必须管理几个不同的处理层:
- Ink Capture:设备在用户书写时捕获手写笔的原始坐标和压力。
- Handwriting Recognition:手写符号必须被转换为 ASCII/UTF-8 字符。鉴于 Clojure 对括号、方括号和花括号的高度依赖,识别引擎必须对这些结构化分隔符特别精确。
- The Clojure Runtime:一旦手写内容被转换为文本,它就会被传递给 Clojure 解释器。REPL 随后评估表达式并返回结果。
- Visual Feedback:评估的输出结果会重新渲染到电子墨水屏上,完成整个循环。
为什么选择 Clojure?
由于其极简的语法和符号结构,Clojure 是手写 REPL 的理想选择。该语言对 S-expressions (嵌套列表) 的依赖反映了数学家和计算机科学家在白板或纸张上勾勒逻辑的方式。对于某些类型的算法草图,亲手书写括号可能比在键盘上输入它们更具直觉感,这与 "在纸上思考" 的精神相契合。
技术挑战与实现
在 reMarkable 2 上实现这样一个系统涉及应对硬件的限制。电子墨水屏的低刷新率意味着反馈循环必须经过优化,以避免令人不适的延迟。此外,集成过程需要一个自定义桥接器来处理手写输入层与底层 Clojure 环境之间的通信。
根据项目的文档和架构草图,该系统依赖于一个将数字墨水转换为结构化数据的流水线。随后,这些数据会被评估。这一过程将平板电脑变成了一份“活文档”,其中的代码不仅是思想的记录,更是页面的一部分,是可执行的。
慢速编程的哲学
除了技术成就之外,Edsger 代表了向 "慢速编程" 的转变。在自动补全和 AI 生成代码片段的时代,手写代码迫使开发者放慢速度,思考每一个字符和结构选择。这种触觉参与可以带来对正在实现的逻辑的更深层次理解,将编程行为转变为一种书法艺术。
通过以 Edsger W. Dijkstra(一位以严谨的算法方法和对逻辑优雅性的追求而闻名的计算机科学先驱)命名该项目,作者表达了对编程的智力严谨性而非仅仅追求生产速度的承诺。