budden писал(а):
Аварийная деинициализация по идее должна содержать в себе грозное и неубираемое предупреждение со словами: данная кривая программа не подчистила за собой. В идеале программа должна падать.
Я тебя умоляю. Падать? В продакшине? Что за экстремизм. Диагностика - да, хотя и зависит от характера потреянного ресурса.
budden писал(а):
Причина проста - неизвестно, когда произойдёт сборка мусора, а при консервативном сборщике мусора - неизвестно, произойдёт ли она вообще. Поэтому отпускание ресурсов не гарантировано.
Все правильно. Но применительно к COM и BB - такая аварийная деинициализация это компромисс. Ты давно вручную ссылки считал? Мне вот до сих пор приходится время от времени, когда надо состыковаться с ObjectiveC кодом на macOS. Это каждый раз как первый раз - тупые трудноуловимые баги. В языке без RAII или аналога ARC от Apple остаются только GC и финалайзеры.
Если в языках без GC ты уже заботишься об освобождении памяти, то тебе достаточно естественно добавить и ручной декремент ссылок. Но если у тебя язык с GC в котором отродясь не было никаких Free() и т.п., то добавление всего-лишь одной COM ссылки, которую надо считать, затрагивает сразу всю иерархию объектов - у всех у них теперь должен быть Free(), на который можно повесить декремент ссылки. Работать на практике это не будет, остаются только финалайзеры, так что разработчики ББ выбрали абсолютно правильное решение.