Misalkan Anda memiliki beberapa bahasa pemrograman dengan manajemen memori manual. Fitur apa yang dibutuhkan oleh bahasa ini untuk dapat mengimplementasikan pengumpulan sampah secara tepat sebagai perpustakaan, dan bukan sebagai konstruksi bahasa mendasar?
Maksud saya adalah GC yang tepat di mana hanya pointer ke heap yang dilalui untuk memastikan variabel mana yang hidup atau tidak.
Beberapa pertimbangan tambahan:
- C dan C ++ memiliki pengumpul sampah Boehm, tapi saya tidak menghitung ini karena itu bukan GC yang tepat. Kolektor Boehm mengasumsikan bahwa apa pun di stack yang bisa menjadi pointer, berdasarkan murni pada persyaratan penyelarasan memori, adalah sebuah pointer. Misalnya, bilangan bulat apa pun
k
yang(k % 4) == 0
terlihat pada tingkat bit seperti pointer, karena pointer harus sejajar 4-byte. - murai mengubah kode C yang ada untuk menggunakan pengumpul sampah yang tepat. Kode C yang dihasilkan memiliki banyak stub untuk pengumpulan sampah, yaitu barang untuk mendaftarkan penunjuk tumpukan ke tumpukan dengan kolektor. Saya tidak menghitung ini karena tidak ada yang bisa diharapkan untuk menulis kode seperti itu; ini lebih merupakan target kompilasi untuk bahasa lain.
Saya membayangkan bahwa bahasa seperti itu perlu memiliki:
- Macro atau beberapa bentuk metaprogramming, untuk merangkum semua kode tambahan yang diperlukan untuk melakukan hal-hal seperti mendaftar akar GC.
- Beberapa mekanisme reflektif yang memungkinkan Anda untuk memeriksa struct atau serikat pekerja; Anda perlu menentukan anggota mana yang menjadi petunjuk.
- Beberapa mekanisme reflektif yang memungkinkan Anda memeriksa tata letak bingkai tumpukan. Ini terdengar jauh lebih sulit daripada 2.
Saya harap ini tidak terlalu kabur atau berdasarkan opini tapi saya sudah lama bertanya-tanya tentang hal ini.