Skip to content

YaoXiang 設計ドキュメント

道生一,一生二,二生三,三生万物。

本ディレクトリには、YaoXiang プログラミング言語の設計決定、提案、議論が含まれている。

コア設計理念

理念説明
一切皆类型値、関数、モジュールはすべて型であり、型は第一級市民である
自然構文Python のような可読性、自然言語に近い
所有権モデルゼロコスト抽象化、GC なし、高パフォーマンス
并作モデル同期構文、非同期本質、自动並列
AI フレンドリー厳密な構造化、明確な AST

設計ドキュメント構造

design/
├── index.md              # 本インデックス
├── deprecated/           # 非推奨(新設計に置き換えられた)
│   └── *.md
├── rejected/             # 却下
│   └── *.md
├── rfc/
│   ├── draft/            # 草案(作業中)
│   ├── review/           # レビュー中(議論公開)
│   ├── accepted/         # 承認済み(設計通過)
│   ├── deprecated/       # 非推奨(置き換えられた)
│   └── rejected/         # 却下(不通過)
└── discussion/           # 設計議論エリア(議論公開)
    └── *.md

承認された設計提案

ドキュメント状態説明
RFC-010 統一型構文✅ 承認済み型定義構文の統一
RFC-011 ジェネリクス型システム✅ 承認済みジェネリクス型システム設計
RFC-009 所有権モデル✅ 承認済み所有権と借用システム設計
RFC-024 并発モデル✅ 承認済みspawn並発プリミティブ意味論
RFC-027 コンパイル時評価✅ 承認済みコンパイル時述語と静的検証

完全なリスト(全16件)は rfc/accepted/ ディレクトリを、最新状態は rfc/index.md を参照。

RFC 提案

RFC(Request for Comments)は、新機能と重大な変更の提案プロセスである。

アクティブな提案

番号タイトル状態
RFC-019型付けされた同像性草案
RFC-028JITコンパイラ草案
RFC-029モジュール意味論システム草案
RFC-031最適化レベル草案
RFC-033^^反射演算子草案
RFC-034デバッグツールチェーン草案
RFC-035MCP Server草案
RFC-002クロスプラットフォームIO(libuv)草案
RFC-026byx-bindgen草案
RFC-011aインターフェース実装と動的ディスパッチレビュー中
RFC-014aRegistryプロトコルレビュー中
RFC-014bビルドシステムレビュー中
RFC-014cワークスペースレビュー中
RFC-026a拡張可能FFIレビュー中
RFC-032spawn統一式レビュー中

承認された提案

番号タイトル状態
RFC-004柯里化多位置束縛承認済み
RFC-006ドキュメンテーションサイト最適化承認済み
RFC-007関数構文統一承認済み
RFC-008ランタイム並発モデル承認済み
RFC-009所有権モデル承認済み
RFC-009aトークンライフタイム分析承認済み
RFC-010統一型構文承認済み
RFC-011ジェネリクスシステム承認済み
RFC-012f-string承認済み
RFC-013エラーコード規範承認済み
RFC-014パッケージマネージャー承認済み
RFC-015設定システム承認済み
RFC-017LSPサポート承認済み
RFC-018LLVM AOTコンパイラ承認済み
RFC-024並発モデル承認済み
RFC-026FFIコアメカニズム承認済み
RFC-027コンパイル時アサーション承認済み
RFC-030assertアサートメカニズム承認済み

却下された提案

番号タイトル状態
RFC-003バージョニング却下済み
RFC-005CVEスキャン却下済み
RFC-016量子ネイティブサポート却下済み
RFC-025プリミティブ型拡張却下済み

RFC テンプレート

新規提案の提出前に、以下を参照:

設計議論への参加

RFC ライフサイクル

RFC 提案には5つの状態がある:

状態意味
草案作業進行中
レビュー中議論公開
承認済み設計通過
非推奨かつて承認され、新設計に置き換えられた
却下済み不通過

完全なライフサイクル:

草案 → レビュー中 → 承認済み → 非推奨(置き換えられた)

                 却下済み(不通過)

提案プロセス

1. 草案作成(RFC テンプレートを使用)
   → rfc/draft/ に配置

2. レビュー提出
   → rfc/review/ に移動、社区議論公開

3. コアチームレビュー
   → 承認 → rfc/accepted/ に移動
   → 却下 → rfc/rejected/ に移動

4. 維持管理
   → 置き換え → rfc/deprecated/ に移動

設計原則

  • 明確な境界: 各設計決定には明確な適用範囲が必要
  • 実用優先: 実際の問題を解決し、架空の脅威に立ち向かわない
  • ユーザー可視動作不変: Never break userspace

コード例

yaoxiang
// 型定義
Point: Type = { x: Float, y: Float }
Result: (T: Type, E: Type) -> Type = { ok: (T) -> Result(T, E), err: (E) -> Result(T, E) }

// 関数定義
add: (a: Int, b: Int) -> Int = a + b

// main 関数
main: () -> Void = {
    print("Hello, YaoXiang!")
}

重要な設計決定

1. 型システム

  • 統一型構文: enumstructunion を廃止し、Name: Type = {...} で統一
  • コンストラクタ即型: 「型」と「値」の沟を消除
  • ジェネリクスサポート: コンパイル時単態化、ゼロランタイムオーバーヘッド

2. 并作モデル

yaoxiang
// 并作モデル:デフォルトは逐次実行、spawn でデータフロー並列を導入

// デフォルトは逐次実行
compute: (Int) -> Int = (n) => {
    a = heavy_calc(1)
    b = heavy_calc(2)  // 逐次実行、a の完了を待つ
    c = heavy_calc(3)  // 逐次実行、b の完了を待つ
    a + b + c
}

// spawn ブロックでデータフロー並列を導入
process: () -> Void = () => {
    spawn {
        users = fetch_users()   // 並列
        posts = fetch_posts()   // 並列
    }
    // 呼び出し元が結果を同期的にブロックして待つ
    render(users, posts)
}

3. エラー処理

yaoxiang
Result: (T: Type, E: Type) -> Type = { ok: (T) -> Result(T, E), err: (E) -> Result(T, E) }

process: () -> Result(Data, Error) = {
    data = fetch_data()?      // ? 演算子は透過的に伝播
    transformed = transform(data)?
    save(transformed)?
}

関連リソース

歴史アーカイブ

設計プロセスの歴史ドキュメントは docs/old/ ディレクトリに移動済み:

  • 初期アーキテクチャ設計
  • 废弃された提案
  • 時代遅れの実装計画