Nagiについて
Nagiは、Python風の構文と型付きのコードでバックエンドを書くための、開発中のプログラミング言語です。HTTP・JSON・SQLiteには標準APIを使い、それ以外の処理には小さなRustアダプターを通じて既存ライブラリを組み合わせられます。
名前は日本語の「凪」に由来します。「内部は激しく動いていても、表面は凪のように穏やか」という思いを込めています。
このページの目次
アプリを書く
通常はHighと呼ぶ.nagiファイルを使います。字下げでブロックを表し、関数の型と失敗をコードに記述します。書く人による癖が出にくく、自然に読みやすい書式を目指します。
HTTPのルート・ヘッダー・応答、型付きJSON、SQLite、async、actor・Supervisorを使えます。move・view・copyでデータの受け渡しを表し、失敗はResultで返します。Pythonのライブラリを読み込む機能はありません。
最初の実行から始め、HTTPやサンプルプロジェクトを試してください。Axumの見積APIでは、RustのHTTP基盤からNagiの型付きasync関数を呼び、業務処理の結果をResultで返します。
処理を調整する
| 層 | 現在の役割 |
|---|---|
| High | 普段のアプリ、型、検証、業務処理を書く |
| Low | 共通の型・所有権の規則を使い、波括弧で書く。生成物の確認や関数の差し替えに使う |
| Rust連携 | 手書きのアダプターを通じてRustのライブラリや独自実装を呼ぶ |
Lowには生ポインター、unsafe、メモリ配置の指定、C ABIはありません。当面は既存のLowコードを維持し、HighとRust連携を優先します。HighとLowとRust連携に現在の範囲を記載しています。
コンパイラと既存ライブラリ
Nagiのlexer・parser・型検査・Rust生成は独自の実装です。現在はRustコードを出力し、rustcが最終検査、最適化、機械語生成を行います。生成した実行ファイルにRust/Cargoのインストールは不要です。
HTTP輸送、非同期実行、JSON、SQLiteの基盤にはHyper・Tokio・Serde・rusqliteなどを使います。Nagi側が提供するのは、その上の型付きAPIと、Nagiのコードに対する検査・診断です。標準HTTPは現在Hyperを使い、Axumへの置き換えは未決定です。コンパイラの構成に分担を記載しています。
Rust経由の生成を当面の基盤とします。独自バックエンド、VM、self-hostingは実装済みの機能でも、次回リリースの約束でもありません。選択の理由、Lowの維持費用、保留事項は設計判断にまとめています。
開発状況
現在の公開版は0.2.0です。一般的なバックエンドをNagiだけで書けるという目標は未達です。SQLiteには型付きParametersがあり、送信HTTPには固定操作のHTTP clientがあります。標準PostgreSQLと利用者が定義する不透明な資源型はありません。
checkはNagiの型・move・view等を検査します。借用やRustのtraitは最終的にrustcも検査するため、check成功後にビルドで失敗する場合があります。保証範囲は所有権、対応書式は文法を参照してください。
Rust+Axumに対する速度や成熟度の優位は確認していません。現在のAPI、必要なRustアダプター、診断、実測した性能と制限を判断材料として公開します。残る課題と優先順位は今後の開発へ。