Bahasa pengaturcaraan C semakin hampir untuk memperoleh ciri pengurusan sumber yang telah lama dinanti-nantikan. Piawaian C2y yang akan datang ditetapkan untuk memasukkan fungsi defer asli, dengan beberapa pelaksanaan kompiler sudah dalam pembangunan atau semakan.
Kemajuan Penyeragaman Rasmi
Ciri defer untuk C2y berasal daripada spesifikasi teknikal TS25755, yang berkembang daripada cadangan terdahulu termasuk N3434. Semakan terkini, yang didokumentasikan sebagai N3687, menggariskan bagaimana defer akan berfungsi sebagai ciri bahasa standard dan bukannya sambungan khusus kompiler. Ini mewakili langkah penting ke hadapan untuk keupayaan pengurusan sumber C.
Tidak seperti pelaksanaan berasaskan makro eksperimen yang bergantung pada ciri khusus GCC, versi yang diseragamkan akan menyediakan fungsi defer mudah alih merentasi kompiler yang berbeza. Ciri ini direka untuk melaksanakan kod pembersihan secara automatik apabila pemboleh ubah keluar dari skop, serupa dengan apa yang ditawarkan oleh bahasa seperti Go.
Spesifikasi Teknikal Utama:
- Standard: C2y dengan spesifikasi teknikal TS25755
- Semakan Terkini: N3687 (dikemas kini daripada N3488)
- Skop: Pembersihan skop leksikal (berjalan pada penghujung blok)
- Keselamatan: Mengelakkan isu tindanan boleh laku bagi pelaksanaan makro semasa
Status Pelaksanaan Kompiler
Pelbagai projek kompiler telah mula melaksanakan ciri defer sebelum penyeragaman rasminya. GCC mempunyai tampung di bawah semakan, manakala kompiler alternatif seperti onramp dan slimcc telah menambah sokongan. Penggunaan awal ini menunjukkan minat industri yang kuat terhadap ciri tersebut.
Pelaksanaan kompiler mengambil pendekatan yang lebih langsung daripada penyelesaian sementara berasaskan makro semasa. Daripada bergantung pada fungsi bersarang dan atribut pembersihan, sokongan defer asli boleh mengoptimumkan ciri dengan lebih berkesan sambil mengekalkan keterlihatan yang jelas dalam binaan nyahpepijat.
Status Pelaksanaan Kompiler Semasa:
- GCC: Tampung sedang dalam semakan (patchwork.ozlabs.org/project/gcc/list/?series=470822)
- onramp: Telah dilaksanakan (github.com/ludocode/onramp)
- slimcc: Telah dilaksanakan (github.com/fuhsnn/slimcc)
Pertimbangan Keselamatan dan Prestasi
Pelaksanaan eksperimen semasa menggunakan fungsi bersarang GCC menimbulkan kebimbangan keselamatan kerana pergantungan mereka pada trampolin tindanan boleh laksana. Walau bagaimanapun, pendekatan sentiasa-sebaris yang digunakan dalam pelaksanaan makro terkini mengelakkan isu ini sepenuhnya dengan menghapuskan keperluan untuk panggilan fungsi.
Kata kunci always_inline menguruskan perkara itu di sini.
Ciri defer yang diseragamkan dijangka menyelesaikan kebimbangan keselamatan ini sambil memberikan prestasi yang lebih baik daripada alternatif berasaskan makro. Kompiler akan dapat melaksanakan defer sebagai ciri bahasa kelas pertama, membolehkan pengoptimuman yang tidak mungkin dengan penyelesaian sementara semasa.
Impak Lebih Luas pada Pembangunan C
Penambahan defer kepada C2y menangani cabaran lama dalam pengaturcaraan C: pembersihan sumber yang boleh dipercayai merentasi pelbagai titik keluar. Walaupun sesetengah pembangun telah beralih kepada pengurusan memori berasaskan arena untuk mengelakkan isu pembersihan, defer kekal berharga untuk menguruskan deskriptor fail, mutex, dan sumber bukan memori lain.
Ciri ini juga menyediakan alternatif kepada penyelesaian yang lebih kompleks seperti memasang semula RAII ke dalam C, yang memerlukan perubahan besar pada sistem jenis dan semantik bahasa. Defer menawarkan pendekatan ringan yang lebih sesuai dengan falsafah reka bentuk sedia ada C.
Penyeragaman defer dalam C2y mewakili evolusi pragmatik bahasa, menambah ciri kemudahan moden sambil mengekalkan ciri teras C. Apabila sokongan kompiler berkembang, pembangun akan memperoleh akses kepada pengurusan sumber yang lebih boleh dipercayai tanpa mengorbankan mudah alih dan kesederhanaan yang menjadikan C berharga dalam pengaturcaraan sistem.
