この質問は、this questionへの応答として(今削除された)議論に基づいています。それは実際のプログラミングのセマンティクスよりも専門用語です。一般的なインスタンス化はいつ行われますか(つまり、単語の意味は何ですか)?
具体的には「インスタンシエーション」は何ですか?コンパイル時または実行時に発生しますか?
Ada 2012規格のlatest draftを参照します。
用語の意味generic_instantiationは明確です。それは構文のようなものです
package Inst is new Generic_Package(This => That);
私の質問は動詞「インスタンス化」についてです。
私はいつも「インスタンス化」をコンパイル時に発生するものと考えてきました。これは汎用テンプレートの拡張であり、コンパイラがgeneric_instantiationをコンパイル単位で検出したときに発生します。
しかし、他の情報源は、少なくともオプションで実行時に「インスタンス化」が行われることを指します。
にインスタンス化は、一般的なユニット、プログラマは、各仮ため実際 パラメータを渡します。一般的なインスタンスは、他のユニットと同様に、ちょうど のように動作します。実行時に、例えばループ内で汎用単位を にインスタンス化することは可能です。
これは、インスタンス化がコンパイル時または実行時に発生する可能性があると思われるようです。これは実行時に発生する詳細generic_instantiationを参照していると思いますが、実行時にすべての詳細が発生しますか?
私はAda RMから決定的な答えを得ることは驚くほど困難であることがわかりました。 「インスタンス化」または「インスタンス化」用の用語集エントリ(Annex N)はありません。
「動的意味論」の下で、私は12.2(ジェネリック機関)第2項では、この文だった見つけることができる最も近い:
は一般的な体の精緻化が よりも、他の効果もありませんが、一般的なことを立証ユニットはその後、Elaboration_Checkに失敗することなく のインスタンス化が可能です。
は、間接的には、インスタンスが実行時のイベントであることを意味します。
"instantiate"という動詞は、コンパイル時のイベント(一般的なテンプレートを展開する)を正しく参照していますか?実行時のイベント(generic_instantiationを精緻化する)に?後者の場合は、前者とはどういう意味ですか? Ada RMはこの時点で必要なだけ明確ですか?
インスタンス化とは、ちょうど英語に基づいているように見えますが、インスタンスの作成は実行時と同じように思えます。 –
@DonRoby:ああ、しかし、 "インスタンス"は何ですか?テンプレートを展開した結果のインスタンスが* code *の場合、コンパイル時です。 –
@DonRoby:緩やかな類推:Cのマクロ展開は、実行時ではなくコンパイル時に行われます。明らかに、Adaジェネリックスは同じものではありませんが、同じ原理のいくつかが適用されます。 –