Saya percaya dengan desain dari implementor GC, Anda tidak dapat mempercepat GC dengan pembatalan. Saya yakin mereka lebih suka Anda tidak khawatir dengan bagaimana / kapan GC berjalan - perlakukan seperti ini di mana-mana Menjadi melindungi dan mengawasi dan keluar untuk Anda ... (busur menunduk, mengangkat kepalan ke langit) .. .
Secara pribadi, saya sering secara eksplisit mengatur variabel ke nol ketika saya selesai dengan mereka sebagai bentuk dokumentasi diri. Saya tidak mendeklarasikan, menggunakan, lalu mengatur untuk membatalkan nanti - Saya membatalkan segera setelah itu tidak diperlukan lagi. Aku berkata, secara eksplisit, "Aku secara resmi selesai denganmu ... pergi ..."
Apakah pembatalan diperlukan dalam bahasa GC'd? Tidak. Apakah ini bermanfaat untuk GC? Mungkin ya, mungkin tidak, tidak tahu pasti, dengan desain saya benar-benar tidak bisa mengendalikannya, dan terlepas dari jawaban hari ini dengan versi ini atau itu, implementasi GC di masa depan dapat mengubah jawaban di luar kendali saya. Plus jika / ketika nulling dioptimalkan keluar itu sedikit lebih dari komentar mewah jika Anda mau.
Saya membayangkan jika itu membuat niat saya menjadi lebih jelas bagi orang bodoh miskin berikutnya yang mengikuti jejak saya, dan jika itu "mungkin" berpotensi membantu GC kadang-kadang, maka itu sangat berharga bagi saya. Kebanyakan itu membuat saya merasa rapi dan jelas, dan Mongo suka merasa rapi dan jelas. :)
Saya melihatnya seperti ini: Bahasa pemrograman ada untuk memungkinkan orang memberi ide kepada orang lain dan kompiler permintaan pekerjaan tentang apa yang harus dilakukan - kompiler mengonversi permintaan itu menjadi bahasa yang berbeda (kadang-kadang beberapa) untuk CPU - CPU dapat memberikan hoot bahasa apa yang Anda gunakan, pengaturan tab Anda, komentar, penekanan gaya, nama variabel, dll. - CPU adalah semua tentang bit stream yang memberi tahu apa yang register dan opcode dan lokasi memori untuk bermain-main. Banyak hal yang ditulis dalam kode tidak dikonversi menjadi apa yang dikonsumsi oleh CPU dalam urutan yang kami tentukan. C, C ++, C #, Lisp, Babel, assembler atau apa pun kita adalah teori daripada kenyataan, ditulis sebagai pernyataan kerja. Apa yang Anda lihat bukan apa yang Anda dapatkan, ya, bahkan dalam bahasa assembler.
Saya mengerti pola pikir "hal-hal yang tidak perlu" (seperti garis kosong) "tidak lain hanyalah derau dan kekacauan kode." Itu adalah awal karier saya; Saya benar-benar mengerti. Pada titik ini saya condong ke arah yang membuat kode lebih jelas. Ini tidak seperti saya menambahkan bahkan 50 baris "noise" ke program saya - itu beberapa baris di sini atau di sana.
Ada pengecualian untuk aturan apa pun. Dalam skenario dengan memori yang mudah menguap, memori statis, kondisi balapan, lajang, penggunaan data "basi" dan semua jenis busuk itu, itu berbeda: Anda PERLU mengelola memori Anda sendiri, mengunci dan membatalkan sebagai apropos karena memori bukan bagian dari GC'd Universe - semoga semua orang mengerti itu. Sisa waktu dengan bahasa GC'd itu masalah gaya daripada kebutuhan atau peningkatan kinerja yang dijamin.
Pada akhirnya, pastikan Anda memahami apa yang memenuhi syarat untuk GC dan apa yang tidak; mengunci, membuang, dan membatalkan dengan tepat; lilin menyala, lilin mati; bernafas, bernafas; dan untuk semua yang lain saya katakan: Jika rasanya enak, lakukanlah. Jarak tempuh Anda mungkin bervariasi ... sebagaimana mestinya ...