Проблема, насколько я понимаю, связана с тем, что VB6 (и его предшественники) имеют корни в COM и системе сбора мусора с подсчетом ссылок.
Представьте, например, что вы объявляете ссылку на объект из сторонней библиотеки. Этот объект имеет счетчик ссылок COM, который используется как для поддержания его работоспособности, так и для определения момента его уничтожения. Он не уничтожается, когда вы устанавливаете его в Nothing, но когда счетчик ссылок объекта достигает нуля.
Теперь не все компоненты COM были написаны на Visual Basic. Некоторые были написаны на C или C ++. Структурная обработка исключений существует не во всех языках. Таким образом, если произошла ошибка, счетчик ссылок на объект не гарантированно был должным образом уменьшен, и было известно, что COM-объекты зависают дольше, чем предполагалось. Это не было проблемой с Visual Basic, как таковой. Это была проблема COM. (И это, как вы могли заметить, именно поэтому .NET не использует подсчет ссылок.)
Вот почему разработчики Visual Basic стали одержимы освобождением ссылок на объекты до выхода из подпрограмм. Вы просто не знаете, какой компонент вы размещаете под капотом. Но когда вы отпускаете ссылку на него, вы, по крайней мере, публикуете счетчик ссылок на него. Это стало почти религиозной мантрой. Объявить, использовать, выпустить. Это был COM способ делать вещи.
Конечно, Visual Basic может быть лучше или быстрее в разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы это было ЯВНО, что эти объекты были выпущены. Когда вы пытаетесь отследить утечку памяти, у вас есть немного уверенности.