Jane Street Bonsai_term 與 strace-ui:TUI 的文藝復興
終端使用者介面的回歸
終端使用者介面 (TUIs) 在專業軟體開發中正經歷一場復興,這主要受到開發者對於輕量化、以鍵盤為中心,且能直接整合進開發工作流的工具之需求所驅動。Jane Street 利用這一趨勢開發了 Bonsai_term,這是一個允許開發者使用類似現代 Web 開發的宣告式、函數式風格來構建複雜終端應用程式的框架。
這種轉變部分是對現代 GUI 框架(例如 Electron)日益臃腫的反應,也是對日益普及的 AI agent(如 Claude Code)的響應,因為這些 agent 在終端環境中運作比在功能齊全的 IDE 中更為自然。
strace-ui:互動式系統呼叫探索
strace-ui 是一款使用 Bonsai_term 構建的 TUI 應用程式,它將傳統上線性且往往難以理解的 strace 輸出轉換為互動式探索工具。它解決了標準 strace 的主要痛點——例如追蹤子程序(subprocesses)的困難,以及需要重新執行 trace 以更改 syscall 篩選條件的需求。
strace-ui 的關鍵特性
- 互動式篩選: 使用者可以在不重新啟動 trace 的情況下,即時隱藏特定的 syscall(透過按下 h)。
- 檔案描述符追蹤: 使用者可以使用 > 或 < 在引用相同檔案描述符的 syscall 之間跳轉,或者使用 F 將檢視範圍篩選為僅包含觸及特定 FD 的 syscall。
- 簡化的程序追蹤: 子程序和執行緒(threads)被分配了簡短的數字標籤,而非原始的 PID,這使得複雜的
strace -f輸出更容易掃描。 - 增強的 DNS 解析: 除了標準的 FD 解碼外,strace-ui 還能將檔案描述符解析為實際的主機名稱,為網路活動提供即時的上下文資訊。
- 整合式文件: 按下 m 可開啟當前 syscall 的相關 man page。
- 視覺化格式化: 該工具會格式化 struct 並將 buffer 渲染為 hexdump,而非僅僅是純文字字串,以提高可讀性。
Bonsai_term:用於 TUI 的宣告式框架
Bonsai_term 是 Bonsai 的改編版,Bonsai 是由 Jane Street 開發的函數式 UI 函式庫。 雖然 Bonsai 最初是為 Web 設計的 (Bonsai_web),但其核心哲學——將 UI 視為具備狀態的增量計算——與渲染介面無關。
Bonsai_term 的技術優勢
- 函數式狀態機: 組件被實作為純函數式狀態機,使其易於組合且具備可預測性。
- 增量化 (Incrementalization): 框架確保只有在必要時才會重新計算數值,從而防止整個 UI 的不必要重新渲染。
- 型別安全: 使用 OCaml 編寫,Bonsai_term 允許後端與 UI 之間共享型別與邏輯,減少了錯誤並增加了可維護性。
- 原生 OCaml 整合: 不同於需要透過
js_of_ocaml轉譯為 JavaScript 並需仔細管理 JS 相容性函式庫的 Bonsai_web,Bonsai_term 作為原生 OCaml 程式執行。這使其能夠不受限制地使用任何原生 OCaml 函式庫。
AI 驅動開發與截圖測試
TUI 文藝復興最重要的驅動力之一,是終端介面與 AI 編碼 agent 的協同作用。由於 TUI 渲染為純文字,它們為 LLM 建立了一個極高效率的迴圈。
使用 Expect Tests 的「閉環」
Bonsai_term 使用 expect test 框架,其中整合測試會將 UI 狀態渲染為基於文字的「截圖」。
Agent 撰寫優秀 Bonsai_term 程式碼的深層原因,在於整個 UI 都渲染為純文字,因此截圖測試僅僅是一個模型可以自行閱讀並驗證的 diff。GUI 的視覺狀態需要視覺模型來檢查,但 TUI 的輸出已經存在於 agent 的原生模態中,這免費地完成了閉環。
這使得 AI agent 可以執行測試、觀察 UI 的文字型 diff,並自行修正程式碼,而不需要視覺模型來「看」螢幕。這個過程顯著加速了 strace-ui 的開發,因為 AI 可以處理大部分的函數式邏輯,而人類開發者則專注於捲動與渲染等效能特性。
生態系統與使用案例
Jane Street 已經看到許多使用 Bonsai_term 構建的內部工具大量增加,從簡單的工具程式到複雜的系統。範例包括:
- proctopus: 一個用於管理多程序應用程式的工具。
- dissect: 一個用於分解執行檔中臃腫內容的工具程式。
- AIDE: 一個用於編排 agentic coding sessions 的內部 agent-harness。
- 其他內部工具: 用於交易系統的時空旅行除錯器 (time-traveling debuggers)、CI 監控 TUI、以及日誌探索器。
社群觀點
雖然 Jane Street 擁護 TUI 方法,但更廣泛的開發者社群對於 TUI 與 GUI 的實用性仍存有分歧。有些人認為 TUI 比 GUI 「嚴格來說更差」,因為它們受限於字元格點,且缺乏現代顯示器豐富的視覺能力。其他人則認為 TUI 趨勢是對「Electron GUI 的臃腫」的一種反應,且一旦發現更高效能的構建方式,產業將會重新轉向 GUI。