Jawatankuasa piawaian C++ secara rasmi telah memutuskan untuk meninggalkan cadangan Safe C++ yang bercita-cita tinggi demi pendekatan yang lebih konservatif yang dipanggil Profiles. Keputusan ini telah mencetuskan perbincangan yang penuh ghairah dalam komuniti pengaturcaraan mengenai masa depan keselamatan memori dalam salah satu bahasa pengaturcaraan yang paling banyak digunakan di dunia.
Cadangan Safe C++, yang diperkenalkan setahun yang lalu, bertujuan untuk membawa jaminan keselamatan seperti Rust kepada C++ melalui sistem konteks selamat yang boleh dipilih. Cadangan itu menjanjikan keselamatan memori yang kuat, keselamatan jenis, dan keselamatan thread tanpa merosakkan kod sedia ada. Pembangun boleh menandakan bahagian tertentu kod mereka sebagai selamat sambil meninggalkan bahagian warisan tidak berubah, mewujudkan laluan migrasi beransur-ansur ke arah amalan pengaturcaraan yang lebih selamat.
Perbandingan Safe C++ vs Profiles
| Aspek | Cadangan Safe C++ | Pendekatan Profiles |
|---|---|---|
| Tahap Keselamatan | Jaminan setara dengan Rust | Terhad, pemeriksaan seperti linter |
| Pelaksanaan | Sintaks dan konstruk bahasa baharu | Sekatan pada ciri sedia ada |
| Laluan Migrasi | Konteks selamat secara pilihan | Kekangan masa kompilasi |
| Keserasian Mundur | Keserasian penuh dengan kod sedia ada | Keserasian penuh dengan kod sedia ada |
| Status Jawatankuasa | Ditinggalkan | Diusahakan secara aktif |
| Kerumitan Teknikal | Tinggi (pemeriksa peminjaman, jangka hayat) | Sederhana (berasaskan kekangan) |
Jawatankuasa Mengutamakan Keserasian Mundur Berbanding Perubahan Revolusioner
Sean Baxter, salah seorang pengarang asal Safe C++, mengesahkan bahawa kumpulan kerja Safety and Security mengundi untuk mengutamakan Profiles berbanding cadangan yang lebih bercita-cita tinggi. Penentangan jawatankuasa untuk menerima pakai mekanisme keselamatan gaya Rust mencerminkan ketegangan budaya yang lebih mendalam dalam komuniti C++. Ramai ahli jawatankuasa melihat model keselamatan Rust sebagai penyimpangan yang terlalu radikal daripada falsafah tradisional C++.
Profiles mewakili pendekatan yang berbeza secara asas terhadap keselamatan. Daripada memperkenalkan konstruk bahasa baharu seperti yang dicadangkan oleh Safe C++, Profiles berfungsi dengan mengehadkan ciri dan corak penggunaan C++ sedia ada. Fikirkan ia sebagai garis panduan pengekodan yang dikuatkuasakan oleh kompiler yang boleh menangkap kesilapan biasa tanpa memerlukan pembangun mempelajari sintaks atau konsep yang sama sekali baharu.
Had Teknikal Mencetuskan Keraguan
Keupayaan teknikal Profiles telah menarik kritikan tajam daripada penyokong keselamatan. Tidak seperti Safe C++ atau penyemak pinjaman Rust, Profiles tidak dapat memberikan tahap jaminan matematik yang sama mengenai keselamatan memori. Sistem ini pada asasnya bertindak sebagai linter canggih dan bukannya mekanisme keselamatan asas.
Teknologi profiles tidak begitu baik. Tetapi itu tidak penting berbanding masalah budaya, sebaik sahaja anda memutuskan untuk menjadikan dirge bagpipe lima belas minit sebagai single utama anda, tidak kira sama ada anda menggunakan vinil berwarna.
Pengkritik berhujah bahawa Profiles menghadapi cabaran yang tidak dapat diatasi apabila berurusan dengan kod C++ dunia sebenar. Jenis rujukan bukan pemilik, yang penting untuk prestasi dalam banyak aplikasi, tidak dapat diuruskan dengan selamat tanpa ciri bahasa yang lebih canggih seperti penjejakan hayat. Sebaik sahaja pembangun perlu menggunakan corak biasa seperti string_view, jaminan keselamatan mula rosak.
Had Teknikal Utama bagi Profiles
- Tidak dapat mengendalikan jenis rujukan bukan-pemilik dengan selamat
- Tiada keupayaan penjejakan jangka hayat
- Terhad kepada sekatan masa kompilasi pada ciri-ciri sedia ada
- Bergelut dengan corak biasa seperti
string_view - Menyediakan jaminan yang lebih lemah berbanding sistem pembuktian matematik
- Berfungsi lebih seperti penganalisis statik lanjutan daripada sistem keselamatan
Komuniti Berpecah Mengenai Jalan Ke Hadapan
Keputusan itu telah mendedahkan perpecahan asas dalam komuniti C++. Peminat C++ lama yang berkhidmat dalam jawatankuasa piawaian cenderung menentang perubahan dramatik yang mungkin mengasingkan pengguna sedia ada. Sementara itu, pembangun yang bekerja pada aplikasi kritikal keselamatan semakin mendapati diri mereka terpaksa mempertimbangkan alternatif seperti Rust.
Sesetengah ahli komuniti mencadangkan mengikuti model HTML5, di mana vendor pelayar pada dasarnya memintas badan piawaian W3C rasmi untuk mencipta WHATWG. Walau bagaimanapun, tidak seperti pelayar web di mana beberapa syarikat utama mengawal pelaksanaan, kompiler C++ dibangunkan oleh kumpulan pelbagai dengan keutamaan dan sumber yang berbeza-beza.
Masa keputusan ini mewujudkan tekanan tambahan. Dengan proses jawatankuasa mengambil masa bertahun-tahun atau bahkan berdekad-dekad, sebarang ciri keselamatan yang tidak dipiawai tidak lama lagi mungkin tiba terlalu lewat untuk menghalang hakisan selanjutnya kedudukan C++ dalam pengaturcaraan sistem. Bahasa seperti Rust dan bahkan alternatif yang lebih baharu seperti Zig terus mendapat tempat dalam domain yang secara tradisinya dikuasai oleh C++.
Melihat Ke Hadapan: Kemajuan Berperingkat atau Peluang Terlepas?
Walaupun Profiles mungkin menawarkan beberapa penambahbaikan berbanding situasi semasa, ramai pembangun mempersoalkan sama ada langkah keselamatan berperingkat boleh menangani cabaran asas yang dihadapi oleh C++. Pendekatan ini mungkin membantu menangkap beberapa pepijat biasa tetapi tidak mencapai tahap memberikan jaminan keselamatan menyeluruh yang semakin dituntut oleh pembangunan perisian moden.
Keputusan jawatankuasa mencerminkan ketegangan yang lebih luas antara memelihara pangkalan kod sedia ada C++ yang besar dan menyesuaikan diri dengan keperluan keselamatan kontemporari. Sama ada pendekatan konservatif ini akan terbukti mencukupi untuk mengekalkan relevan C++ dalam landskap pengaturcaraan yang semakin mementingkan keselamatan masih menjadi persoalan terbuka.
Buat masa ini, pembangun yang mencari jaminan keselamatan yang kuat mungkin perlu melihat di luar piawaian C++ rasmi kepada alat eksperimen, pelaksanaan alternatif, atau bahasa yang sama sekali berbeza. Pengabaian cadangan Safe C++ menandakan bukan sahaja keputusan teknikal, tetapi pilihan falsafah mengenai hala tuju masa depan bahasa.
