LLM可以生成Rust程式碼,但形式化證明完全是另一回事。
大型語言模型能寫出品質驚人的Rust程式碼,但當你要求形式化證明時,它們會幻覺出不變量,並編造出沒有任何驗證器接受的語法。本文介紹它們真正做對了什麼、在哪裡崩潰,以及如何善用牠們。
LLM能寫出可以編譯甚至通過的Rust程式碼。但牠們目前還無法可靠地寫出形式化證明,來證實程式碼對所有可能的輸入都是正確的。…
探索 AI 優先開發、編碼護欄和可處置架構。
大型語言模型能寫出品質驚人的Rust程式碼,但當你要求形式化證明時,它們會幻覺出不變量,並編造出沒有任何驗證器接受的語法。本文介紹它們真正做對了什麼、在哪裡崩潰,以及如何善用牠們。
LLM能寫出可以編譯甚至通過的Rust程式碼。但牠們目前還無法可靠地寫出形式化證明,來證實程式碼對所有可能的輸入都是正確的。…
model checking 如何在數秒內碾壓你在生產環境跑幾天才能發現 concurrency bug 的做法,以及如何把它用在自己的程式碼上。
在生產環境裡等 race condition 冒出來,那不叫測試。那叫披著勤奮外衣的僥倖。 你可以把應用跑上幾週,盯著 metrics dashboard,最後照樣發布一個 concurrency bug——它只會在兩個 request 剛好打進同一個 cache eviction window…
像Kani這樣的有界模型檢驗器和像Alloy這樣的關係模型搜尋器,讓你能以普通的斷言和限制條件來驗證性質。你放棄了活性證明,換來的是以小時而非週為單位的學習曲線。
使用模型檢驗器不需要學習線性時序邏輯。Kani、CBMC和Alloy等工具讓你能以普通的斷言和關係限制條件來驗證性質。你放棄了證明活性性質的能力,換來的是以小時而非週為單位的學習曲線,而對於大多數軟體錯誤來說,這是一筆值得的交易。…
像 Kani 這樣的模型檢驗工具讓你可以用斷言代替形式化證明來驗證 Rust 性質。棘手之處在於,當你的迴圈沒有小的邊界時會發生什麼。
不寫一行證明也能證明 Rust 程式碼正確。幹這活的工具叫做模型檢驗器,目前對 Rust 最實用的一個是 AWS 開發的 Kani。你寫普通的 Rust 斷言,Kani 把它們轉成數學命題,對所有可能的輸入進行檢驗。不需要定理證明器,不需要證明輔助工具,也不需要一頭栽進 Coq 半年出不來。…
分散式缺陷在部署後修復成本高昂。模型檢驗能讓你在寫下第一行實作程式碼之前就發現它們。以下是如何使用 TLA+ 做到這一點。
你無法對分散式protocol做單元測試。單元測試在一台機器上以單一順序執行一個程序。而你的protocol在五台機器上以十個程序、以你無法控制的順序執行。這兩種現實之間的鴻溝,正是缺陷藏身之處。…
基礎設施團隊如何使用按上下文劃分的 DSL 來管理 dev、staging 和 production 之間的配置,使環境差異顯式且類型安全。
staging 環境運作正常。production 環境運作異常。它們的 檔案之間的差異高達 400 行,其中一半是再也沒人相信的註解。上個月有人往 staging 裡加了 。沒人往 production 裡加。應用程式還是啟動了,使用了硬式編碼的預設值,現在你的功能旗標不同步了。…
LLM 會對語法產生幻覺,因為它們以機率方式採樣 token。語法約束解碼在每一步過濾詞表,只輸出保持語法有效性的 token。
讓 LLM 產生一個 JSON 物件,它最終一定會輸出一個末尾逗號、字串裡未轉義的換行符,或者在一個本該有引號鍵的位置輸出 bare word。這個錯誤不是模型的 bug。它是自迴歸採樣工作方式的必然結果:在每一步,模型都會把自己的詞表裡每個 token 都當作候選,包括那些會讓部分輸出在語法上 invalid 的…
你可以從簡單的英語描述中生成設計令牌,但前提是將該描述視為帶有模式契約和snapshot test的限界上下文DSL。
是的,你可以用英語描述一個主題,並得到一個可用的設計系統。關鍵在於,這段英語描述不是提示詞。它是源檔案。和任何源檔案一樣,它需要編譯器、類型系統和測試。…
對於大多數 bounded-context 的 DSL 來說,parser generator是大材小用。parser combinator讓你可以用與應用程式相同的語言建構可用的parser,無需產生程式碼,也無需建置步驟。
如果你曾經開啟過 Yacc 的語法檔案,並疑惑為什麼建構一門語言需要學習第二門語言,那麼你並不孤單。parser generator很強大,但對於在 bounded context 中自然湧現的小型 DSL 來說,它們幾乎總是大材小用。…
如何使用模式驗證和建置時檢查,在應用程式開始處理流量之前捕獲設定錯誤。
你的應用程式在週五晚上三小時後拋出了 。stack trace指向設定物件中一個深層巢狀的屬性。值是 。有人在未更新驗證邏輯的情況下,將 變更推送到了生產環境。 這不是執行時缺陷。這是策略失敗。你讓不受信任的資料未經檢查就進入了系統。 大多數團隊被動地驗證設定。缺少環境變數會導致當機。無效的 URL…