Files
hakorune/docs/development/roadmap/phases/phase-16-macro-revolution/CODEX_CONSULTATION.md

7.1 KiB
Raw Blame History

Codex相談結果 - Macro System実装戦略と技術制約

日時: 2025-09-18 相談内容: Box-Based Macro Systemの技術的実現可能性と実装ロードマップ

🎯 技術的結論(要約)

  • Property実行時+ Macroコンパイル時の厳密分離可能
  • 既存MIR14命令で対応、新命令不要
  • Pattern Matching基盤 → Macro実装の順序妥当
  • 📊 工数見積もり: 最小2-3週間、充実4-6週間

🔧 技術的課題への回答

1. Property System実行時+ Macroコンパイル時の実装分離は可能

Codex回答: 可能だよ。

分離設計

  • マクロ: AST→ASTの純関数として実行副作用なし、決定的
  • Property評価・状態: 実行時のみ
  • 制約: マクロが参照できるのはAST上の属性メタデータのみ

アーキテクチャ利点

  • フロントエンド(マクロ/構文糖とバックエンドMIR/LLVM/Craneliftが綺麗に分離
  • 既存の実行パスに影響なし

2. 既存MIR命令でマクロ展開をどう表現新命令必要

Codex回答: 原則不要だよ。

設計原則

  • 展開結果は通常の構文へ還元
  • 既存のloweringでMIR14生成
  • 追加要素: デバッグ情報/起源Span/Originのメタデータのみ

命令セット維持の利点

  • 既存バックエンドPyVM/LLVM/Cranelift無変更
  • テスト・検証の継続性確保

3. Pattern Matching実装 → AST操作ツール → Macro Systemの技術的順序は妥当

Codex回答: 妥当だよ。

推奨実装順序

AST utilsパターン/クオジクオート/リライト)
↓
マクロ(関数風、次に属性)
↓
余裕があれば言語のmatch/desugarを同じ基盤で実装

Pattern Matching優先の技術的理由

  • ASTは複雑なツリー構造 → Pattern Matchingが最適なツール
  • マクロシステム自体の実装がクリーンになる
  • 膨大なif let、switch、visitorパターンの回避

4. MacroBox<InputAst, OutputAst>型安全マクロの実装コスト?

Codex回答: 段階導入を推奨。

実装戦略

Stage 1: 組み込み手続きマクロin-proc、型は動的検証
↓
Stage 2: Rust内製MacroBox型付きAPI
↓  
Stage 3: Hygiene/解決文脈まで型モデリング拡張

コスト分析

  • Rust実装: Traitベースで比較的低リスク
  • 外部マクロ: JSON AST + スキーマ検証で橋渡し
  • 初期: 境界での厳格スキーマ検証を重視

5. 工数見積もりの現実性

Codex回答: 現実的工数を提示

詳細見積もり

  • 最小ASTパターン/クオジクオート/リライト: 2-4日1-2日は攻めすぎ
  • マクロシステム最小: 2-3週間関数風 + 簡易衛生 + エラーハンドリング)
  • 属性マクロ・派生・MacroBox型付き: +2-3週間
  • 合計: 4-6週間が妥当

🏗️ アーキテクチャ設計Box-Based Macroの実像

マクロ実行境界

Parser → 解決前/中のフェーズでマクロ実行

実行順序:
モジュール/マクロ定義収集 
→ マクロ解決 
→ 展開 
→ 構文糖デシュガ 
→ 型検査 
→ MIR lowering

API設計Rust側

trait Macro { 
    fn expand(&self, ctx: &mut MacroCtx, input: AstNode) -> Result<AstNode>; 
}

// MacroCtx提供機能:
// - fresh_symbol(), resolve_path()
// - emit_error()/warn(), span合成
// - 再帰カウンタ、featureフラグ

AST操作ツール

  • パターン: 変数束縛、ワイルドカード、可変長(…)
  • 準引用/脱引用: ASTをコード片として安全に構築
  • リライト: 訪問/置換の汎用器Span伝播対応

衛生Hygiene設計

Stage 1: gensymベースの簡易衛生捕捉回避
Stage 2: SyntaxContext/Scope Markによる本格衛生

📋 実装フェーズとタスク

Phase A基盤・1週

  • AST Pattern/Unifier変数/ワイルドカード/variadic
  • Quasi-quote/unquote、AST Builder、Span連鎖
  • Rewriter停止条件/置換/環境)

Phase B最小マクロ・1-2週

  • マクロ定義/登録/解決(関数風)
  • 簡易衛生gensym+ 再帰上限
  • エラー設計Span指向、補助メッセージ
  • 展開トレース NYASH_MACRO_TRACE=1

Phase C拡張・1-2週

  • 属性マクロ(宣言/プロパティ/関数)
  • MacroBoxRust in-proc型付きAPI
  • デシュガpattern matching構文等を基盤上で実装

Phase D高機能・以降

  • 本格衛生SyntaxContext
  • 外部手続きマクロAST JSON v0試験的
  • キャッシュ/インクリメンタル展開

受け入れ基準(各段階)

Phase A完了基準

  • AST Pattern/クオジクオートのユニットテスト
  • Span一貫性の確保

Phase B完了基準

  • マクロ→通常構文→MIR14が既存スモークと一致
  • PyVM/LLVM両方で差分なし

Phase C完了基準

  • 属性マクロでProperty宣言の糖衣実装
  • MacroBoxで実例1つ動作

Phase D完了基準

  • 再帰/衛生の難ケース(名前捕捉/別スコープ)で期待通り動作

🎯 制約とリスク対応

Phase-15方針との整合

  • 優先度: AST操作基盤 → 最小マクロin-proc→ デシュガ → 属性マクロ
  • 制約: Rust VM/JIT拡張は最小化、フロントエンド完結
  • 影響: 既存実行経路への影響なし

リスク対応策

  • 衛生の落とし穴: 段階導入gensym→contextで抑制
  • エラーレポート品質: Span合成と補助ヒント初期設計
  • 外部マクロ不安定化: Phase-15中はin-proc限定
  • 無限展開: 再帰上限と循環検出(展開履歴)

🚀 次アクションCodex推奨

即座に着手すべき

  1. AST utilsPattern/Quote/Rewriteの最小設計確定
  2. MacroCtx/Registryの最小Trait草案作成
  3. 関数風マクロ + 簡易衛生 + トレースでスモーク1本
  4. 属性マクロでProperty糖衣例: #[once])実装

実装方針

この方針なら、Property実行系に手を入れず、安全にマクロを導入できるよ。必要ならMacroCtx/Registryの最小APIスケッチもすぐ出すよ。

📊 工数見積もり詳細

フェーズ 内容 期間 累積
Phase A AST基盤 3-5日 1週間
Phase B 最小マクロ 7-10日 2-3週間
Phase C Box化・属性 7-10日 4-6週間
Phase D 高機能化 1-2週間 6-8週間

最小ルート(急ぎ)

  • 最小を急げば: 2-3週間
  • 充実まで: 4-6週間

結論: Codexの技術分析により、Box-Based Macro Systemは既存アーキテクチャを壊すことなく、段階的に実装可能であることが確認された。

技術的制約とリスクを明確化し、現実的な実装ロードマップを提示。