Когда происходит создание общего экземпляра (т. е. что означает это слово)?

Этот вопрос основан на обсуждении (теперь удаленном) ответа на этот вопрос. Это больше касается терминологии, чем фактической семантики программирования.

Что такое обобщенное «создание экземпляра»? Это происходит во время компиляции или во время выполнения?

Я буду ссылаться на последний проектстандарта Ады 2012 года.

Значение термина generic_instantiationясно; это синтаксическая конструкция, что-то вроде

package Inst is new Generic_Package(This => That);

Мой вопрос касается глагола «создавать экземпляр».

Я всегда думал об «экземпляре» как о чем-то, что происходит во время компиляции. Это расширение универсального шаблона, и оно возникает, когда компилятор встречает generic_instantitionв единице компиляции.

Но другие источники ссылаются на «создание экземпляра», происходящее, по крайней мере, опционально, во время выполнения.

В этой статье в Википедииговорится:

Чтобы создать экземпляруниверсальной единицы, программист передает фактическое параметры для каждого форм. Затем общий экземпляр ведет себя просто как и любая другая единица. Можно создавать экземпляры общих единиц в во время выполнения, например, внутри цикла.

, что, по-видимому, подразумевает, что создание экземпляра может происходить либо во время компиляции, либо во время выполнения.Я думаю, это относится к уточнениюgeneric_instantiation, которое происходит во время выполнения — но тогда вся обработка происходит во время выполнения, да?

Мне было удивительно трудно получить окончательный ответ на этот вопрос от Ada RM. В глоссарии нет записи (Приложение N) для «создания экземпляра» или «создания экземпляра».

Самое близкое, что я мог найти, было это утверждение в 12.2 (Общие тела), параграф 2, в разделе «Динамическая семантика»:

Разработка общего тела не имеет никакого другого эффекта, кроме как установить, что с этого момента родовая единица может быть конкретизирована без провала Elaboration_Check.

, что косвенноподразумевает, что создание экземпляра является событием времени выполнения.

Правильно ли глагол «создать экземпляр» относится к событию времени компиляции (расширению универсального шаблона)? К событию времени выполнения (разработка generic_instantiation)? Если второе, то как мы называем первое? Является ли Ada RM достаточно ясной в этом вопросе?

7
задан Community 23 May 2017 в 12:21
поделиться