Настоящий сборщик мусора это хорошо, но, вот есть, к примеру, двусвязный список, с элементами вышеуказанной структуры и что, в методе Clear этот список и расцеплять не надо? Почему там стоит только items := NIL?
PROCEDURE (l: List) Clear*;
BEGIN
l.items := NIL;
END Clear;
Если бы это был односвязный список, то всё понятно, этого достаточно, хотя я бы всё равно пробежался по списку и расцепил элементы - всё gc работы меньше - но список-то двусвязный, как gc эту гадость разрулит? Никак.
Вопросы возникли потому, что у клиента на ЧЯ крутится довольно серьезная вещь, за которую он когда-то заплатил немало зеленых рублей, но сейчас происходит перенос на альтернативную платформу и весь код приходится проверять на совместимость и адекватность.