Bahasa pemrograman C semakin mendekati penambahan fitur manajemen resource yang telah lama ditunggu. Standar C2y yang akan datang direncanakan akan menyertakan fungsionalitas defer
native, dengan beberapa implementasi compiler yang sudah dalam tahap pengembangan atau review.
Progress Standardisasi Resmi
Fitur defer untuk C2y berasal dari spesifikasi teknis TS25755, yang berkembang dari proposal-proposal sebelumnya termasuk N3434. Revisi terbaru, yang didokumentasikan sebagai N3687, menguraikan bagaimana defer akan bekerja sebagai fitur bahasa standar daripada ekstensi khusus compiler. Ini merupakan langkah maju yang signifikan untuk kemampuan manajemen resource C .
Berbeda dengan implementasi eksperimental berbasis macro yang bergantung pada fitur khusus GCC , versi yang distandarisasi akan menyediakan fungsionalitas defer yang portabel di berbagai compiler. Fitur ini dirancang untuk mengeksekusi kode cleanup secara otomatis ketika variabel keluar dari scope, mirip dengan yang ditawarkan bahasa seperti Go .
Spesifikasi Teknis Utama:
- Standar: C2y dengan spesifikasi teknis TS25755
- Revisi Terbaru: N3687 (diperbarui dari N3488)
- Cakupan: Pembersihan cakupan leksikal (berjalan di akhir blok)
- Keamanan: Menghindari masalah executable stack dari implementasi makro saat ini
Status Implementasi Compiler
Beberapa proyek compiler telah mulai mengimplementasikan fitur defer sebelum standardisasi resminya. GCC memiliki patch yang sedang dalam review, sementara compiler alternatif seperti onramp dan slimcc sudah menambahkan dukungan. Adopsi awal ini menunjukkan minat industri yang kuat terhadap fitur tersebut.
Implementasi compiler mengambil pendekatan yang lebih langsung dibandingkan workaround berbasis macro saat ini. Daripada bergantung pada nested functions dan cleanup attributes, dukungan defer native dapat mengoptimalkan fitur dengan lebih efektif sambil mempertahankan visibilitas yang jelas dalam debug builds.
Status Implementasi Compiler Saat Ini:
- GCC: Patch sedang dalam tahap review (patchwork.ozlabs.org/project/gcc/list/?series=470822)
- onramp: Sudah diimplementasikan (github.com/ludocode/onramp)
- slimcc: Sudah diimplementasikan (github.com/fuhsnn/slimcc)
Pertimbangan Keamanan dan Performa
Implementasi eksperimental saat ini yang menggunakan nested functions GCC menimbulkan kekhawatiran keamanan karena ketergantungannya pada executable stack trampolines. Namun, pendekatan always-inline yang digunakan dalam implementasi macro terbaru menghindari masalah ini sepenuhnya dengan menghilangkan kebutuhan untuk function calls.
Kata kunci always_inline menangani hal tersebut di sini.
Fitur defer yang distandarisasi diharapkan dapat menyelesaikan masalah keamanan ini sambil memberikan performa yang lebih baik dibandingkan alternatif berbasis macro. Compiler akan dapat mengimplementasikan defer sebagai fitur bahasa kelas satu, memungkinkan optimisasi yang tidak mungkin dilakukan dengan workaround saat ini.
Dampak Lebih Luas pada Pengembangan C
Penambahan defer ke C2y mengatasi tantangan yang sudah lama ada dalam pemrograman C : cleanup resource yang dapat diandalkan di berbagai exit points. Meskipun beberapa developer telah beralih ke manajemen memori berbasis arena untuk menghindari masalah cleanup, defer tetap berharga untuk mengelola file descriptors, mutex, dan resource non-memori lainnya.
Fitur ini juga menyediakan alternatif untuk solusi yang lebih kompleks seperti retrofitting RAII ke dalam C , yang akan memerlukan perubahan substansial pada sistem tipe dan semantik bahasa. Defer menawarkan pendekatan yang lebih ringan yang lebih sesuai dengan filosofi desain C yang ada.
Standardisasi defer dalam C2y mewakili evolusi pragmatis dari bahasa tersebut, menambahkan fitur kemudahan modern sambil mempertahankan karakteristik inti C . Seiring dengan ekspansi dukungan compiler, developer akan mendapatkan akses ke manajemen resource yang lebih dapat diandalkan tanpa mengorbankan portabilitas dan kesederhanaan yang membuat C berharga dalam systems programming.
Referensi: Defer: Resource cleanup in C with GCCs magic