Edsger: 將手寫 Clojure REPL 帶入 reMarkable 2
觸感手寫與高階程式設計之間的交集在現代軟體開發中是一個罕見的領域。大多數開發者依賴機械鍵盤和高解析度顯示器,但「Edsger」專案嘗試彌合數位筆記本的類比感與 Read-Eval-Print Loop (REPL) 的互動特性之間的差距。Edsger 特別為 reMarkable 2 設計,允許使用者透過手寫方式編寫 Clojure 程式碼並直接在裝置上執行。
這項實驗挑戰了傳統的程式碼輸入方式,將 reMarkable 2 從一個被動的筆記工具轉變為一個主動的運算環境。透過利用電子墨水 (e-ink) 與數位墨水的獨特屬性,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 環境之間的通訊。
根據專案文件與架構草圖,該系統依賴於一個將數位墨水轉換為結構化數據的管線 (pipeline),接著再進行評估。這個過程將平板電腦轉變為一份活生生的文件,其中的程式碼不僅僅是思考的紀錄,更是頁面中可執行的一部分。
慢速程式設計的哲學
除了技術成就之外,Edsger 代表了向「慢速程式設計 (slow coding)」的轉變。在自動完成與 AI 生成程式碼片段的時代,手寫程式碼會迫使開發者放慢速度,並思考每一個字元與結構選擇。這種觸感上的參與可以帶來對所實作邏輯的更深層理解,將程式設計的行為轉化為一種書法藝術。
透過以 Edsger W. Dijkstra(一位以嚴謹演算法方法與追求邏輯優雅著稱的電腦科學先驅)命名該專案,作者傳達了對程式設計智力紀律的承諾,而非僅僅追求生產速度。