Documentation for a newer release is available. View Latest

C

GCC 10.0.1

Suite compiler GNU telah diperbarui ke versi 10.0.1. Lihat http://gcc.gnu.org/gcc-10/changes.htm [dokumentasi hulu] untuk perubahan yang terlihat pengguna. Paket di Fedora 32 telah dibangun kembali dengan compiler versi baru.

Fitur baru dan perbaikan umum

  • Fungsi built-in baru:

    • Operator preprosesor bawaan __has_builtin dapat digunakan untuk menanyakan dukungan untuk fungsi bawaan yang disediakan oleh GCC dan compiler lainnya yang mendukungnya.

    • __builtin_roundeven untuk fungsi yang sesuai dari ISO/IEC TS 18661.

  • Opsi baris perintah baru:

    • -fallocation-dce menghilangkan pasangan yang tidak dibutuhkan dari operator new dan delete.

    • -fprofile-partial-training sekarang dapat digunakan untuk menginformasikan compiler bahwa path kode yang tidak tercakup oleh eksekusi pelatihan tidak boleh dioptimalkan untuk ukuran.

    • -fprofile-reproducible mengontrol tingkat reproduktivitas profil yang dikumpulkan oleh -fprofile-generate. Hal ini memungkinkan untuk membangun kembali program dengan hasil yang sama yang berguna, misalnya, untuk paket distribusi.

  • Peningkatan optimasi antar-prosedural:

    • Pemrosesan penggantian skalar antar-prosedural untuk agregat (IPA-SRA) diimplementasikan kembali untuk bekerja di saat link.

    • -finline-functions sekarang diaktifkan di -O2 dan disetel ulang untuk ukuran kode yang lebih baik versus trade-off kinerja runtime. Heuristik inliner juga secara signifikan mempercepat untuk menghindari dampak negatif terhadap -flto -O2 saat compile.

    • Inliner heuristik dan kloning fungsi sekarang dapat menggunakan informasi rentang nilai untuk memprediksi efektivitas transformasi individu.

    • Selama optimasi saat link C++ Aturan Satu Definisi digunakan untuk meningkatkan presisi dari analisis alias berbasis tipe.

  • Peningkatan pengoptimalan saat link:

    • Biner baru lto-dump telah ditambahkan. Program ini dapat mencurahkan berbagai informasi tentang berkas objek bytecode LTO.

    • Fase paralel LTO secara otomatis dapat mendeteksi jobserver make yang berjalan atau dapat kembali ke cadangan ke banyaknya core yang tersedia.

    • Bytecode LTO dapat dikompresi dengan algoritma zstd. Skrip Configure skrip dapat secara otomatis mendeteksi dukungan zstd.

    • Kebanyakan nilai --param sekarang dapat ditentukan di granularitas unit terjemahan. Ini termasuk semua parameter yang mengendalikan inliner dan optimasi antar-prosedural lainnya. Tidak seperti rilis sebelumnya, GCC 10 akan mengabaikan parameter mengendalikan pengoptimalan yang ditentukan pada saat link dan menerapkan parameter yang ditentukan pada waktu kompilasi dengan cara yang sama seperti yang dilakukan untuk flag pengoptimalan.

  • Perbaikin optimasi yang didorong profil:

    • Profil Bahasa Baru dan Spesifik-Bahasa Improvementsmaintenance selama kompilasi dan pemartisian kode hot/cold telah ditingkatkan.

    • Menggunakan -fprofile-values, biner yang terinstrumentasi dapat melacak beberapa nilai (hingga 4) untuk mis. panggilan tidak langsung dan memberikan informasi profil yang lebih presisi.

Bahasa baru dan perbaikan spesifik bahasa

  • Versi 2.6 dari spesifikasi OpenACC sekarang didukung di kompiler C, C++, dan Fortran. Lihat bagian status implementasi pada halaman wiki OpenACC dan dokumentasi pustaka run-time untuk informasi lebih lanjut.

  • OpenMP dan OpenACC sekarang mendukung offload untuk GPU AMD Radeon (GCN); yang didukung adalah Fiji generasi ketiga (fiji) dan VEGA 10/VEGA 20 generasi kelima (gfx900 atau gfx906).

Keluarga C

  • Atribut baru.

  • Peringatan baru.

  • Penyempurnaan pada peringatan yang ada.

C

  • Beberapa fitur baru dari revisi C2X yang akan datang dari standar ISO C didukung dengan -std=c2x dan -std=gnu2x. Beberapa fitur ini juga didukung sebagai ekstensi ketika mengkompilasi untuk versi bahasa yang lebih lama. Selain fitur yang tercantum, beberapa fitur sebelumnya didukung sebagai ekstensi dan sekarang ditambahkan ke C standar yang diaktifkan secara default dalam mode C2X dan tidak didiagnosis dengan -std=c2x -Wpedantic.

  • GCC sekarang default untuk -fno-common. Akibatnya, akses variabel global lebih efisien pada berbagai target. Dalam C, variabel global dengan beberapa definisi tentatif sekarang mengakibatkan kesalahan linker. Dengan -fcommon definisi tersebut digabung diam-diam saat proses link.

