GCC 15.1 membuat lonjakan ke C23 dan menambah penambahbaikan, pengoptimuman C++ dan banyak lagi.

gcc

Selepas setahun pembangunan yang sengit, keluaran versi baharu «GCC 15.1» telah diumumkan, yang diletakkan sebagai versi stabil pertama dalam cawangan 15.x baharu bagi suite pengkompil sumber terbuka yang popular ini.

Keluaran ini bukan sahaja melancarkan siri GCC 15 baharu secara rasmi, tetapi juga menandakan permulaan persediaan untuk pembangunan GCC 16, kerana cawangan 16.0 telah bercabang selari dan akan meletakkan asas untuk keluaran utama seterusnya, GCC 16.1.

GCC 15.1 Ciri Baru Utama

Salah satu perubahan yang paling ketara dalam versi baharu ini ialah GCC 15.1 mengamalkan piawaian C23 sebagai lalai untuk menyusun kod C, menggunakan pilihan -std=gnu23. Kemas kini ini menggantikan standard sebelumnya yang digunakan secara lalai, C17 (-std=gnu17), dan memperkenalkan beberapa ciri baharu standard baharu. Antaranya ialah nullptr malar, jenis _BitInt(n), dan kata kunci bool, benar dan palsu, yang boleh menyebabkan konflik dengan pengecam sedia ada dalam kod warisan.

Satu lagi ciri baharu yang disertakan GCC 15.1 ialah #embed arahan untuk membenamkan data binari, dan atribut seperti tidak berjujukan dan boleh dihasilkan semula, yang memberikan kawalan yang lebih besar ke atas susunan pelaksanaan dan penentuan hasil yang konsisten. Selain itu, elemen piawaian C2Y masa hadapan telah dilaksanakan, seperti pembolehubah yang diisytiharkan dalam keadaan if, julat nilai dalam pernyataan kes, akhiran khayalan i dan j, dan sokongan untuk operator ++ dan — digunakan pada nombor kompleks.

Penambahbaikan dalam C++ dan C++26 yang akan datang

Dalam kes bahasa C++, versi baharu GCC 15.1 melaksanakan ciri yang sedang dibincangkan untuk standard C++26, apabila ciri baharu diperkenalkan seperti pengendali "rakan", penggunaan constexpr dengan varian pengendali baharu, dan penambahbaikan dalam sintaks untuk pautan dan atribut berstruktur seperti musttail untuk rekursi ekor terjamin.

Sokongan C++23 juga diperluaskan dengan peraturan baharu untuk menggunakan eksport, penambahbaikan untuk mengendalikan objek sementara dan pelaksanaan percubaan modul std dan std.compat dalam libstdc++. Selain itu, keselamatan diperkukuh untuk pemulaan kesatuan dan penyusunan kod dipertingkatkan berkat sistem pencincangan templat yang lebih cekap.

Amaran baharu dan penambahbaikan dalam analisis statik

Sistem Analisis statik menerima reka bentuk semula visual yang mengetengahkan masalah melalui simbol, Petua untuk berhijrah ke C23 dan perpustakaan libgdiagnostics baharu yang membenarkan penggunaan semula logik diagnostik dalam projek lain. Sokongan untuk menjana laporan dalam format SARIF juga diperkenalkan, memudahkan penyepaduan dengan alat analisis kod moden.

Pada Amaran sedia ada ditambah kepada amaran baharu, sebagai -Wanalyzer-undefined-behavior-ptrdiff untuk mengesan penolakan antara penunjuk yang tidak berkaitan, -Wtrailing-whitespace dan -Wleading-whitespace untuk menunjukkan ruang kosong yang tidak perlu, dan –Wheader-guard untuk mengesan ralat dalam perlindungan kemasukan pengepala.

Pengoptimuman dan sokongan

Antara pengoptimuman yang ketara, Mod kompilasi tambahan untuk LTO disertakan (Pengoptimuman Masa Pautan), direka untuk mempercepatkan penyusunan semula apabila perubahan adalah minimum. Juga vektorisasi gelung dipertingkatkan, walaupun dalam kes di mana saiz tatasusunan tidak diketahui pada masa penyusunan, dan meningkatkan kelajuan menyusun fail yang sangat besar.

Di bahagian sokongan, sambungan ARMv64 telah ditambahkan pada AArch8, sokongan untuk CPU baharu seperti Apple M3, Cortex-X925 dan NVIDIA Grace, dan memperluaskan platform MinGW. Penjanaan kod untuk GPU AMD Radeon diperkukuh dengan Sokongan percubaan untuk siri GFX9, GFX10.3 dan GFX11 baharu. Untuk seni bina x86, sokongan untuk AVX10.2 dan arahan AMX baharu didayakan, dan sokongan untuk Xeon Phi Knights dihentikan.

Selain itu, GCC 15.1 memperkenalkan pengkompil untuk COBOL (gcobol), dengan sokongan untuk seni bina x86-64 dan AArch64 serta pelaksanaan bahasa D yang dikemas kini (versi 2.111.0). Sokongan untuk integer yang tidak ditandatangani dalam Fortran telah ditambah, dan penggunaan OpenMP 5.0 hingga 6.0 telah dipertingkatkan, termasuk penambahbaikan kesalingoperasian dan penggunaan memori bersatu pada GPU.