jordanhubbard/nanolang

A tiny experimental language designed to be targeted by coding LLMs

解決する課題

NanoLangは、機械によって記述され、人間によって読まれることを特別に目的として設計された最小限のプログラミング言語です。曖昧さのない構文を強制し、関数に対してテストブロックを要求することで、プログラミング言語における曖昧さの問題と統合テストの欠如という課題を解決します。

仕組み

NanoLangは、型安全性、進行性、および決定論性を保証するために、Coqで検証されたセマンティクスを持つ形式的に証明されたコア(NanoCore)を使用しています。主に2つの実行パスを提供します。ネイティブパフォーマンスのためのCへのトランスパイル、または、危険な外部呼び出しを別プロセスに分離する独自のスタックベース仮想マシン(NanoISA)経由の実行です。この言語は、参照カウントによる自動メモリ管理、明示的な副作用処理のための代数的なエフェクト、および定数畳み込み、デッドコード削除、プロファイルガイド型インライン化を行うコンパイラを特徴としています。

対象者

AI/機械が生成しやすく、人間がメンテナンスしやすい、形式検証済みで曖昧さのない言語を必要とする開発者、および形式検証や言語設計に関心のある方を対象としています。

ハイライト

  • 形式的に証明されたセマンティクス: コアセマンティクスは、公理や認められたサブケースなしにCoqで機械的に証明されています。
  • NanoISA VM: 約94個のオペコードを持つスタックベースの仮想マシンと、FFI分離のためのコプロセスモデル。
  • マルチターゲットコンパイル: C、WebAssembly、LLVM IR、PTX/CUDA、およびRISC-Vアセンブリへのトランスパイルをサポート。
  • シャドウテスト: 関数カバレッジを確保するために shadow テストブロックの使用を強制します。
  • 高度な言語機能: 代数的なエフェクト、async/await(CPSステートマシン経由)、豊かなパターンマッチング、および型推論が含まれます。
  • IDEサポート: VS Code統合のための独自のLanguage Server (LSP) および Debug Adapter (DAP) を提供。