4.定義
この標準化のために、以下の定義を与えます。
その他の用語はそれらがイタリックで記述されたところか、構文ルールの左側に定義されています。
この標準案で明示的に定義されている用語は、どこかで定義された似たような用語を暗黙のうちに参照しているなどと言うことはありません。
この標準案で定義されていない用語については、標準C++ ISO/IEC 14882:2003 によって解説されています。
- application(アプリケーション)
-
エントリ・ポイントを持つアセンブリを示します。
アプリケーションが実行されるとき、新しいアプリケーション領域が作成されます。
アプリケーションのいくつもの違うインスタンスは、同時に同じマシン上に存在することができます。
そして、それぞれが独自のアプリケーション領域を持ちます。
- application domain(アプリケーション領域)
-
アプリケーション状態のコンテナとして振る舞うことで、アプリケーションの分離を可能にするエントリ。
アプリケーション領域はコンテナとして、アプリケーション内で定義された型の境界として、そして、そこで利用されるクラスのライブラリとして振る舞います。
あるアプリケーション領域にロードされた型は他のアプリケーション領域にロードされた同じ型と明確に区別され、CLI ヒープ上のオブジェクトはアプリケーション領域間で直接共有されることはありません。
アプリケーション領域ごとにそれぞれの型の静的変数の自分自身のコピーを保持しており、静的コンストラクタはアプリケーション領域ごとに一回だけ実行されます。
実装依存ポリシーの提供や、アプリケーション領域の生成、破棄のメカニズムは、実装ごとに自由にしてください。
- assembly(アセンブリ)
-
プログラムのコンパイルの結果として、コンパイラに出力される一つ以上のファイルを示します。
アセンブリはロード可能なコードや、その他の単一の機能を実装するために一緒にされたリソースのモジュールとして、設定付けされたセットです。
アセンブリは型やそれらの型を実装するために使用される実行可能なコードや他のアセンブリへの参照を含むことができます。
アセンブリの物理的表現については CLI 標準(§3)で定義されています。本質的には、アセンブリとはコンパイラの出力結果です。
エントリ・ポイントを持つアセンブリはアプリケーションと呼ばれます。(「metadata (メタデータ)」を参照のこと)
- attribute(属性)
-
記述的な情報を含む型と、もしくは、そのメンバの文字列化情報。
大多数の一般的な属性はすでに定義済みなので、また、それに関連するメタデータ中に特殊なエンコーディングで保持しているので、ユーザー定義属性もまたメタデータに追加されます。
- boxing(ボックス化)
-
CLI ヒープ上に領域確保されたボックス V への、任意の値型 V から V^ への明示的、ないし、暗黙的な変換で、そのボックスに値がコピーされます。(「unboxing (非ボックス化)」を参照のこと)
- CIL(共通中間言語)
-
仮想実行システム(VES)の構成セットである中間言語(Common Intermediate Language)。
この命令セットは CLI 標準(§3)のパーティションIIIで定義されている。
- CLI array(CLI配列)
-
CLI規定配列。
標準 C++ スタイルの配列は、あえて区別する必要がある時、ネイティブ配列、もしくは、単に array と表記します。
CLI配列はネイティブな配列と異なり、CLIヒープ上に領域確保され、一つ以上の階層を持つことができます。
- CLS-compliance(CLS-コンプライアンス)
-
「共通言語仕様(CLS)」は相互互換性のルールを定義し、アセンブリ中に定義したものの外部に見えるアイテムはこれだけであると定義しています。
CLS-コンプライアンスは CLI 標準(§3)のパーティション I に記述されています。
- definition, out-of-class(クラス外定義)
-
標準C++で言う、「非インライン定義」の同意語。
- delegate(デリゲート)
-
一つ以上の関数をカプセル化することができるインスタンスの ref クラス。
デリゲート・インスタンスと適切な引数の組を与えることで、その引数の組を持ったデリゲート・インスタンスの持つ関数すべてを呼び出すことができます。
- event(イベント)
- クラスや CLI オブジェクトに通知を提供することができるメンバ。
- field(フィールド)
- 標準 C++ で言うところの「データ・メンバ」の同意語。
- function, abstract(抽象関数)
- 標準C++で言うところの「純粋仮想関数」の同意語。
- garbage collection(ガベージ・コレクション)
- CLIヒープ上に領域確保されたメモリを自動的に破棄するプロセス。
- gc-lvalue(gc-左辺値)
-
CLIヒープ上に領域確保されたエンティティへの参照の表現。(「lvalue (左辺値)」を参照のこと)
- handle(ハンドル)
-
ハンドルはCLI仕様で「オブジェクト参照」と呼ばれています。
任意の CLI 型 T について、記述 T^ h は T型のハンドル h を示し、h は CLI ヒープ上にあるオブジェクトを指し示しています。
ハンドルは追跡し、再拘束し、オブジェクトだけを指し示すことができます。(「type, reference, tracking (参照型追跡)」を参照のこと)
- heap, CLI(CLIヒープ)
-
CLIによって規定された仮想実行システム(VES)のガベージ・コレクタの管理下にある(gcnew によってアクセスする)格納領域。
(「heap, native (ネイティブ・ヒープ)」を参照のこと)
- heap, native(ネイティブ・ヒープ)
-
標準C++(SS18.4)によって定義されているダイナミックな( new によってアクセスする)格納領域。
(「heap, CLI (CLI ヒープ)」を参照のこと)
- instance(インスタンス)
-
型の実体(インスタンス)。
- lvalue(左辺値)
-
標準C++(SS3.10)で定義されているものと同意。(「gc-lvalue (gc-左辺値)」を参照のこと)
- metadate(メタデータ)
-
共通型システム(CTS)によって定義された型を参照し、記述するためのデータ。
メタデータはどんな特定のプログラミング言語とも独立した形で格納されます。
そのため、メタデータはプログラムを操作するツール(たとえば、コンパイラやデバッガ)間で、仮想実行システム(VES)とそれらのツールとの間と同様の共通な互換性を提供します。
- pinning(ピンニング)
-
CLIヒープ上のオブジェクトの配置を(一時的に)固定位置に保つためのプロセスで、その間、オブジェクトのアドレスは保持され、オブジェクトは一定の配置位置に残っています。
- property(プロパティ)
-
名前付けされた値とその値へのアクセス関数を定義するメンバー。
プロパティ定義はその値へのアクセス規約を定義します。
それによって、プロパティ定義では存在するべきアクセス関数と期待された関数規約を指定します。
- rebinding(再バインディング)
-
ハンドルやポインタを CLI ヒープ上の同一のオブジェクト、ないし、別のオブジェクトに結びつける働きのこと。
- rvalue(右辺値)
-
標準C++(SS3.10)で定義されているものと同意。
- tracking(トラッキング)
-
CLI ヒープ上に確保されたオブジェクトの配置を追跡し続ける働きのこと。
この働きはオブジェクトがその生存期間の間で(ネイティブ・ヒープのオブジェクト、これは決して移動しません、と違い)移動する可能性があるために必要です。
トラッキングはガベージ・コレクションの間、仮想実行システムによって管理されています。
トラッキングはハンドルと参照追跡の固有の要素です。
- type, boxed(ボックス型)
-
「type, class, value, boxed(ボックス化値クラス型)」を参照のこと。
- type, class, any(任意のクラス型)
-
任意のCLI、ネイティブ・クラス型のこと。
- type, class, CLI
-
ref クラス型、値クラス型、ないし、インターフェイス・クラス型のこと。
- type, class, interface(インターフェイス・クラス型)
-
クラスの実装が定義するべき仮想メンバのセットを宣言している型。
インターフェイス・クラス型は CLI 型です。
- type, class, native
-
通常の標準 C++ のクラス(class, struct, ないし、union を使って宣言されたもの)。
- type, class, ref(refクラス型)
-
フィールド、メンバ関数、ネスト型を含むことができる型。refクラス型は CLI 型です。
- type, class, value(値クラス型)
-
フィールド、メンバ関数、ネスト型を含むことができる型。
値クラス型のインスタンスは値となります。それらは直接そのデータに含まれるため、ヒープによる領域確保は必要ありません。
値クラス型は CLI 型です。
- type, class, value, boxed(ボックス化値クラス型)
-
ボックス化値クラスはCLIヒープ上の値クラスのインスタンスです。値クラス V について、ボックス化値クラスは V^ の形式を取ります。
- type, class, value, simple(単純値クラス型)
-
ネイティブ・クラス型に組み込まれ、new 演算子によって領域確保される値クラス型のサブセット。
- type, fundamental(基本型)
-
標準C++(SS3.9.1)に定義されており、実装によって提供される CLI 値クラス型にそれぞれが対応している算術用の型。
(これらには bool, char, wchar_t が含まれているが、列挙型は除外されている)
- type, handle(ハンドル型)
-
「ハンドル」を扱うための長い手。
- type, pointer, native(ネイティブ・ポインタ型)
-
標準C++(SS8.3.1)で定義されるポインタ型。
(ハンドルと違って、ネイティブ・ポインタは、ネイティブ・ヒープ上のオブジェクトの配置は決して移動しないので、オブジェクトの追跡を行いません。)
- type, reference, native(ネイティブ参照型)
-
標準C++(SS8.3.2)で定義されている参照型。
- type, reference, tracking(追跡参照型)
-
オブジェクトの CLI ヒープ上の配置位置がガベージ・コレクタによって移動する時、オブジェクトを追跡し保持できる参照。
任意の型 T に対して、宣言 T% r は型 T の追跡参照 r を宣言します。(「ハンドル」を参照のこと)
- unboxing(非ボックス化)
-
System::Object^ 型から任意の値クラス型へ、System::ValueType^ 型から任意の値クラスへ、V^(値クラス型のボックス化された形)からV(値型)へ、ないし、任意のインターフェイス・クラスからそのインターフェイスを実装した値クラス型への、明示的変換。
(「boxing(ボックス化)」を参照のこと)
- Virtual Execution System(VES)(仮想実行システム)
-
このシステムは共通型システム(CTS)モデルを施行し、実装します。
VES は CLI で記述されたプログラムを呼び出し、実行することに責任を持ちます。
VES は、実行時に別々に分割されて生成されたモジュールを結合するためにメタデータを利用し、CIL とデータを実行するために必要なサービスやデータを提供します。
たとえば、関数のためにコード中でアドレスが与えられると、その関数を記述したメタデータを配置することができなければなりません。
VES はまた、スタックを渡り歩き、例外を処理し、セキュリティ情報を取得し蓄えることができなければなりません。
VES は「実行エンジン」とも知られています。