C++

  • Beberapa fitur C++20 telah diimplementasikan.

  • Beberapa Laporan C++ Defect telah diselesaikan.

  • Peringatan baru.

  • G++ sekarang dapat mendeteksi memodifikasi objek konstan dalam evaluasi constexpr (yang merupakan perilaku tak terdefinisi).

  • G++ tidak lagi mengeluarkan peringatan palsu -Wsign-conversion dengan cast eksplisit.

  • Penyempitan sekarang terdeteksi di lebih banyak konteks (mis., nilai case).

  • Konsumsi memori compiler telah dikurangi dalam evaluasi constexpr.

  • noexcept-specifier sekarang diperlakukan dengan benar sebagai konteks kelas yang lengkap sesuai [class.mem].

  • Atribut usang sekarang juga dapat digunakan pada namespace.

Pustaka runtime (libstdc++)

  • Dukungan C++2a eksperimental yang diperbaiki, termasuk:

  • Dukungan untuk RDSEED dalam std::random_device.

  • Dependensi header yang dikurangi, mengarah ke kompilasi lebih cepat untuk beberapa kode.

GNU C Library versi 2.31

Fedora 32 menyediakan GNU C Library - glibc - versi 2.31. Perubahan penting meliputi:

Fitur baru

  • GNU C Library sekarang mendukung sebuah fitur tes makro_ISOC2X_SOURCE untuk mengaktifkan fitur dari draft standar ISO C2X. Hanya beberapa fitur dari standar draf ini yang didukung oleh GNU C Library, dan karena draft ini sedang dalam pengembangan aktif, seperangkat fitur yang diaktifkan oleh makro ini dapat berubah. Fitur dari C2X juga difungsikan oleh _GNU_SOURCE, atau dengan mengkompilasi dengan gcc -std=gnu2x.

  • Fungsi <math.h> yang membulatkan hasil mereka ke tipe yang lebih sempit sekarang memiliki makro generik tipe yang terkait di <tgmath.h>, seperti yang didefinisikan dalam TS 18661-1:2014 dan TS 18661-3:2015 sebagaimana telah diubah dengan resolusi Clarification Request 13 ke TS 18661-3.

  • Fungsi pthread_clockjoin_np telah ditambahkan, memungkinkan bergabung dengan thread yang diakhiri dengan jam tertentu. Hal ini memungkinkan menunggu untuk CLOCK_MONOTONIC dan CLOCK_REALTIME. Fungsi ini adalah ekstensi GNU.

  • Lokal baru ditambahkan: mnw_MM (bahasa Mon yang digunakan di Myanmar).

  • Resolver stub DNS akan secara opsional mengirim bit AD (data terotentikasi) dalam kuiri jika opsi trust-ad disetel melalui direktif opsi di /etc/resolv.conf (atau jika RES_TRUSTAD diatur dalam _res.options). Dalam mode ini, bit AD, seperti yang disediakan oleh server nama, tersedia untuk aplikasi yang memanggil res_search dan fungsi terkait. Dalam mode default, bit AD tidak diatur dalam permintaan, dan secara otomatis dihapus di respons, menunjukkan ketiadaan validasi DNSSEC. (Oleh karena itu, server nama dan lintasan jaringan mereka diperlakukan sebagai terpercaya.)

