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).
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.
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 untukCLOCK_MONOTONIC
danCLOCK_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 menggunakanclock_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 denganPT_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
, danmpfr_get_d
. -
Fungsi
mpfr_div_ui
dapat menghasilkan hasil pembulatan yang salah dalam mpfr 3; bug telah diperbaiki dalam mpfr 4.
Want to help? Learn how to contribute to Fedora Docs ›