Показать сообщение отдельно
  #40  
Старый 01.04.2014, 11:11
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Прямые указатели зачастую позволяют значительно повысить скорость обработки. Например, можно иметь буферы, по которым бегают несколько указателей, и все эти указатели объединены в структуру. Или обход массива через указатели. Или из одних и тех же объектов в памяти строятся разные не владеющие ими структуры (дерево и массив, к примеру).
Многие из подобных вещей после запрета указателей, конечно, остаются реализуемыми, но с большими проблемами и теряют всю суть. А если указатели не запретить, то и собирать мусор каким-либо образом становится почти невозможно - ведь я запросто могу поставить указатель не на начало объекта (напр. на середину массива или на какое-то поле объекта), и сохранить его в какой-нибудь структуре. И будет совершенно непонятно, надо удалять объект или нет.
Что же касается "за памятью должен следить компьютер, а не программист" - видел как-то программу на .NET, которая после часа работы написала "Not Enough Memory" и отрубилась. Также сталкивался с тем, что всеми любимый SharpZipLib течет на некоторых архивах (у меня он обрабатывал круглые сутки десятки тысяч штук). То есть кривые руки и отсутствие мозгов даже на таком ограниченном языке, как C#, могут добиться утечек. А при прямых руках - мне бы и в голову не пришло уменьшать длину массива, не удаляя объекты, если я знаю, что это массив объектов. Поэтому я предпочитаю в любых мало-мальски критичных вещах следить за памятью самостоятельно. В большинстве случаев это не так трудно.
Цитата:
было предложено заменить это эрзацем управляемого кода
Вообще-то управляемый код очень близок к концепции ООП, чрезмерное использование которой я недолюбливаю. Ведь там по сути даже местный ассемблер (байткод) "аппаратно" поддерживает объекты. Абстракция от всего и вся, только и делай, что клепай объекты да делай их связи. Не надо думать о компьютере, о памяти, о ресурсах и скорости. Просто клепай абстракции. Все остальное сделает стометровая либа "под капотом". К чему это приводит, можно посмотреть: безумное количество быдлокода, который на C/Delphi просто не мог бы запуститься, тормоза и другие веселости. Тотальное абстрагирование располагает к этому.
А еще их легко ломать...
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием