RFC-003:バージョン計画
拒否日: 2026-06-01
⚠️ 拒否理由
本 RFC は RFC 規範に準拠していないため、拒否されました。
問題分析
| 問題 | 説明 |
|---|---|
| 文書タイプエラー | RFC は「なぜこのように設計するか」の意思決定文書であり、本文は「今どこにいるか、どこへ行くか」のプロジェクト管理文書である |
| 設計意思決定の欠如 | 技術選定のトレードオフ分析がなく、代替案の比較もなく、設計理由もない |
| 過剰な計画 | 9 バージョン(v0.1〜v1.0)を計画しているが、完了したのは 1.5 個のみで、v0.3 以降はすべて推測である |
| 保守コスト高 | 成功指標表に 50 個の状態があり、保守が困難 |
| バージョン番号の混乱 | v0.8 をスキップしており、説明がない |
正しい文書タイプ
本ドキュメントは RFC ではなく、**プロジェクトロードマップ(Roadmap)**として管理すべきである。ロードマップは事実と短期計画を記述し、RFC は設計上の意思決定を記述する。
以下は原文の内容であり、参考のために保存している。
概要
YaoXiang のバージョンリリース計画、v0.1 から v1.0 までのロードマップ。
核心的な目標:
- バイトコードコンパイル:REPL と段階的コンパイルをサポート
- セルフホスティング (Bootstrap):YaoXiang を使って YaoXiang コンパイラを記述
- AOT コンパイル:バイトコードからネイティブマシンコードへコンパイル
一、動機
なぜバージョン計画が必要か?
- プロジェクト管理:目標を実行可能なマイルストーンに分解する
- ユーザーの期待:ユーザーに言語の発展段階を理解させる
- リソース配分:各段階の重点を明確にする
- リスク管理:問題を迅速に発見し方向を調整する
核心的な設計意思決定
- バイトコード優先:まずインタプリタ実行を実装し、AOT は後回し
- 段階的デリバリー:各バージョンに実用可能な機能を持たせる
- 後方互換性:v1.0 以前は API が変更される可能性があるが、事前通知する
- セルフホスティング検証:セルフホスティングにより言語の表現力を証明
- 性能の階層化:まず動作させ、その後最適化する
二、コンポーネント状態 (Phase)
| Phase | モジュール | 状態 | 位置 | 最終更新日 |
|---|---|---|---|---|
| P1 | 字句解析器 | ✅ 完了 | src/frontend/lexer/ | 2025-01-23 |
| P2 | 型検査器 | ✅ 完了 | src/frontend/typecheck/ | 2025-01-23 |
| P3 | バイトコード生成器 | ✅ 完了 | src/middle/codegen/ | 2025-01-25 |
| P4 | 仮想マシン | ✅ 完了 | src/middle/ | 2025-01-25 |
| P4.1 | タスクシステム | ✅ 完了 | src/backends/runtime/task.rs | 2025-01-23 |
| P4.2 | DAGスケジューラ | 🔶 設計完了 | .claude/plan/flow-scheduler-implementation.md | 2026-01-04 |
| P5 | 標準ライブラリ | ⚠️ 部分完了 | src/std/ | 2025-01-23 |
| P6 | TUI REPL | ✅ 完了 | src/backends/dev/repl/ | 2025-01-24 |
| P7 | ジェネリクスシステム | ✅ 完了 | docs/design/rfc/011-generic-type-system.md | 2025-01-25 |
核心的な成果:
- ✅ コンパイラフロントエンドの完全実装(P1-P2)
- ✅ バイトコード生成と仮想マシン完了(P3-P4)
- ✅ 基本タスクシステム完了(P4.1)
- ✅ TUI REPL 開発完了(P6)
- ✅ ジェネリクスシステム設計完了(P7)
次の優先事項:FlowScheduler スケジューラの実装 → 標準ライブラリの完成(P5)→ v0.1 リリース
三、バージョンロードマップ
v0.1:実行可能マイルストーン ✅
状態:基本完了(2025-01-25)
完了済み:
- ✅ 字句解析、構文解析、型検査が完全
- ✅ バイトコード生成が利用可能
- ✅ 仮想マシンが基本プログラムをインタプリタ実行可能
- ✅ 基本 print 関数
- ✅ TUI REPL 完了
- ✅ 基本タスクシステム(Task/Scheduler)
$ yaoxiang run hello.yx
Hello, YaoXiang!技術的ハイライト:
- 三層ランタイムアーキテクチャ設計完了
- タスクシステムの完全実装
- TUI REPL のモダンなインターフェース
- 統一型構文 + ジェネリクスシステム設計
未包含:完全な DAG スケジューリング(基本スケジューラは実装済み)
v0.2:FlowScheduler スケジューラ 🚧
目標:完全な依存関係認識スケジューラを実装
- ✅ 設計ドキュメント完了
- 🔶 実装進行中
- [ ] DAG ノードとグラフの実装
- [ ] ワークスティーリングアルゴリズム
- [ ] libuv IO スケジューリングエンジン
- [ ] 遅延評価戦略
- [ ] spawn 構文サポート
技術的重点:
- FlowScheduler アーキテクチャの実装
- 工業レベルの IO スケジューリング(libuv)
- ゼロコスト抽象化
v0.3:並行プレビュー 📋
目標:基本並行をサポート
- DAG タスク依存グラフ
- 基本スケジューラ
- spawn 並行
v0.4:ジェネリクスシステム 📋
目標:完全なジェネリクス能力
- [ ] RFC-011 Phase 1:基本ジェネリクス
- [ ] RFC-011 Phase 2:型制約
- [ ] RFC-011 Phase 3:関連型
- [ ] RFC-011 Phase 4:Const ジェネリクス
- [ ] RFC-011 Phase 5:条件型
技術的重点:
- デッドコード除去
- ゼロコスト抽象化
- 関数オーバーロード + インライン最適化
v0.5:標準ライブラリの完成 📋
目標:ユーザビリティ向上
- IO、辞書、ネットワークモジュール
- ツールチェーン(fmt、基本 LSP)
- 性能最適化
v0.6:エラーハンドリングシステム 📋
目標:完全なエラーハンドリング
- [ ] RFC-001 実装
- [ ] Result 型システム
- [ ] エラーグラフの可視化
- [ ] DAG エラー伝播
v0.7:安定版 📋
目標:API が安定に近づく
- 完全なドキュメント
- ツールチェーンの完成
- 境界ケースの修正
v0.9:セルフホスティング開始 📋
目標:コアモジュールを YaoXiang で書き直す
- Lexer → Parser → TypeChecker → Codegen を段階的に置換
- クロス検証:二つのコンパイラの結果が一致
v1.0:本番利用可能 📋
目標:安定リリース
- 完全なセルフホスティング
- AOT コンパイル(LLVM バックエンド)
- 本番利用可能
四、コンパイル戦略三層設計
| 階層 | バージョン | 入力 | 出力 | 説明 |
|---|---|---|---|---|
| L1: バイトコード | v0.1+ | ソースコード (.yx) | バイトコード (.yxb) | VM インタプリタ実行 |
| L2: セルフホスティング | v0.9+ | YaoXiang ソースコード | バイトコード | 自分を自分でコンパイル |
| L3: AOT | v1.0+ | ソースコード/バイトコード | マシンコード | ネイティブ性能 |
バイトコード優先の理由:
- REPL サポート:入力コードを即時コンパイルし、対話型開発
- 段階的コンパイル:単一関数の変更はその部分のみ再コンパイルすればよい
- プラットフォーム非依存:.yxb ファイルはプラットフォーム間で実行可能、対応するプラットフォームの VM のみ必要
五、依存関係戦略
短期:Rust ライブラリを呼び出して crates.io を再利用(Cargo 寄生)
現在の依存関係:
- 並行:parking_lot, crossbeam, rayon
- データ構造:indexmap, hashbrown, smallvec
- ネットワーク:tokio
- シリアライゼーション:serde, ron
長期:独自の標準ライブラリとパッケージマネージャを構築
六、ツールチェーン
| バージョン | ツール | 状態 |
|---|---|---|
| v0.1 | yaoxiang-cli | ✅ 完了 |
| v0.1 | TUI REPL | ✅ 完了 |
| v0.2 | yaoxiang-debug | 🚧 設計中 |
| v0.3 | yaoxiang-fmt | 📋 計画中 |
| v0.3 | yaoxiang-lsp (基本) | 📋 計画中 |
| v0.5 | yaoxiang-clippy | 📋 計画中 |
| v1.0 | 完全なツールチェーン | 📋 計画中 |
七、成功指標
| 指標 | v0.1 | v0.2 | v0.3 | v0.5 | v1.0 |
|---|---|---|---|---|---|
| エンドツーエンド実行 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 基本タスクシステム | ✅ | ✅ | ✅ | ✅ | ✅ |
| FlowScheduler | ❌ | 🚧 | ✅ | ✅ | ✅ |
| 並行サポート | ⚠️ | 🚧 | ✅ 基本 | ✅ 完全 | ✅ |
| 標準ライブラリ | 基本 | 基本 | 基本 | 改善 | 完全 |
| ジェネリクスシステム | ⚠️ | ⚠️ | 🚧 | ✅ | ✅ |
| TUI REPL | ✅ | ✅ | ✅ | ✅ | ✅ |
| セルフホスティング | ❌ | ❌ | ❌ | ❌ | ✅ |
| AOT | ❌ | ❌ | ❌ | ❌ | ✅ |
| コードカバレッジ | 60% | 70% | 80% | 90% | 95% |
凡例:
- ✅ 完了
- 🚧 進行中
- ⚠️ 部分完了
- 📋 計画中
八、未解決問題
- [ ] JIT vs AOT のタイミング選択
- [ ] パッケージマネージャの設計
- [ ] セルフホスティングモジュールの置換順序
- [ ] AOT バックエンドの選定(LLVM vs 自社開発)
九、バージョンリリース基準
v0.x シリーズ:
- 機能は完全だが境界ケースの問題が存在する可能性
- API は変更される可能性がある
- 学習と実験のみ
v1.0:
- すべてのコア機能が安定
- API 凍結
- 本番使用に適している
- 完全なドキュメントとチュートリアル
