jordanhubbard/nanolang
A tiny experimental language designed to be targeted by coding LLMs
解決的問題
NanoLang 是一種專門為機器編寫與人類閱讀而設計的極簡程式語言。它透過強制執行無歧義語法並要求函數包含測試區塊,解決了程式語言中的歧義問題以及缺乏整合測試的問題。
工作原理
NanoLang 使用經過形式化證明核心 (NanoCore),其語義在 Coq 中經過驗證,以確保類型健全性、進展性與確定性。它提供兩種主要的執行路徑:轉譯為 C 以獲得原生效能,或透過其自身的基於堆疊的虛擬機器 (NanoISA) 執行,該虛擬機器在獨立的進程中隔離危險的外部呼叫。該語言的特點包括透過引用計數實現的自動記憶體管理、用於顯式副作用處理的代數效應,以及執行常數折疊、死碼消除與剖面引導內聯的編譯器。
適用對象
它面向需要形式驗證、無歧義語言的開發者,這種語言易於 AI/機器生成且易於人類維護,同時也面向對形式驗證與語言設計感興趣的人士。
亮點
- 形式化證明的語義:核心語義在 Coq 中透過機械化方式證明,沒有任何公理或認可的子情況。
- NanoISA VM:一個具有約 94 個 opcodes 的基於堆疊的虛擬機器,並具有用於 FFI 隔離的協處理模型。
- 多目標編譯:支援轉譯為 C、WebAssembly、LLVM IR、PTX/CUDA 與 RISC-V 組合語言。
- Shadow Tests:強制使用
shadow測試區塊以確保函數覆蓋率。 - 高級語言特性:包括代數效應、async/await(透過 CPS 狀態機)、豐富的模式匹配與類型推斷。
- IDE 支援:附帶用於 VS Code 整合的語言伺服器 (LSP) 與除錯適配器 (DAP)。