- Rilis baru GNU Compiler Collection menjadi titik balik penting dengan mengubah standar bawaan C++ menjadi gnu++20, dan implementasi C++20 tidak lagi dianggap eksperimental
- Dukungan untuk fitur reflection, contracts, dan constexpr di C++26, fitur C++23, serta library C++23·C++26 eksperimental telah ditambahkan, dan diagnosis untuk error template serta kegagalan constraint type trait kini lebih rinci dengan pesan bertingkat
- OpenMP dan OpenACC memperluas alokasi memori GPU, target memset, dan API device memcpy, dan front end Ada·Fortran·Modula-2·Algol 68 juga mendapat fitur bahasa baru dan compiler eksperimental
- x86-64 mendukung AMD Zen6, Intel Wildcat Lake, dan Intel Nova Lake, dan di sisi AMD GPU·LoongArch·IBM z Systems·Solaris·Windows juga ditambahkan fitur spesifik target dan perubahan ABI
- Penghapusan format diagnosis JSON serta penguatan diagnosis SARIF·HTML, peningkatan static analyzer, dan penambahan 37 entrypoint di libgdiagnostics secara besar memperluas integrasi alat dan infrastruktur diagnosis
Perubahan kompatibilitas dan peningkatan umum
- Di Solaris,
int8_t dan sejenisnya menjadi signed char untuk mematuhi standar C99, dan ini merupakan perubahan yang tidak kompatibel
- Di Solaris, opsi
-pthread tidak lagi melakukan predefine _REENTRANT
- Format
json pada -fdiagnostics-format= telah dihapus, dan diagnosis yang dapat dibaca mesin harus memakai SARIF
- Link-Time Optimization kini menangani pemrosesan pernyataan asm tingkat atas dengan lebih baik melalui
-flto-toplevel-asm-heuristics
- speculative devirtualization menangani pemanggilan fungsi tidak langsung umum dan mendukung tebakan lebih dari satu target
- Vectorizer menjadi lebih fleksibel dalam mengidentifikasi paralelisme di dalam loop untuk reduction, dan mendukung vektorisasi loop dengan jumlah iterasi yang tidak diketahui serta uncounted loop
- Juga mendukung alignment peeling untuk vector length agnostic loop yang memakai masking, mutual peeling for alignment, dan penghapusan perhitungan vector induction pada loop early break
- GCC Command Options dan option index telah diperbaiki agar mencakup banyak opsi yang sebelumnya terlewat
- Dokumentasi GCC-specific attributes dimodernisasi agar lebih menekankan sintaks attribute standar yang diizinkan di semua dialek C/C++ yang didukung GCC
- Materi attribute disusun ulang untuk mengurangi pengulangan, dan attribute index baru ditambahkan
- Dokumentasi parameter dan option spec file dipindahkan ke GCC internals manual untuk pengembang GCC dan pengguna yang memerlukan konfigurasi GCC kustom
Perubahan utama per bahasa
-
OpenMP dan OpenACC
- Dukungan alokasi memori OpenMP diperkuat sehingga allocator trait
pinned dan ompx_gnu_pinned_mem_alloc menggunakan CUDA API saat tersedia, serta meningkatkan performa akses memori tersebut pada GPU Nvidia
- Ekstensi GNU berupa allocator
ompx_gnu_managed_mem_alloc dan ompx_gnu_managed_mem_space mengalokasikan memori yang dapat diakses device dari host
- Akses device tetap dimungkinkan meskipun unified-shared memory tidak didukung, dan bahkan pada sistem tempat semua memori host dapat diakses device, perilaku page-migration dapat berbeda dari memori lain
- OpenMP 5.0 menambahkan dukungan
declare mapper terbatas di C/C++, dan clause uses_allocators juga mencakup perubahan sintaks OpenMP 5.2 hingga dukungan semicolon OpenMP 6.0
- OpenMP 5.1 menambahkan dukungan awal modifier
iterator untuk map clause dan construct target update di C/C++
- OpenMP 5.2 mendukung directive
begin declare variant di C/C++
- OpenMP 6.0 menambahkan routine API
omp_target_memset dan omp_target_memset_async, dan assumptions clause no_openmp_constructs juga dapat digunakan
- Directive dan clause yang deprecated di OpenMP 5.0, 5.1, dan 5.2 secara default akan memunculkan deprecation warning, yang dapat dimatikan dengan
-Wno-deprecated-openmp
- Warning juga muncul saat menggunakan named constant atau routine API yang deprecated, dan dapat dimatikan dengan
-Wno-deprecated-declarations
- OpenACC menambahkan routine API
acc_memcpy_device dan acc_memcpy_device_async untuk C/C++/Fortran
- Directive
wait pada OpenACC 3.0 menerima clause if, dan routine API Fortran acc_attach serta acc_detach pada OpenACC 3.3 melengkapi counterpart C/C++ OpenACC 2.6
- Pada OpenACC 3.4, penggunaan named constant
PARAMETER pada clause data Fortran diperbolehkan oleh spesifikasi maupun GCC, tetapi di GCC tidak memengaruhi perilaku saat compile-time maupun runtime
-
Ada, Fortran, Modula-2, Algol 68
- Ekstensi Ada GNAT menambahkan Constructor dan Destructor yang menyediakan mekanisme construction/finalization yang cukup berbeda dari Ada standar
- Aspect Implicit with, Structural Generic instantiation, dan Extended_Access ditambahkan ke Ada
Extended_Access dapat ditentukan pada general access type declaration yang menunjuk ke unconstrained array subtype, mengubah representasi pointer, dan mempermudah interoperabilitas dengan bahasa asing untuk memori yang tidak dialokasikan Ada
- Ada dapat menggunakan VAST untuk debugging compiler melalui
-gnatd_V atau -gnatd_W dalam verbose mode, serta mengalami peningkatan pada semantic analysis Ada 2022 Reduction Expressions, Ada.Containers.Bounded_Indefinite_Holders, implementasi accessibility rule, dan dukungan Android
- Fortran menangani coarray yang menggunakan multithreading shared memory native pada mesin single node dan fitur
TEAM dari Fortran 2018
- Dukungan Fortran 2003 Parameterized Derived Types ditingkatkan, dan penanganan parameter LEN sudah berfungsi tetapi masih memerlukan perubahan representasi di masa mendatang sesuai PR82649
- Fortran 2018 mendukung perluasan statement
IMPORT, intrinsic REDUCE, dan statement GENERIC baru
- Fortran 2023 mendukung tambahan trigonometric function seperti
sinpi, intrinsic subroutine split, serta c_f_pointer yang menerima optional lower bound sebagai argumen
- Opsi
-fexternal-blas64 memanggil routine BLAS eksternal dengan argumen integer 64-bit dari MATMUL, dan hanya berlaku pada sistem 64-bit serta saat -ffrontend-optimize diterapkan
- Modula-2 memberikan spelling hint saat memproses import list, nama module, dan simbol nested scope, serta memperkenalkan implementasi wide set baru dan module library
M2WIDESET
- Perubahan wide set dapat mengubah ABI dan menyebabkan link-time error dengan object file dari versi GCC sebelumnya
- Library bawaan Modula-2 menambahkan module kamus biner
BinDict, menyediakan procedure Write dan WriteLn di beberapa module, dan meningkatkan akses ke module library eksternal dengan opsi -fm2-pathname-root=
- GCC menyertakan
ga68, compiler Algol 68 eksperimental, dengan tujuan mengimplementasikan Revised Report dan errata yang disetujui subkomite IFIP WG2.1 Algol 68 Support
- Beberapa GNU extension dan POSIX prelude juga diimplementasikan; untuk informasi bahasa lihat situs Algol 68, dan untuk informasi front end lihat wiki
C++ dan libstdc++
- Versi bahasa default untuk kompilasi C++ berubah dari -std=gnu++17 menjadi -std=gnu++20
- Kode yang bergantung pada standar C++ sebelumnya perlu menambahkan -std= pada build flag atau melakukan porting kode; lihat porting notes
- Dukungan C++20 modules masih bersifat experimental dan harus diaktifkan dengan -fmodules
- Banyak fitur C++26 telah diimplementasikan, termasuk reflection, annotations for reflection, base class subobject splicing, function parameter reflection, contracts, constexpr exceptions, constexpr virtual inheritance, dan lainnya
- P2996R13 Reflection diaktifkan dengan
-std=c++26 -freflection
- Sebagian dari P2686R4 didukung secara parsial; structured binding dapat menggunakan
constexpr, tetapi referensi ke constexpr automatic variable masih belum diizinkan
- Fitur C++23 P2036R3, P2590R2, dan P2246R1 telah diimplementasikan
- C++ error message kini memiliki hierarki untuk masalah seperti yang terkait template, dengan indentation dan bullet point untuk menunjukkan nesting pada message
- Dukungan experimental C++20 modules membangun header unit
<bits/stdc++.h> serta module std dan std.compat sebelum source file dikompilasi dengan menambahkan opsi --compile-std-module
- Jika header unit
<bits/stdc++.h> sudah dibangun, #include untuk standard library header yang dapat di-import akan secara transparan diubah menjadi import <bits/stdc++.h>
- Banyak bug yang telah dilaporkan telah diperbaiki
- Constraint failure diagnostics untuk type trait standard library kini memberi tahu dengan lebih rinci mengapa
is_constructible_v, is_invocable_v, dan lainnya bernilai false
- Pada target yang mendukung 128-bit integer di libstdc++,
std::is_integral<__int128> dan trait serupa kini selalu bernilai true
- Sebelumnya ini bernilai true pada GNU dialect, tetapi tidak pada strict dialect
- P0952R2: A new specification for
std::generate_canonical telah diimplementasikan pada semua mode yang terdampak sejak C++11, sehingga memengaruhi output yang teramati
- Perilaku sebelumnya dapat dipulihkan dengan mendefinisikan
_GLIBCXX_USE_OLD_GENERATE_CANONICAL
- ABI
std::variant telah diperbarui agar konsisten dengan mode C++20 ke atas, dan memengaruhi class layout pada mode C++17 tertentu
- Perilaku sebelumnya dapat dipulihkan dengan mendefinisikan
_GLIBCXX_USE_VARIANT_CXX17_OLD_ABI, dan dampaknya hanya berlaku pada mode C++17
- Eksekusi
std::regex telah ditulis ulang agar menggunakan stack berbasis heap alih-alih system stack, sehingga menghindari stack overflow saat mencocokkan string yang lebih besar
- Implementasi C++20 tidak lagi experimental, dan
std::chrono::current_zone() kini berfungsi di Windows
- Karena dukungan C++20 sebelum GCC 16 bersifat experimental, program yang menggunakan komponen C++20 harus dianggap tidak kompatibel dengan rilis yang lebih lama
- ABI yang berubah mencakup waiting/notifying function di
<atomic>, semaphore type di <semaphore>, sinkronisasi di <syncstream>, representasi args std::format dan std::formatter, std::partial_ordering di <compare>, serta representasi beberapa adaptor <ranges>
- Dukungan library C++23 experimental mencakup
std::mdspan, ranges::starts_with, ranges::ends_with, ranges::shift_left, ranges::shift_right, dan std::allocator_traits::allocate_at_least
- Dukungan library C++26 experimental mencakup
std::simd, std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic, std::owner_equal untuk shared pointer, serta header <debugging>
Dukungan target dan sistem operasi
-
IA-32/x86-64
- CPU berbasis AMD Zen6 didukung dengan
-march=znver6, dan mengaktifkan AVX512_BMM, AVX_NE_CONVERT, AVX_IFMA, AVX_VNNI_INT8, AVX512_FP16 di atas ISA extension yang diaktifkan pada Zen5
- Jika dukungan AVX512 aktif dan tuning menggunakan
znver4, znver5, znver6, auto-vectorization akan mencoba memakai masked vector epilog untuk mengurangi ukuran kode dan meningkatkan performa
- Intel Wildcat Lake didukung dengan
-march=wildcatlake, Intel Nova Lake didukung dengan -march=novalake
-march=novalake juga mengaktifkan APX_F, AVX10.1, AVX10.2, PREFETCHI di atas ISA extension berbasis Panther Lake
- Mulai GCC 16, aktivasi AMX-TRANSPOSE, USER_MSR, CLDEMOTE, KL, WIDEKL, PREFETCHI di berbagai switch
-march= dihapus
-mavx10.1-256, -mavx10.1-512, -mevex512 dihapus, dan warning perubahan perilaku -mavx10.1 juga ikut hilang
- Dukungan AMX-TRANSPOSE dihapus pada GCC 16, dan GCC tidak lagi menerima
-mamx-transpose
- Opsi configure baru
--enable-x86-64-mfentry mengaktifkan -mfentry, yang memakai __fentry__ alih-alih mcount untuk profiling x86-64, dan di target glibc ini aktif secara default
--enable-tls=DIALECT mendukung kontrol dialect TLS default, dengan nilai default gnu, dan nilai yang diizinkan adalah gnu serta gnu2 untuk TLS descriptor
-
AMD GPU, LoongArch, IBM z Systems
- Pada offloading AMD GPU, overhead peluncuran OpenMP target region dan OpenACC compute region berkurang drastis
- Dukungan eksperimental untuk perangkat AMD Instinct MI300
gfx942 ditambahkan, dan juga gfx950 yang kompatibel dengan generic gfx9-4-generic dalam banyak kasus
- Set build multilib default AMD GPU berubah menjadi
gfx908, gfx90a, gfx9-generic, gfx9-4-generic, gfx10-3-generic, gfx11-generic
- Jika ada arsitektur generic, multilib untuk perangkat spesifik tidak lagi dibangun secara default
- Arsitektur generic memerlukan ROCm 6.4.0 atau lebih baru
- Set multilib default baru memerlukan assembler dan linker LLVM 20 atau lebih baru
- Lihat AMD installation notes dan configuration notes di GCC
- LoongArch mendukung tipe integer presisi-bit seperti
_BitInt (N) dan unsigned _BitInt (N)
- LoongArch mendukung Function Multi-Versioning melalui atribut
target_clones untuk membuat versi fungsi per fitur CPU dan otomatis memilih versi optimal saat runtime
- Dukungan untuk arsitektur LoongArch32 ditambahkan, mencakup ABI default
ilp32d serta ABI ilp32f dan ilp32s
- Ini mencakup versi 32-bit standar LA32 dan versi 32-bit ringkas LA32R, sehingga memungkinkan pembuatan kode target 32-bit untuk aplikasi embedded
- Fitur ini bergantung pada dukungan Binutils dan glibc
- S/390, System z, IBM z Systems mendukung tipe integer presisi-bit dan tipe floating-point
_Float16
- Operasi
_Float16 dijalankan melalui software atau instruksi float
- Pada keluarga S/390, global stack protector untuk mendukung runtime patching pemuatan alamat canary di kernel Linux ditambahkan melalui
-mstack-protector-guard=global, dan -mstack-protector-guard-record juga ditambahkan
- Dukungan
-m31 pada keluarga S/390 telah deprecated dan akan dihapus pada rilis mendatang
-
Sistem operasi
- Solaris memudahkan pembuatan Solaris CTF, yaitu Compact C Type Format, melalui opsi
-gsctf
- Windows mendukung native TLS, yaitu Thread-Local Storage
- Untuk mengaktifkannya, saat configure perlu menentukan
--enable-tls dan GNU binutils 2.44 atau lebih baru
Diagnostik, plugin, analisis statis
- GCC mendukung output diagnostik berformat HTML dengan
-fdiagnostics-add-output=experimental-html
- Output SARIF mengikuti dump directory, dan dalam contoh output
build-dir/foo.o, GCC 16 menulis SARIF ke build-dir/foo.c.sarif
- GCC 15 dalam contoh yang sama menulisnya ke
foo.c.sarif
- Output SARIF menangkap logical location nesting, dan dalam banyak kasus menyertakan properti
description di objek fix
- Properti
kinds property pada SARIF threadFlowLocation kini mendapatkan nilai throw, catch, unwind, setjmp, longjmp untuk representasi control flow nonstandar
- Diagnostik GCC dapat menautkan directed graph, dan juga dapat melaporkan global directed graph
- graph diabaikan pada text sink, tetapi ditangkap pada SARIF sink, dan
experimental-html merendernya berbasis SVG menggunakan dot
- pada diagnostic sink SARIF atau HTML, jika
cfgs=yes diatur maka pengambilan GCC intermediate representation untuk semua function di semua optimization pass akan diaktifkan
- Diagnostik GCC dapat merujuk logical location di dalam file XML dan JSON
- tool
sarif-replay menggunakan ini untuk memberikan JSON pointer saat melaporkan issue dari input SARIF
- Jika
GCC_DIAGNOSTICS_LOG diatur di environment, subsystem diagnostik akan mengeluarkan text log ke stderr atau named file
- ini digunakan untuk melacak keputusan internal seperti kapan tepatnya dan mengapa suatu diagnostic ditolak
- Jika
EXPERIMENTAL_SARIF_SOCKET diatur di environment, GCC akan mencoba terhubung ke socket tersebut saat startup, dan mengirim JSON-RPC notification untuk setiap diagnostic yang terjadi
- Untuk penulis plugin, framework publish/subscribe ditambahkan untuk mengirim strongly-typed message antara sender dan receiver yang loosely-coupled
- pada rilis ini, topik yang dapat di-subscribe plugin hanya event start/stop optimization pass pada function tertentu dan event terkait static analyzer
- GCC diagnostic sink dapat memiliki objek
extension dengan hook finalizer, dan plugin dapat menggunakan ini untuk menangkap informasi tambahan ke file output SARIF
- Di GCC 16, diagnostic machinery telah dirapikan secara besar-besaran, dan seharusnya tidak berdampak pada plugin yang hanya menggunakan
diagnostic-core.h
- maintainer plugin yang menggunakan diagnostik secara lebih kompleks perlu melihat panduan porting
- Static analyzer menangani dukungan awal untuk C++ Named Return Value Optimization dan exception sehingga bisa digunakan pada contoh C++ sederhana
- karena masalah scaling, pada rilis ini kemungkinan besar masih sulit digunakan untuk code C++ production
-fanalyzer mengasumsikan bahwa external function call tanpa atribut nothrow dapat melempar exception saat -fexceptions aktif
- opsi baru
-fanalyzer-assume-nothrow menonaktifkan asumsi ini
- ini dimaksudkan untuk menghindari peningkatan warning pada project yang memakai
-fexceptions di code C demi interoperabilitas C++, tetapi C API yang digunakan kecil kemungkinannya melempar exception
- Struktur data representasi user code pada
-fanalyzer ditulis ulang agar lebih mudah dipahami dan di-debug, dan lokasi diagnostik sedikit ditingkatkan
- sebagai gantinya, penggunaan memori analyzer meningkat
- Struktur data simulasi isi memori pada
-fanalyzer diimplementasikan ulang agar lebih cepat dan lebih mudah dirawat
- analyzer mulai menggunakan machinery
value_range milik GCC sehingga menghilangkan beberapa false positive
libgdiagnostics dan masalah yang telah diperbaiki
- libgdiagnostics mendapatkan total 37 entrypoint baru
- Ditambahkan 5 entrypoint untuk menangani logical location
- Ditambahkan 2 entrypoint untuk dukungan command-line option dan playback SARIF
- Ditambahkan 12 entrypoint untuk menangani directed graph, mendukung pembuatan graph, pengiriman global graph, pengaitan diagnostic graph, penambahan dan pengambilan node serta edge, serta pengaturan label dan location node
- Ditambahkan 17 entrypoint untuk menyusun diagnostic text ke dalam buffer
- Mencakup pembuatan dan pelepasan message buffer, append string/text/byte/printf, append event id, penanganan rentang URL/quote/color, dump, serta finish diagnostic berbasis buffer dan penambahan location label/event
diagnostic_manager_set_debug_physical_locations() juga ditambahkan
- Daftar problem report yang ditandai fixed untuk rilis 16.1 di GCC bug tracking system dapat dilihat di PR list
- Daftar tersebut mungkin tidak lengkap, dan beberapa PR yang telah diperbaiki mungkin belum tercantum
1 komentar
Komentar Hacker News
Saya ingin menyoroti P2590R2 Explicit lifetime management sebagai fitur implementasi yang seharusnya diadopsi orang, tetapi kemungkinan besar tidak akan banyak dipakai dalam praktik
Ini ditujukan untuk
std::start_lifetime_as, yaitu cara yang bukan UB untuk melakukan type-pun pointer menjadi tipe terstrukturHampir semua kode zero-copy yang menangani buffer I/O eksternal bentuknya kurang lebih seperti
reinterpret_cast(buffer.get()), dan itu adalah undefined behavior, tetapi sekarang jikareinterpret_castdiganti denganstart_lifetime_as, itu bukan lagi tindakan yang burukhttps://en.cppreference.com/cpp/memory/start_lifetime_as
Menggunakan
reinterpret_castdi sini adalah bugstart_lifetime_asmelakukan satu hal lagi selain memberi nama standar yang rapi pada mantra laundering memori. Secara semantik ia tidak menyentuh memori, sedangkan no-opmemmovepada dasarnya memang menyentuh memori. Dalam praktiknya perbedaannya kecil karena compiler bisa melihat bahwamemmoveitu no-op dan mengoptimalkannyaread. Jika dari sudut pandang compiler ia sepenuhnya opaque, maka kernel atau network card dan semacamnya sebenarnya yang membangunFoodi dalam buffer itu, sehingga cast tersebut menjadi sepenuhnya sahstart_lifetime_asberguna ketika lifetime buffer transparan bagi compiler sehingga bisa merusak asumsi aliasingTampaknya maksudnya
Tadalah objek baru yang sepenuhnya lengkap, dengan subobject di dalamnya, dan salah satunya bertipeU.Udiinisialisasi sepertibit_cast, yang mungkin maksudnya dicast dari bit yang sudah ada di alamat tersebut. Namunobjmuncul tanpa definisi, jadi sepertinya harus dimaknai sebagai sesuatu yang berada di alamat yang benarTetapi apa itu E terasa ambigu. Di halaman itu tertulis “E is the lvalue of type U denoting obj”, padahal
objmungkin bertipe sepertichar, dan jika sejak awal sudah bertipeUmakabit_casttidak diperlukancharmemang diizinkan untuk type punningSebelum mencarinya barusan, saya tidak tahu kalau jadwal rilis GCC ternyata serutin ini: https://gcc.gnu.org/develop.html
Sampai era 90-an orang berpikir bisa membuat rilis besar model waterfall setelah semua fitur yang diinginkan masuk, tetapi saat proyek membesar selalu ada orang yang sedang mengerjakan fitur yang belum siap. Dengan rilis reguler, Anda tetap bisa mengirim rilis ke pelanggan
Pendekatan ini memaksa developer yang kesiapan fiturnya belum pasti untuk membuat toggle guna mematikan fitur yang belum stabil, dan secara realistis itu mendekati yang terbaik
Dulu jauh lebih lambat, dan saya menghabiskan terlalu banyak waktu untuk mengakali bug C++ di GCC 2.95
Fakta bahwa saya masih ingat versi bermasalah itu sendiri sudah mengatakan banyak hal
Saya sudah memakainya cukup lama. Debian sid punya paket trunk
Ada
c++26 reflection, jadi saya melakukan beberapa hal ajaib dengan reflection, dan untuk beberapa kasus seperti ser-des hasilnya jauh lebih baikAndai saja ekosistemnya punya server LSP
libstdsedang menimbulkan masalahFormat yang disebut
jsonpada-fdiagnostics-format=telah dihapus di rilis ini, dan sekarang jika Anda memerlukan diagnostics yang machine-readable dari GCC, mereka menyuruh memakai SARIFTetapi mereka juga mengatakan bahwa diagnostics sekarang bisa dioutput sebagai HTML dengan
-fdiagnostics-add-output=experimental-htmlSaya penasaran apa latar belakang keputusan menghapus output JSON sambil menambahkan output HTML
Pertanyaan pemula, saya penasaran apakah GCC memakai LLVM di bagian internalnya, atau punya code generation dan optimization pipeline sendiri. Saya juga penasaran bagaimana levelnya dibanding LLVM
Ia mendukung lebih banyak target daripada LLVM, dan dalam kebanyakan kasus menghasilkan executable yang setara atau lebih baik
Menurut Wikipedia, GCC tanggalnya 22 Maret 1987, sedangkan rilis awal LLVM tahun 2003
Perbedaan besar lainnya adalah lisensi. GCC memakai GPL, LLVM memakai Apache License, jadi kedua proyek itu tidak saling berbagi kode
Apple memakai
llvm-gccsekitar 2012, saat masa transisi dari GCC ke LLVM, dan itu adalah gabungan front end GCC dengan back end LLVMhttps://dragonegg.llvm.org
Apakah
-Ofastmasih mengabaikan-fno-fast-math?Selama sekitar 3 bulan terakhir saya sudah mencoba source unstable
Ada program yang tidak bisa dikompilasi dengan GCC terbaru tetapi berjalan baik dengan GCC lama, jadi untuk saat ini secara keseluruhan
gcc 15.xlebih cocok bagi sayaMeski begitu, kalau Anda melihat lebih dari 3000 program yang dikompilasi, sebagian besar tetap berhasil, dan hanya sebagian yang perlu patch. Patch seperti itu sering bisa ditemukan di LFS/BLFS, dan kalau masalah per kasus diperbaiki dengan
sed, biasanya tetap jalanSaya harap masalah-masalah itu sudah diperbaiki. Kita semua butuh stabilitas dan sesuatu yang “langsung berfungsi”