Fitur usang dan dihapus

  • Fungsi totalorder dan totalordermag, dan fungsi yang sesuai untuk jenis floating-point lainnya, sekarang mengambil argumen pointer untuk menghindari NaN pensinyalan yang mungkin yang dikonversi ke NaN diam dalam penyampaian argumen. Hal ini sesuai dengan resolusi Clarification Request 25 untuk TS 18661-1, seperti yang diterapkan untuk C2X. Binari yang sudah ada yang memberikan argumen floating-point secara langsung akan terus bekerja.

  • Fungsi kedaluwarsa stime tidak lagi tersedia untuk biner di-link yang baru, dan deklarasinya telah dihapus dari <time.h>. Program yang mengatur waktu sistem harus menggunakan clock_settime sebagai gantinya.

  • Kami berencana untuk menghapus fungsi usang ftime, dan header <sys/timeb.h>, dalam versi masa depan glibc. Dalam rilis ini, header masih ada tetapi memanggil ftime akan menyebabkan peringatan compiler. Semua program harus menggunakan gettimeofday atau clock_gettime sebagai gantinya.

  • Fungsi gettimeofday tidak lagi melaporkan informasi tentang zona waktu seluruh sistem. Fitur era 4.2-BSD ini telah usang selama bertahun-tahun, karena tidak dapat menangani kompleksitas penuh dari zona waktu dunia, tapi sampai sekarang kami telah mendukungnya dengan usaha terbaik. Perubahan yang diperlukan untuk mendukung time_t 64-bit pada arsitektur 32-bit telah membuat ini tidak lagi praktis.

  • Fungsi settimeofday masih dapat digunakan untuk menetapkan zona waktu seluruh sistem saat sistem operasi mendukungnya. Hal ini karena kernel Linux memanfaatkan ulang API, pada beberapa arsitektur, untuk menggambarkan ofset seperti-zona-waktu seluruh-sistem antara jam perangkat lunak yang dipelihara oleh kernel, dan jam "RTC" yang mencatat waktu ketika sistem dimatikan.

  • SPARC ISA v7 tidak lagi didukung. V8 masih didukung, tetapi hanya jika instruksi CAS opsional diimplementasikan (misalnya, prosesor LEON masih didukung, tetapi prosesor SuperSPARC tidak).

  • Jika kegagalan lazdy binding terjadi selama dlopen, selama eksekusi konstruktor ELF, proses sekarang dihentikan. Sebelumnya, loader dinamis akan mengembalikan NULL dari dlopen, dengan kesalahan lazy binding ditangkap dalam pesan kesalahan. Secara umum, ini tidak aman karena mereset stack dalam panggilan fungsi sebarang tidak mungkin.

  • Untuk ABI hard-float MIPS, GNU C Library akan dikonfigurasi untuk membutuhkan stack executable kecuali dikonfigurasi secara eksplisit pada saat build agar membutuhkan minimum kernel versi 4.8 atau yang lebih baru. Hal ini karena mengeksekusi branch floating-point pada stack non-executable di kernel Linux sebelum 4.8 dapat menyebabkan aplikasi crash untuk beberapa konfigurasi MIPS. Sementara saat ini PT_GNU_STACK tidak banyak digunakan pada MIPS, rilis masa depan GCC diharapkan untuk mengaktifkan stack non-executable secara default dengan PT_GNU_STACK secara default dan dengan demikian cenderung memicu crash pada kernel tua.

  • Pembungkus panggilan sistem untuk panggilan sistem waktu sekarang menggunakan panggilan sistem time64 baru bila tersedia. Pada target 32-bit, pembungkus ini mencoba untuk memanggil panggilan sistem baru terlebih dahulu dan beralih ke panggilan sistem waktu 32-bit yang lebih tua jika mereka tidak ada. Hal ini dapat menyebabkan masalah dalam lingkungan yang tidak dapat menangani panggilan sistem yang tidak didukung secara anggun dengan mengembalikan -ENOSYS. Sandbox seccomp dipengaruhi oleh masalah ini.

Perubahan terkait keamanan

  • CVE-2019-19126: ld.so gagal mengabaikan LD_PREFER_MAP_32BIT_EXEC variabel lingkungan selama pelaksanaan program setelah transisi keamanan, memungkinkan penyerang lokal untuk membatasi kemungkinan alamat pemetaan untuk pustaka yang dimuat dan dengan demikian mem-bypass ASLR untuk program setuid. Dilaporkan oleh Marcin Kościelnicki.

Untuk informasi selengkapnya tentang glibc-2.31 lihat dokumen BERITA hulu; perhatikan bahwa Anda mungkin perlu menggulir ke bawah untuk menemukan versi 2.31 karena dokumen terus diperbarui.

mpfr 4.0.2

Fedora 32 menyediakan pustaka GNU MPFR versi 4.0.2. Perubahan penting meliputi:

  • mpfr sekarang mendukung cache bersama untuk aplikasi multithread, sehingga mengurangi penggunaan memori.

  • Peningkatan caching: minimal 10% peningkatan presisi dijamin untuk menghindari terlalu banyak komputasi ulang, sehingga mengurangi penggunaan CPU.

  • Sebuah pool small-precision mpz_t digunakan untuk mengurangi banyaknya alokasi memori, sehingga mengurangi penggunaan CPU.

  • Beberapa fungsi sekarang lebih cepat; mis., mpfr_add, mpfr_sub, mpfr_mul, mpfr_div, mpfr_sqrt, mpfr_set_d, dan mpfr_get_d.

  • Fungsi mpfr_div_ui dapat menghasilkan hasil pembulatan yang salah dalam mpfr 3; bug telah diperbaiki dalam mpfr 4.

Untuk informasi lebih lanjut, kunjungi catatan rilis hulu untuk versi 4.0.0, 4.0.1, dan 4.0.2.