Wierzę, że z projektu implementatorów GC nie można przyspieszyć GC z zerowaniem. Jestem pewien, że wolą nie martwić się o jak / kiedy GC prowadzi - traktować go tak wszechobecne Istota ochrony i czuwa nad i dla ciebie ... (łuki głową w dół, podnosi pięść do nieba) .. .
Osobiście często jawnie ustawiam zmienne na null, kiedy skończę z nimi jako formę samokontroli. Nie deklaruję, używam, a potem ustawiam na zero później - zeruję natychmiast po tym, gdy nie są już potrzebne. Mówię wprost: „Oficjalnie skończyłem z tobą ... odejdź ...”
Czy konieczne jest anulowanie w języku GC? Nie. Czy to jest pomocne dla GC? Może tak, może nie, nie wiem na pewno, z założenia naprawdę nie mogę tego kontrolować i niezależnie od dzisiejszej odpowiedzi z tą wersją, przyszłe implementacje GC mogą zmienić odpowiedź poza moją kontrolą. Plus, jeśli / kiedy zoptymalizowane jest zerowanie, to niewiele więcej niż fantazyjny komentarz, jeśli chcesz.
Sądzę, że jeśli dzięki temu moje zamiary staną się bardziej zrozumiałe dla następnego biednego głupca, który pójdzie w moje ślady, a jeśli to „może” czasem pomóc GC, to warto. Głównie sprawia, że czuję się schludnie i czysto, a Mongo lubi czuć się schludnie i czysto. :)
Patrzę na to w ten sposób: istnieją języki programowania, dzięki którym ludzie dają wyobrażenie o zamiarach i kompilatorowi zapytanie o zadanie do wykonania - kompilator konwertuje to żądanie na inny język (czasem kilka) dla procesora - procesor (y) może dać sygnał, jakiego języka użyłeś, ustawień twojej karty, komentarzy, akcentów stylistycznych, nazw zmiennych itp. - procesor dotyczy strumienia bitów, który informuje go o tym, jakie rejestry, kody operacyjne i lokalizacje pamięci mają się zmieniać. Wiele rzeczy napisanych w kodzie nie przekształca się w to, co zużywa CPU w podanej przez nas sekwencji. Nasz C, C ++, C #, Lisp, Babel, asembler lub cokolwiek to jest teoria, a nie rzeczywistość, napisane jako zestawienie pracy. To, co widzisz, nie jest tym, co dostajesz, nawet w języku asemblera.
Rozumiem, że sposób myślenia „niepotrzebnych rzeczy” (takich jak puste linie) „to nic innego jak szum i niepotrzebny kod”. To byłem ja wcześniej w mojej karierze; Całkowicie to rozumiem. W tym momencie pochylam się w kierunku tego, co czyni kod wyraźniejszym. To nie tak, że dodałem nawet 50 linii „szumu” do moich programów - to kilka linii tu czy tam.
Istnieją wyjątki od każdej reguły. W scenariuszach z pamięcią ulotną, pamięcią statyczną, warunkami wyścigu, singletonami, użyciem „przestarzałych” danych i tego rodzaju zgnilizny, to jest inne: POTRZEBUJESZ zarządzać własną pamięcią, blokować i unieważniać jako apropos, ponieważ pamięć nie jest częścią wszechświat GC'd - mam nadzieję, że wszyscy to rozumieją. Reszta czasu w językach GC to kwestia stylu, a nie konieczności lub gwarantowanego wzrostu wydajności.
Na koniec upewnij się, że rozumiesz, co kwalifikuje się do GC, a co nie; odpowiednio blokować, usuwać i unieważniać; woskować, woskować; wdech i wydech; i na wszystko inne mówię: jeśli to jest dobre, zrób to. Twój przebieg może się różnić ... tak jak powinien ...