Pengalokasi Temp C3 Mendakwa Menggantikan Pemeriksa Pinjaman, Tetapi Pembangun Mempersoalkan Perbandingan Tersebut

Pasukan Komuniti BigGo
Pengalokasi Temp C3 Mendakwa Menggantikan Pemeriksa Pinjaman, Tetapi Pembangun Mempersoalkan Perbandingan Tersebut

Bahasa pengaturcaraan C3 baru-baru ini memperkenalkan ciri pengalokasi temp dengan dakwaan berani tentang menyelesaikan isu jangka hayat memori dan menggantikan sistem penjejakan pemilikan yang kompleks seperti pemeriksa pinjaman Rust . Walau bagaimanapun, komuniti pengaturcaraan telah menimbulkan persoalan penting tentang sama ada perbandingan ini secara teknikal munasabah.

Salah Faham Tentang Tujuan Pemeriksa Pinjaman

Kritikan yang paling menonjol berpusat pada salah faham asas tentang apa yang sebenarnya dilakukan oleh pemeriksa pinjaman. Sementara pengalokasi temp C3 memberi tumpuan kepada mencegah kebocoran memori melalui pembersihan berskop, pembangun menunjukkan bahawa pemeriksa pinjaman mempunyai tujuan yang berbeza sama sekali. Mereka mencegah ralat penggunaan-selepas-bebas dan memastikan keselamatan memori apabila data dikongsi antara bahagian program yang berbeza dengan jangka hayat yang berbeza-beza.

Komuniti juga telah mencabar dakwaan tentang pemeriksa pinjaman menyebabkan masa kompilasi yang perlahan. Analisis teknikal mencadangkan bahawa pemeriksaan pinjaman berjalan dalam masa linear dan menyumbang hanya sebahagian kecil daripada overhed kompilasi. Masa kompilasi Rust yang lebih perlahan sebenarnya berpunca daripada ciri bahasa lain seperti monomorfisasi dan pengoptimuman LLVM .

Pemeriksaan pinjaman merujuk kepada analisis masa kompilasi yang memastikan memori diakses dengan selamat tanpa memerlukan pemeriksaan masa jalan.

Perbandingan Pendekatan Pengurusan Memori

Ciri C3 Temp Allocator Rust Borrow Checker C++ RAII
Tujuan Utama Mencegah kebocoran memori melalui pembersihan berskop Mencegah penggunaan-selepas-bebas dan memastikan keselamatan memori Pengurusan sumber automatik
Keselamatan Masa Kompilasi Terhad (penunjuk tergantung mungkin berlaku) Jaminan kukuh Sederhana
Overhed Masa Jalan Rendah Tiada Rendah hingga sederhana
Perkongsian Merentasi Skop Terhad Sokongan penuh dengan penjejakan jangka hayat Sokongan penuh dengan pengurusan manual
Logik Pembersihan Tersuai Tidak disokong Tidak berkenaan Sokongan penuh
Kerumitan Sintaks Mudah (skop @pool()) Peraturan pemilikan yang kompleks Sederhana (destruktor/penunjuk pintar)

Skop Penyelesaian Terhad

Beberapa pembangun telah menyerlahkan bahawa pendekatan C3 berfungsi dengan baik untuk senario berskop leksikal yang mudah tetapi gagal dalam situasi dunia sebenar yang biasa. Pengalokasi temp tidak dapat mengendalikan kes di mana memori perlu dikongsi merentasi benang, dihantar antara skop yang berbeza, atau diuruskan dengan logik pembersihan khusus.

Ini benar-benar tidak menyelesaikan sebarang masalah sebenar. Jika semua corak peruntukan memori adalah leksikal ini adalah perkara yang paling mudah dan paling jelas untuk dilakukan.

Komuniti menyatakan bahawa banyak aplikasi memerlukan corak pengurusan memori yang lebih kompleks, seperti pengurus sumber dalam permainan atau sistem di mana satu benang memperuntukkan memori dan yang lain membebaskannya.

Batasan Teknikal Utama yang Dikenal Pasti

  • Keselamatan Thread: Tidak dapat mengendalikan memori yang dikongsi antara thread
  • Sekatan Skop: Memori tidak dapat melepaskan diri dari skop peruntukannya dengan mudah
  • Jurang Keselamatan: Penunjuk tergantung masih mungkin berlaku, hanya dikesan semasa runtime
  • Fleksibiliti Terhad: Tiada logik penyahperuntukan tersuai berbanding dengan RAII
  • Liputan Corak: Hanya berfungsi untuk corak peruntukan skop leksikal

Perbandingan dengan Penyelesaian Sedia Ada

Pengkritik telah menunjukkan bahawa pengalokasi temp C3 pada asasnya menyediakan apa yang sudah ditawarkan oleh C++ melalui RAII dan penunjuk pintar, atau apa yang boleh dicapai dengan pengalokasi arena dalam bahasa lain. Perbezaan utama nampaknya ialah C3 menjadikan pendekatan ini lebih mudah dari segi sintaks dan menganggapnya sebagai lalai dan bukannya ciri ikut serta.

Walau bagaimanapun, kemudahan ini datang dengan pertukaran. Tidak seperti pendekatan RAII tradisional, pengalokasi temp tidak membenarkan logik penyahperuntukan khusus dan memerlukan pengurusan skop yang eksplisit.

Kebimbangan Keselamatan Kekal

Apabila disoal tentang jaminan keselamatan, pembangun C3 mengakui bahawa penunjuk tergantung masih mungkin. Bahasa ini cuba mengurangkan ini dengan menulis ganti memori yang dibebaskan dengan nilai tertentu dalam mod selamat, tetapi pendekatan ini diakui kurang kukuh berbanding jaminan masa kompilasi yang disediakan oleh pemeriksa pinjaman atau alat masa jalan seperti AddressSanitizer .

Kesimpulan

Walaupun pengalokasi temp C3 menawarkan pendekatan yang mudah untuk pengurusan memori bagi kes penggunaan tertentu, komuniti pengaturcaraan kekal skeptikal tentang dakwaan bahawa ia menyelesaikan jangka hayat memori atau menggantikan pemeriksa pinjaman. Ciri ini nampaknya merupakan alat yang berguna untuk senario tertentu dan bukannya penyelesaian menyeluruh untuk cabaran keselamatan memori. Perdebatan ini menyerlahkan kepentingan memahami masalah berbeza yang direka untuk diselesaikan oleh pendekatan pengurusan memori yang berbeza.

Rujukan: Forget Borrow Checkers: C3 Solved Memory Lifetimes With Scopes