Jacquard 0.1: 專為 AI 編寫、人類審核的程式碼所設計的程式語言
Jacquard 0.1: 專為 AI 編寫、人類審核的程式碼所設計的程式語言
Jacquard 0.1 是一種程式語言,旨在應對大多數程式碼由機器學習模型編寫並由人類進行審核的時代。它專注於透過語言本身提供回答關鍵安全與可靠性問題的能力——例如「這段程式碼可以觸及什麼?」以及「我們有多確定?」——而無需人類審核者閱讀每一行 AI 生成的程式碼。
明確的副作用追蹤與權限授予
Jacquard 在語言層級強制執行副作用的透明度。每個函數簽名都會明確宣告其可能執行的副作用,讓審核者能一眼看出該段程式碼具備哪些能力。
- 副作用簽名 (Effect Signatures): 例如
(text) ->{net} text的簽名表示該函數可能會執行網路操作 (net)。 - 語言層級強制執行: 除非透過
--allow旗標明確授予權限(例如--allow net或--allow fs),否則 Jacquard 執行環境會拒絕任何未處理的世界效應 (world effects)。 - 無環境權限 (No Ambient Authority): 與傳統語言不同,這裡沒有存取檔案系統或網路的隱含權限;權限必須明確授予執行環境。
多重世界執行與模擬
Jacquard 允許透過更換管理外部世界的處理器 (handler) 來讓同一個程式在不同的「世界」中執行。這取代了傳統的 Mocking 技術,將其轉化為語言的一等公民功能。
- 世界處理器 (World Handlers): 處理器是回應程式對外部世界請求的組件。透過更換處理器,開發者可以在真實網路、腳本化的虛擬環境、歷史流量紀錄,或伺服器行為的機率模型中執行相同的程式碼。
- 確定性測試: 這種架構使得測試「如果 API 掛了,我的代理程式 (agent) 會怎麼做?」等情境變得輕而易舉,只需更換世界處理器即可。
離散機率程式設計
Jacquard 將機率程式設計視為一個函式庫而非內建的執行環境功能,這是透過具有深度、多重執行 (multi-shot) 處理器的代數效應 (algebraic effects) 來實現的。
- 多重執行處理器 (Multi-shot Handlers): 處理器可以將運算恢復至零次、一次或多次。這使得對於有限的離散模型,能夠精確列舉出所有可達到的結果及其機率。
- 以函式庫形式實現的貝氏推論 (Bayesian Inference as a Library): 由於處理器可以控制程式的續行 (continuation),
sample與observe操作被實作為為效應,而不同的推論演算法(如似然權重法 likelihood weighting)則被實作為處理器。 - 程式修復: 該語言可以用於執行程式修復,透過將失敗的測試視為一個觀察值,並計算各種候選修補程式 (patches) 的機率。
結構化身分與內容定址
為了避免格式與重新命名帶來的雜訊,Jacquard 使用基於程式碼規範化解析結構的內容定址 (content-addressing)。
- 規範化雜湊 (Canonical Hashing): Jacquard 對程式的解析結構進行雜湊,而非對原始位元組進行雜湊。這意味著修改註解、格式或重新命名局部變數,都不會改變程式的身分。
- 結構化差異比對 (Structural Diffing): 該語言提供了一個具備結構感知能力的差異比對工具,能夠識別邏輯上的變更,而非文字上的變更。
- 高效能緩存: 純函數測試僅在規範化程式碼或其依賴項變更時才會重新執行,減少了冗餘運算。
技術實作作與工具鏈
Jacquard 0.1 是一個研究原型,使用 OCaml 檢查器與 CPS 解釋器實作。它包含一個原生的 AOT (Ahead-of-Time) 後端,可產生 C 語言程式碼,隨後透過 clang 或 gcc 進行編譯。
- 核心 AST (Kernel AST): 該語言建立在一個統一的表示法之上,其中每個形式都由一個
(head, meta, args)三元組組成,包含 27 個核心形式。 - 原生編譯:
jac build指令會將核心.jqd載體編譯成獨立的二進位檔。雖然完整的效應語言可以被編譯,但基於安全考量,eval操作仍保留在解釋器層級。 - Warp 測試框架: 該專案包含一個 Warp 測試框架,用於進行探索性與基於屬性的測試,並配備有內容定址的緩存機制。
社群觀點與評論
雖然該專案因其在效應追蹤與內容定址方面的做法而受到讚賞,但部分社群成員對使用新語言來開發 AI 代理程式 (agent) 的採用率提出了疑慮。
"任何以 AI 為中心的新程式語言...顯而然的問題是,任何你試圖與之搭配使用的 LLM 都將從零開始——它沒有任何可以複製的範例,且能自行搜尋到的文件極少。"
其他評論者也質疑,這種效應系統是否從根本上不同於複雜的型別系統,或者世界建模能力是否僅僅是依賴注入 (dependency injection) 的一種形式。
目前的限制
作為一個研究原型,Jacquard 0.1 有明確的非目標與限制。它目前缺乏 VM/JIT、並行處理、連續分佈、梯度、型別化分階段 (typed staging) 以及形式化正確性證明。世界權限授予仍屬粗粒度,且該語言目前尚不打算用於生產環境。