Дож писал(а):И завернуть в дженерик! Чтобы общая задача была решена в одном месте, а не копипастилась на каждый вариант использования динамического массива в программе. Абсолютно согласен.
Аха. либо обернуть всё в класс и использовать type cast.
Дож писал(а):Одно дело — последовательный олдскульщик во всём, другое дело — человек, который говорит, что «array of хорошо получилось», но при этом другие полезные нововведения схожего толка неприемлет.
"Полезные новведения" это вопрос вкуса. Сколько срача было из-за IfThen() и ... что? по причинам вкусовых различий просто ничего не стали делать. Зато, по тем же вкусовым причинам нас встречает NewPascal
Дож писал(а):Как эта проблема решена в TList или TStringList? Как дебаггер отличает с каким типом был вызван метод у TList'а?
Ак там один тип Если ты поставил Бряк-поинт в том TList, то бряк-поинт сработает.
А если ты поставил в Бряк-поинт в методе дженерика, то дебаггер может и не останиватся. Т.к. код при специализации может быть выкинут (на усмотрение комплиятора). Или ещё хуже, остановится, но не в ожидаемой специализации.
Дож писал(а):Этот вопрос должен мне продемонстрировать неудачность идеи метода Last, потому что есть несколько вариантов её реализации?
А я описал проблемы с Last, в ответе Лексу Айрину
* неэффективность
* потенциальная некорретность
Дож писал(а):Так не демонстрирует же. Или что? Какой ответ от меня ожидается? Ну, я могу сказать, что чисто из логических соображений этот метод не должен использоваться в корректной программе, Range Checking в рантайме не нужен, пусть будет UB.
Если метод .last не должен использовать в корректной программе, то он нужен для написания некорретных програм?
Дож писал(а):Сейчас мы можем написать A[I] для несуществующего индекса I, программа может свалиться, а может не свалиться в зависимости от неизвестных обстоятельств, и это не является какой-то серьёзной проблемой.
По-моему, если программа "может не свалится" при A[i], где i - несуществующий индекс, это очень серьёзная проблема.
По двум причинам:
1-х - в алгоритме ошибка - i обязан быть существующим.
2-х - "может не свалится" а "может и свалится" - показатель низкого качества программного обеспечения. Если a[i] вернул хрень и программа не упала сразу, то есть возможность что она упадёт потом. И что ещё хуже, привидёт к потере чьих-нибудь ценных данных.
Пусть валится всегда - ошибка должна быть ошибкой. О ней нужно знать и её исправлять.