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