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)。