Этот вопрос основан на обсуждении (теперь удалено) в ответ на этот вопрос . Это больше о терминологии, чем о фактической семантике программирования.
Что именно является родовым "воплощением"? Это происходит во время компиляции или во время выполнения?
Я буду ссылаться на последний вариант стандарта Ada 2012.
Значение термина generic_instantiation ясно; это синтаксическая конструкция, что-то вроде
package Inst is new Generic_Package(This => That);
Мой вопрос о глаголе "экземпляр".
Я всегда думал об «создании экземпляров» как о том, что происходит во время компиляции. Это расширение универсального шаблона, и оно происходит, когда компилятор встречает generic_instantiation в модуле компиляции.
Но другие источники ссылаются на "создание экземпляров", происходящее, по крайней мере, необязательно, во время выполнения.
Эта статья в Википедии гласит:
Чтобы создать универсальную единицу, программист передает фактический
параметры для каждого формального. Общий экземпляр тогда ведет себя просто
как и любой другой блок. Можно создать единичные единицы в
время выполнения, например внутри цикла.
, что, по-видимому, означает, что создание экземпляров может происходить либо во время компиляции, либо во время выполнения. Я думаю, что это относится к разработке generic_instantiation , которая происходит во время выполнения - но тогда вся разработка происходит во время выполнения, да?
Мне было удивительно трудно получить окончательный ответ на этот вопрос от Ада РМ. Нет записи глоссария (Приложение N) для «создания экземпляров» или «создания экземпляров».
Самым близким, что я смог найти, было это утверждение в параграфе 2 12.2 (Универсальные тела) в разделе «Динамическая семантика»:
Разработка общего тела не имеет никакого другого эффекта, кроме как
установить, что общая единица может с тех пор быть создан
без сбоев проверки Elaboration_Check.
что косвенно подразумевает, что создание экземпляра является событием времени выполнения.
Правильно ли относится глагол "экземпляр" к событию времени компиляции (развертывание универсального шаблона)? Для события во время выполнения (разработка generic_instantiation )? Если последнее, что мы называем первым? Ада РМ настолько ясна, насколько это необходимо по этому вопросу?