Я вважаю, що, розробивши реалізатори GC, ви не можете прискорити GC з недійсним. Я впевнений, що вони вважають за краще, щоб ви не переживали себе з тим, як / коли працює GC - ставитесь до цього, як до цієї всюдисущої істоти і спостерігаючи за вами та з… .
Особисто я часто явно встановлюю змінні значення недійсними, коли закінчую з ними як форму самодокументації. Я не декларую, використовую, а потім встановлюю нульову пізніше - я скасовую нуль відразу після того, як вони більше не потрібні. Я прямо кажу: "Я офіційно закінчую з тобою ... не зник ..."
Чи потрібна зведення нанівець мовою GC'd? Ні. Це корисно для GC? Можливо, так, може, ні, не знаю напевно, дизайном я справді не можу це контролювати, і незалежно від сьогоднішньої відповіді з цією версією чи іншою, майбутні реалізації GC можуть змінити відповідь поза моїм контролем. Плюс, якщо / при оптимізації нульової оптимізації це трохи більше, ніж примхливий коментар, якщо ви хочете.
Я вважаю, якщо це робить мій намір зрозумілішим для наступного бідного дурня, який йде по моїх слідах, і якщо це "може" потенційно допомогти GC іноді, то воно того варто для мене. Переважно це змушує мене почувати себе впорядковано та ясно, а Монго любить відчувати себе впорядковано та ясно. :)
Я дивлюся на це так: мови програмування існують, щоб люди давали іншим людям уявлення про наміри, а компілятор запитував на роботу, що робити - компілятор перетворює цей запит на іншу мову (іноді кілька) для процесора - процесор (и) може дати зрозуміти, якою мовою ви користувалися, налаштування вкладки, коментарі, стилістичні акценти, назви змінних тощо - це все про бітовий потік, який розповідає про те, які регістри та опкоди та місця пам’яті можна згорнути. Багато речей, написаних у коді, не перетворюються на те, що споживається процесором у послідовності, яку ми вказали. Наш C, C ++, C #, Lisp, Babel, асемблер або будь-яка інша теорія, а не реальність, написана як робота. Що ви бачите, це не те, що ви отримуєте, так, навіть мовою асемблера.
Я розумію, що "непотрібні речі" (наприклад, порожні рядки) "- це не що інше, як шум і захаращення коду". Це я був раніше в кар’єрі; Я цілком це розумію. У цей момент я схиляюся до того, що робить код яснішим. Це не так, як я додаю до своїх програм навіть 50 рядків "шуму" - це кілька рядків тут чи там.
Бувають винятки з будь-якого правила. У сценаріях з мінливою пам'яттю, статичною пам'яттю, умовами перегонів, одиночними кнопками, використанням "несвіжих" даних і всіма подібними гнилями, це різне: вам потрібно управляти власною пам'яттю, блокувати і зводити нанівець як приклад, тому що пам'ять не є частиною Всесвіт GC'd - сподіваємось, це всі розуміють. Решту часу з мовами GC'd це вже питання стилю, а не необхідності або гарантованого підвищення продуктивності.
В кінці робочого дня переконайтеся, що ви розумієте, що підходить до ГК, а що ні; заблокувати, розпоряджатися та зводити нанівець відповідним чином; віск на, віск від; вдихнути, видихнути; а для всього іншого я кажу: якщо вам добре, зробіть це. Ваш пробіг може змінюватися ... як слід ...