> -- Алексей Елин писал(а):
> В случае использования интерфейсов первичность есть.
Какая?
Взять коллекции – ни они не знают, что в них помещаться будет, в смысле типов, ни сами элементы не знают, что их туда помещать будут.
Коллекция, единственно, должна владеть размером, если хранит не ссылки, а сами элементы...

> -- Алексей Елин писал(а):
> Менее эффективно чем макроподстановки, но все же не так провально, а в некоторых случаях вообще без потерь.
В смысле провально? Катастрофично? Или с задержками? Ну так, а чем померить, когда «медленно», а когда – нет? А в случае ссылок, в , как ни крутите, дополнительную косвенность по обращению вводите. Для нескольких элементов это, может быть, и не так заметно, а когда графику или «мелкопорциальные» потоки данных обрабатываете – уже начинаете искать спасения...

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

Гипотетический пример.

## Код:
```
MODULE A;
OBJECT FixedLengthArray<ItemType, CONST N:INTEGER>
   items: ARRAY N OF ItemType;
   ...
END  FixedLengthArray;
```


И у меня есть два объявления:

## Код:
```
MODULE B;
VAR
   ArrayOfInt: FixedLengthArray<INTEGER,25>;
   ArrayOfFloat: FixedLengthArray<REAL,100>;
```


Если мы храним не ссылки, то объясните мне, как у меня один и тот же экземпляр коллекции в одном и том же месте памяти может обрабатывать объект с разным объёмом занимаемой памяти?

Другое дело, что я понимаю, что (НАПРИМЕР), в модуле A я строю нормально vtbl (или просто ссылки на процедуры, если методы – невиртуальные), НО! В A «некоторые» методы или процедуры (назовём их «вспомогательными»), необходимые для непосредственной обработки обращения к элементам НЕ ОПРЕДЕЛЕНЫ. При объявлении же конкретных массивов, объявляются (в данном случае – анонимные) типы, в которых эти процедуры уже определены. Здесь уже вопросов нет. Мы и гибкость получили, и проверки во время компиляции по типам.

Кстати, начинают проясняться мои непонятки (вот пока сам не начнёшь рассуждать... :о) ) с «где инстанцировать»? Наверное я не очень понятно объяснил. Я имел в виду «построение» «инфраструктуры поддержки типа». То есть «тэговой структуры» для инстанцированного от генерика типа.
В принципе, больших потерь от дублирующих объявлений, навроде

## Код:
```
MODULE M1;
VAR
   ArrayOfInt: FixedLengthArray<INTEGER,25>;
...

MODULE M2;
VAR
   ArrayOfInt: FixedLengthArray<INTEGER,25>;
...
```


... не привнесёт, я думаю.

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