> -- Wlad писал(а):
> "истинных генериков" (максимально обобщённых), у нас нет первичности производства генериков или типов аргументов для них.

В случае использования интерфейсов первичность есть. Ограничивается лишь набор операций с экземплярами типов-аргументов. И все. Любой экземпляр любого типа (в т.ч. и "инстанцированного") может быть представлен как некоторый "стандартный" интерфейс и может использоваться в качестве типа-аргумента.

Большая "истинность" может быть достигнута лишь в смысле макроподстановок, когда инстанцирование происходит в контексте конкретного исходного текста, с учетом полиморфизма операций языка и контекстно зависимых вызовов неполиморфных функций для типов-аргументов.

> -- Wlad писал(а):
> ОЧЕНЬ не эффективно в смысле быстродействия...

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

> -- Wlad писал(а):
> МЕНЯТЬ? Скорее всего, вы имели в виду «производить, скорее всего новые варианты инстанцирования»?

Нет. Я имел в виду менять физический размер экземпляра. А так называемое "инстанцирование" происходит лишь однажды (при компиляции генерика и в модуле генерика), но особым образом, с учетом "динамической природы" экземпляров типов-аргументов. В исползовании "динамических" полей и состоит поддержка со стороны среды выполнения.

> -- Wlad писал(а):
> И ещё одна проблема. Типобезопасность. Я понимаю, как она решается в случае Си++ - там время компиляции. А вот в уже скомпилированном модуле это проверять? Даже по предлагаемому вами варианту? Придумывать «увязку с компилятором» для проверок?

Если делать "в лоб" - то все просто (добавить код динамической проверки типов и всё), но в реальности проверку делают статически на этапе компиляции. Если подумать - никакой проблемы типобезопасности нет. Грубо говоря - что положили, то и взяли. Если экземпляр связан с типом-аргументом, то компилятор разрешает работать экземпляру только с соответствующим типом-параметром.

> -- Wlad писал(а):
> Какие?

Например тот-же боксинг, но выделение памяти происходит одновременно (в том же блоке) с выделением памяти экземпляру генерика (как статически, так и динамически).