Кстати, если в язык не ввели бы ограниченные встроенные generic-и, то вероятно выкручивались бы традиционно для С-мира -- через какие-то макросы. Видимо, желание быть поближе к скриптовым языкам аля Питон сыграло роль.
А "С-шники" обычно не в курсе "Pascal"-мучений без generic-ов. В своё время была оригинальная библиотека AntiDOT для реализации "STL":
https://sourceforge.net/projects/adot/Код примерно в стиле:
Код:
var
  n : TTInteger;
...  
  n := TTInteger.create(TCVector);
  n.add([1,2,3,7,6,5]);
...
Контейнеры как-то сбоку, основная работа через "данные". Для каждого встроенного типа вводится абстракция -- тип-поле контейнера (обычный тип -- некое значение, абстракция выше -- совокупность значений, управляемая неким образом). На примере выше используется вектор. Так используем список (list):
Код:
var
  n : TTInteger;
  m : TTDouble;
...
  n := TTInteger.create(TCList, [TTDouble]);
  m := n.fields[1] as TTDouble;
  n.AddRecord([1, 0.999]);
...
В create указываем тип контейнера и возможный список (типов) дополнительных полей (в данном случае одно поле).
Так работаем с map:
Код:
 
var
  n : TTDouble;
  s : TTString;
...
  n := TTDouble.create(TCMultimap, [TTString]);
  s := n.Fields[1] as TTString;
  n.Map[3.14] := 'Pi';
  n.Map[2.72] := 'E';
  s[n.Add(1.618)] := 'Golden Ration';
  s[n.Add(1.618)] := 'Golden';
...
Все алгоритмы (включая универсальные, т.е. сортировки, поиски и т.д.) через методы "данных", а не контейнеров. Не обычно, но практично. Контроль типобезопасности, нет оверхеда в виде использования каких-то универсальных широких типов аля variant. Нет проседаний скорости, т.к. отсутствуют  механизмы косвенного обращения через указатели в каком-то виде (данные хранятся "напрямую" в контейнере, при доступе нет промежуточного обращения через какие-то аля "интерфейсы". Когда необходимо, сами "прикладные" данные могут быть как явный какой-то pointer).
Как для языка "скриптового" уровня даже удобненько, особенно когда структура объектов заранее не известна.
В общем, по-своему качественная концепция, расширяемая для разнообразного применения без усложнений в языке.