設計理念
ここでは,Yuライブラリの設計理念を述べる. これはすべての詳細規則に優先する,上位となる設計原則を規定する. 個別の設計原則において解釈の衝突が生じた場合,本理念に基づいて判断されるものとする.
目的
Yuライブラリは,C++の汎用ライブラリを,単なる機能の集合ではなく意味論的に一貫した体系として構築することを目的とする. Yuライブラリは特定の領域を対象とするフレームワークではなく,言語機能を拡張するための小さく独立した抽象体系を提供するライブラリ群である.
基本原則
以下に示す原則は,Yuライブラリにおけるすべての設計判断の基礎となる.
意味論優先
Yuライブラリにおいて,公開の対象となるのは実装ではなく意味論である.
APIは,型や実装そのものではなく,ユーザが観測可能な振る舞いおよび意味論的な契約によって定義される. したがって,エンティティの具体的な定義や内部表現は,意味論的に必要でない限りは規定されない. エンティティの識別子が公開仕様に含まれるのは,それ自体が意味を持つ場合に限られ,そうでない場合は公開されない.
観測可能性
ライブラリの公開境界は,アクセス可能性ではなく,意味論的な観測可能性によって決定される. ユーザが意識的に利用でき,その動作や性質を前提としてコードを書ける要素のみが,ライブラリを構成する. 逆に,ユーザコードに現れない要素や,動作を観測できない構造などは,公開仕様に含まれない.
非侵入性
Yuライブラリは,ユーザ定義型の設計の形を強制しない. 既存のユーザ型をライブラリの意味論へ統合する場合,それは外部から与えることのできる補完によって行われ,特定の性質への変更を要求してはならない. ただし,ユーザがライブラリのために新たな型を定義することを前提とする拡張性については,特定の性質を要求してもよい.
抽象性の解放
Yuライブラリは,意味論的に許容される限り,具体的な型への依存を避けた,抽象的なインタフェースを提供する. 仕様は満たされるべき要件を定義するが,それを満たす具体的な型を定義してはならない.
構造の共通性
Yuライブラリでは,論理構造と物理構造を相互に対応させる. 具体的には,サブライブラリ構造,名前空間階層,ヘッダおよびディレクトリ配置を対応させる. これはユーザが構造からライブラリの構成を理解できることを目的とする.
ゼロオーバーヘッド原則
Yuライブラリが提供するすべての機能は,可能な限り追加の実行コストを導入しないことを目標とする. Yuライブラリを用いた実装は,Yuライブラリを用いない実装と比較してオーバーヘッドを増やしてはならない. ただし,可読性および意味論的な明確性を犠牲にしてはならない.
後方互換性
Yuライブラリは原則として後方互換性を維持する. 既存APIの仕様は安定したものとして扱われ,新機能の追加は既存コードに影響を与えてはならない.
既存コードが利用できなくなる破壊的変更は原則として許可されない. 問題の修正などのために必要な場合は,非推奨化と改善された機能の追加によって対応する.