GCC 16 yayımlandı
(gcc.gnu.org)- GNU Compiler Collection’ın yeni sürümü, varsayılan C++ standardını gnu++20’ye değiştirerek C++20 uygulamasını artık deneysel görmeyen önemli bir dönüm noktası oluyor
- C++26 reflection, contracts ve constexpr özellikleri, C++23 özellikleri ve deneysel C++23·C++26 library desteği eklendi; template hataları ile type trait constraint failure tanıları katmanlı mesajlarla daha ayrıntılı hale geldi
- OpenMP ve OpenACC; GPU bellek ayırma, target memset ve device memcpy API’lerini genişletti; Ada, Fortran, Modula-2 ve Algol 68 front end’lerine de yeni dil özellikleri ve deneysel derleyiciler geldi
- x86-64; AMD Zen6, Intel Wildcat Lake ve Intel Nova Lake desteği kazandı; AMD GPU, LoongArch, IBM z Systems, Solaris ve Windows tarafında da hedefe özgü özellikler ve ABI değişiklikleri eklendi
- JSON tanı biçiminin kaldırılması, SARIF ve HTML tanılarının güçlendirilmesi, static analyzer iyileştirmeleri ve libgdiagnostics’e 37 entrypoint eklenmesiyle araç entegrasyonu ve tanı altyapısı önemli ölçüde genişledi
Uyumluluk değişiklikleri ve ortak iyileştirmeler
- Solaris’te
int8_tvb., C99 standardına uyum içinsigned charoldu; bu geriye dönük uyumlu olmayan bir değişiklik- Ayrıntılar için Porting to GCC 16 içindeki Solaris bölümü
- Solaris’te
-pthreadseçeneği artık_REENTRANTdeğerini önceden tanımlamıyor- Ayrıntılar için Porting to GCC 16 içindeki Solaris bölümü
-fdiagnostics-format=içinjsonbiçimi kaldırıldı; makine tarafından okunabilir tanılar için SARIF kullanılmalı- Link-Time Optimization,
-flto-toplevel-asm-heuristicsile üst düzey asm ifadelerini daha iyi ele alıyor - speculative devirtualization, genel dolaylı fonksiyon çağrılarını işliyor ve birden fazla hedef tahminini destekliyor
- vectorizer, reduction için döngü içi paralelliği belirlemede daha esnek hale geldi; yineleme sayısı bilinmeyen döngüler ile uncounted loop vektörleştirmesini destekliyor
- Ayrıca masking kullanan vector length agnostic loop’larda hizalama için peeling, mutual peeling for alignment ve early break döngülerinde vector induction hesaplamasının kaldırılmasını da destekliyor
- GCC Command Options ve option index, daha önce eksik olan çok sayıda seçeneği içerecek şekilde düzeltildi
- GCC-specific attributes belgeleri, GCC’nin desteklediği tüm C/C++ dialect’lerinde geçerli olan standart attribute sözdizimini daha fazla vurgulayacak şekilde modernize edildi
- attribute materyali tekrarları azaltacak şekilde yeniden düzenlendi ve yeni bir attribute index eklendi
- parameter ve option spec file belgeleri, GCC geliştiricileri ile özel GCC yapılandırmalarına ihtiyaç duyan kullanıcılar için GCC internals manual içine taşındı
Dillere göre başlıca değişiklikler
-
OpenMP ve OpenACC
- OpenMP bellek ayırma desteği güçlendirildi;
pinnedtrait allocator veompx_gnu_pinned_mem_alloc, kullanılabildiğinde CUDA API kullanıyor ve Nvidia GPU'larda ilgili bellek erişim performansını iyileştiriyor - GNU uzantısı olan
ompx_gnu_managed_mem_allocallocator veompx_gnu_managed_mem_space, host üzerinde device tarafından erişilebilir bellek ayırıyor- unified-shared memory desteklenmese bile device erişimi mümkün oluyor ve tüm host belleğinin device-accessible olduğu sistemlerde de diğer belleklerden farklı page-migration davranışı gösterebiliyor
- OpenMP 5.0, C/C++ için sınırlı
declare mapperdesteği ekledi;uses_allocatorsclause ise OpenMP 5.2 söz dizimi değişikliklerini ve OpenMP 6.0 semicolon desteğini de içeriyor - OpenMP 5.1, C/C++ için map clause ve
target updateconstruct içindekiiteratormodifier'a ilk desteği ekliyor - OpenMP 5.2, C/C++ için
begin declare variantdirective desteği sunuyor - OpenMP 6.0,
omp_target_memsetveomp_target_memset_asyncAPI routine'lerini ekledi; ayrıcano_openmp_constructsassumptions clause da kullanılabiliyor - OpenMP 5.0, 5.1 ve 5.2'de deprecated olan directive ve clause'lar varsayılan olarak deprecation warning üretir; bu davranış
-Wno-deprecated-openmpile kapatılabilir- deprecated named constant veya API routine kullanıldığında da warning verilir; bu da
-Wno-deprecated-declarationsile kapatılabilir
- deprecated named constant veya API routine kullanıldığında da warning verilir; bu da
- OpenACC, C/C++/Fortran için
acc_memcpy_deviceveacc_memcpy_device_asyncAPI routine'lerini ekledi - OpenACC 3.0'ın
waitdirective'iifclause alabiliyor; OpenACC 3.3'ün Fortran API routine'leriacc_attachveacc_detach, OpenACC 2.6 C/C++ karşılıklarını tamamlıyor - OpenACC 3.4'te Fortran data clause içinde named constant
PARAMETERkullanımı hem spesifikasyonda hem de GCC'de izinli, ancak GCC'de derleme zamanı ve çalışma zamanı davranışını etkilemiyor
- OpenMP bellek ayırma desteği güçlendirildi;
-
Ada, Fortran, Modula-2, Algol 68
- Ada GNAT uzantılarına Constructor ve Destructor eklendi; böylece standart Ada'dan oldukça farklı bir construction/finalization mekanizması sağlanıyor
- Ada için Implicit with, Structural Generic instantiation ve Extended_Access aspect'leri eklendi
Extended_Access, unconstrained array subtype'ını işaret eden general access type declaration üzerinde belirtilebiliyor; pointer representation'ı değiştiriyor ve Ada'nın ayırmadığı belleğin foreign language ile birlikte kullanılmasını kolaylaştırıyor
- Ada,
-gnatd_Vveya verbose mode'daki-gnatd_Wile derleyici hata ayıklaması için VAST kullanabiliyor; ayrıca Ada 2022 Reduction Expressions semantic analysis,Ada.Containers.Bounded_Indefinite_Holders, accessibility rule uygulaması ve Android desteği iyileştirildi - Fortran, single node machine üzerinde native shared memory multithreading kullanan coarray'leri ve Fortran 2018
TEAMözelliğini ele alıyor - Fortran 2003 Parameterized Derived Types desteği iyileştirildi ve LEN parameter işleme çalışıyor, ancak PR82649 nedeniyle gelecekte representation değişikliği gerekiyor
- Fortran 2018,
IMPORTstatement genişletmeleri,REDUCEintrinsic ve yeniGENERICstatement desteği sunuyor - Fortran 2023,
sinpigibi ek trigonometrik fonksiyonları,splitintrinsic subroutine'ini ve opsiyonel lower bound argümanı alabilenc_f_pointerdesteğini getiriyor -fexternal-blas64seçeneği,MATMULiçinde 64-bit integer argümanlarla external BLAS routine çağırır; yalnızca 64-bit sistemlerde ve-ffrontend-optimizeetkin olduğunda geçerlidir- Modula-2, import list, module name ve nested scope symbol işleme sırasında spelling hint veriyor; ayrıca yeni bir wide set uygulaması ve
M2WIDESETlibrary module'ü sunuyor- wide set değişikliği ABI'yi değiştiriyor ve önceki GCC sürümlerinden object file'larla link-time error oluşturabiliyor
- Modula-2'nin varsayılan library'sine
BinDictbinary dictionary module'ü eklendi; çeşitli module'lereWriteveWriteLnprocedure'leri sağlandı ve-fm2-pathname-root=seçeneğiyle external library module erişimi iyileştirildi - GCC, deneysel Algol 68 derleyicisi
ga68'i içeriyor ve Revised Report ile IFIP WG2.1 Algol 68 Support alt komitesince onaylanan errata'yı uygulamayı hedefliyor- Bazı GNU extension'ları ve POSIX prelude da uygulanıyor; dil bilgisi için Algol 68 website, front end bilgisi için wiki incelenebilir
C++ ve libstdc++
- C++ derlemesinin varsayılan dil sürümü -std=gnu++17 yerine -std=gnu++20 oldu
- Önceki C++ standartlarına bağımlı kodların build flag’ine -std= eklemesi veya kodu port etmesi gerekiyor; ayrıntılar için porting notes bölümüne bakın
- C++20 modules desteği hâlâ experimental ve -fmodules ile etkinleştirilmeli
- C++26 özellikleri arasında reflection, annotations for reflection, base class subobject splicing, function parameter reflection, contracts, constexpr exceptions, constexpr virtual inheritance gibi birçok özellik implemente edildi
- P2996R13 Reflection
-std=c++26 -freflectionile etkinleştiriliyor - P2686R4 için kısmi destek var; structured binding
constexprolabilir, ancakconstexprautomatic variable referanslarına henüz izin verilmiyor
- P2996R13 Reflection
- C++23 özelliklerinden P2036R3, P2590R2 ve P2246R1 implemente edildi
- C++ hata mesajları, template ile ilgili sorunlar gibi durumlarda artık hiyerarşik bir yapı kullanıyor; message nesting, girinti ve bullet point’lerle gösteriliyor
- Eski davranış
-fno-diagnostics-show-nestingveya-fdiagnostics-plain-outputile geri getirilebilir
- Eski davranış
- experimental C++20 modules desteği, source file derlenmeden önce
<bits/stdc++.h>header unit’i ilestdvestd.compatmodule’larını build etmek için--compile-std-moduleseçeneğini ekliyor<bits/stdc++.h>header unit’i build edilmişse, import edilebilir standard library header’larının#includekullanımları şeffaf biçimde<bits/stdc++.h>import’una dönüştürülüyor- Bildirilen birçok bug düzeltildi
- Standard library type trait’lerindeki constraint failure diagnostics,
is_constructible_v,is_invocable_vgibi trait’lerin nedenfalsedöndüğünü daha ayrıntılı açıklıyor - libstdc++ içinde 128-bit integer destekleyen target’larda
std::is_integral<__int128>ve benzeri trait’ler artık her zaman true oluyor- Önceden GNU dialect’te true iken strict dialect’te böyle değildi
- P0952R2: A new specification for
std::generate_canonical, C++11 sonrası etkilenen tüm mode’larda implemente edildi ve gözlemlenen output’u etkiliyor- Eski davranış
_GLIBCXX_USE_OLD_GENERATE_CANONICALtanımıyla geri getirilebilir
- Eski davranış
std::variantABI’si, C++20 ve üzeri mode’larla tutarlı olacak şekilde güncellendi ve belirli C++17 mode class layout’larını etkiliyor- Eski davranış
_GLIBCXX_USE_VARIANT_CXX17_OLD_ABItanımıyla geri getirilebilir; etki yalnızca C++17 mode için geçerli
- Eski davranış
std::regexexecution, system stack yerine heap-based stack kullanacak şekilde yeniden yazıldı; böylece daha büyük string matching işlemlerinde stack overflow önleniyor- C++20 implementasyonu artık experimental değil ve Windows üzerinde
std::chrono::current_zone()çalışıyor - GCC 16 öncesindeki C++20 desteği experimental olduğundan, C++20 bileşenlerini kullanan programların older release’lerle uyumlu olmadığı varsayılmalı
- ABI değişiklikleri arasında
<atomic>waiting/notifying function’ları,<semaphore>semaphore türü,<syncstream>synchronization,std::formatargs vestd::formatterrepresentation’ı,<compare>içindekistd::partial_orderingve bazı<ranges>adaptor representation’ları yer alıyor
- ABI değişiklikleri arasında
- experimental C++23 library desteği;
std::mdspan,ranges::starts_with,ranges::ends_with,ranges::shift_left,ranges::shift_rightvestd::allocator_traits::allocate_at_leastözelliklerini içeriyor - experimental C++26 library desteği;
std::simd,std::inplace_vector,std::optional<T&>,std::copyable_function,std::function_ref,std::indirect,std::polymorphic, shared pointer içinstd::owner_equalve<debugging>header’ını içeriyor
Hedef ve işletim sistemi desteği
-
IA-32/x86-64
- AMD Zen6 tabanlı CPU'lar
-march=znver6ile destekleniyor ve Zen5'te etkin olan ISA extension'larının üzerine AVX512_BMM, AVX_NE_CONVERT, AVX_IFMA, AVX_VNNI_INT8, AVX512_FP16 etkinleştiriliyor - AVX512 desteği açıkken ve
znver4,znver5,znver6tuning kullanıldığında, auto-vectorization code size'ı azaltmak ve performansı iyileştirmek için masked vector epilog kullanımını deniyor - Intel Wildcat Lake
-march=wildcatlake, Intel Nova Lake ise-march=novalakeile destekleniyor-march=novalake, Panther Lake tabanlı ISA extension'larına ek olarak APX_F, AVX10.1, AVX10.2, PREFETCHI'yi etkinleştiriyor
- GCC 16'dan itibaren çeşitli
-march=switch'lerinde AMX-TRANSPOSE, USER_MSR, CLDEMOTE, KL, WIDEKL, PREFETCHI etkinleştirmesi kaldırıldı -mavx10.1-256,-mavx10.1-512,-mevex512kaldırıldı;-mavx10.1behavior change warning de birlikte ortadan kalktı- AMX-TRANSPOSE desteği GCC 16'da kaldırıldı ve GCC artık
-mamx-transposeseçeneğini kabul etmiyor - Yeni
--enable-x86-64-mfentryconfigure seçeneği, x86-64 profillemedemcountyerine__fentry__kullanan-mfentry'yi etkinleştiriyor; glibc hedeflerinde varsayılan olarak açık geliyor --enable-tls=DIALECT, varsayılan TLS dialect kontrolünü destekliyor; varsayılan değergnu, izin verilen değerler isegnuve TLS descriptor içingnu2
- AMD Zen6 tabanlı CPU'lar
-
AMD GPU, LoongArch, IBM z Systems
- AMD GPU offloading'de OpenMP target region ve OpenACC compute region başlatma ek yükü önemli ölçüde azaltıldı
- AMD Instinct MI300
gfx942cihazı için deneysel destek eklendi; buna genericgfx9-4-genericile büyük ölçüde uyumlugfx950de dahil - AMD GPU varsayılan multilib build set'i
gfx908,gfx90a,gfx9-generic,gfx9-4-generic,gfx10-3-generic,gfx11-genericolarak değiştirildi- Generic arch varsa, specific device için multilib artık varsayılan olarak derlenmiyor
- Generic architecture, ROCm 6.4.0 ve üzerini gerektiriyor
- Yeni varsayılan multilib set'i, LLVM 20 ve üzeri assembler ile linker gerektiriyor
- GCC'nin AMD kurulum notlarına ve yapılandırma notlarına bakın
- LoongArch,
_BitInt (N)veunsigned _BitInt (N)gibi bit hassasiyetli tamsayı türlerini destekliyor - LoongArch, CPU özelliğine göre function version oluşturup çalışma anında en uygun sürümü otomatik seçen Function Multi-Versioning'i
target_clonesattribute'u ile destekliyor - LoongArch32 architecture desteği eklendi; buna varsayılan
ilp32dABI ileilp32fveilp32sABI'leri de dahil- Standart 32-bit sürüm LA32 ile azaltılmış 32-bit sürüm LA32R'nin ikisini de kapsıyor ve embedded uygulamalar için 32-bit target code üretimini mümkün kılıyor
- Bu özellik Binutils ve glibc desteğine bağlı
- S/390, System z ve IBM z Systems, bit hassasiyetli tamsayı türleri ile
_Float16floating-point türünü destekliyor_Float16işlemleri yazılımla veyafloatinstruction'larıyla gerçekleştiriliyor
- S/390 ailesine, Linux kernel'in canary address loading runtime patching desteği için
-mstack-protector-guard=globalile global stack protector eklendi; ayrıca-mstack-protector-guard-recordda eklendi - S/390 ailesindeki
-m31desteği deprecated oldu ve gelecekteki bir sürümde kaldırılacak
-
İşletim sistemi
- Solaris,
-gsctfseçeneğiyle Solaris CTF yani Compact C Type Format üretimini kolayca destekliyor - Windows, native TLS yani Thread-Local Storage desteği sunuyor
- Etkinleştirmek için configure sırasında
--enable-tlsbelirtilmesi ve GNU binutils 2.44 veya üzeri gerekiyor
- Etkinleştirmek için configure sırasında
- Solaris,
Tanılama, eklentiler, statik analiz
- GCC,
-fdiagnostics-add-output=experimental-htmlile HTML biçiminde tanılama çıktısını destekliyor - SARIF çıktısı dump directory ayarını takip ediyor;
build-dir/foo.oçıktı örneğinde GCC 16, SARIF'ibuild-dir/foo.c.sarifdosyasına yazıyor- GCC 15 aynı örnekte
foo.c.sarifdosyasına yazıyordu
- GCC 15 aynı örnekte
- SARIF çıktısı logical location nesting'i yakalıyor ve birçok durumda
fixobject'i içindedescriptionproperty'sini içeriyor - SARIF
threadFlowLocationöğesininkindsproperty alanı, standart dışı control flow gösterimi için yeni olarakthrow,catch,unwind,setjmp,longjmpdeğerlerini kazanıyor - GCC diagnostics, directed graph bağlayabiliyor ve global directed graph da raporlayabiliyor
- graph, text sink içinde yok sayılıyor ancak SARIF sink içinde yakalanıyor;
experimental-htmlise bunu dot kullanarak SVG tabanlı olarak render ediyor - SARIF veya HTML diagnostic sink üzerinde
cfgs=yesayarlanırsa, tüm optimization pass'lerdeki tüm function'lar için GCC intermediate representation yakalama özelliği etkinleşiyor
- graph, text sink içinde yok sayılıyor ancak SARIF sink içinde yakalanıyor;
- GCC diagnostics, XML ve JSON dosyaları içindeki logical location'lara referans verebiliyor
sarif-replayaracı bunu kullanarak SARIF input issue raporlamasında JSON pointer sağlıyor
GCC_DIAGNOSTICS_LOGenvironment içinde ayarlanırsa, diagnostic subsystem stderr'e veya adlandırılmış bir dosyaya metin günlük çıktısı veriyor- Bu, tanılamaların tam olarak ne zaman ve neden reddedildiği gibi iç kararların izlenmesi için kullanılıyor
EXPERIMENTAL_SARIF_SOCKETenvironment içinde ayarlanırsa, GCC başlangıçta bu socket'e bağlanmayı deniyor ve oluşan her tanılama için JSON-RPC notification gönderiyor- Eklenti geliştiricileri için, loosely-coupled sender ve receiver arasında strongly-typed message ileten bir publish/subscribe framework eklendi
- Bu sürümde eklentilerin subscribe olabildiği topic'ler yalnızca belirli function'ların optimization pass başlangıç/duruş event'leri ve static analyzer ile ilgili event'ler
- GCC diagnostic sink,
finalizerhook'una sahip birextensionobject'ine sahip olabiliyor; eklentiler bunu SARIF output file içine ek bilgi yakalamak için kullanabiliyor - GCC 16'da diagnostic machinery büyük ölçüde yeniden düzenlendi ve yalnızca
diagnostic-core.hkullanan eklentilerin etkilenmemesi gerekiyor- Tanılamaları daha karmaşık kullanan eklenti bakımcılarının porting guide belgesine bakması gerekiyor
- Static analyzer, C++ Named Return Value Optimization ve exception için ilk desteği ele alıyor; böylece basit C++ örneklerinde kullanılabiliyor
- Ancak ölçeklenme sorunları nedeniyle bu sürümde production C++ kodunda kullanılması muhtemelen zor
-fanalyzer,-fexceptionsetkin olduğundanothrowattribute'u olmayan external function call'ların exception fırlatabileceğini varsayıyor- Yeni
-fanalyzer-assume-nothrowseçeneği bu varsayımı devre dışı bırakıyor - Bu, C++ birlikte çalışabilirliği için C kodunda
-fexceptionskullanan ancak kullanılan C API'sinin exception fırlatma olasılığı düşük olan projelerde uyarı artışını önlemek için tasarlandı
- Yeni
-fanalyzeriçin user code representation veri yapıları, anlaşılmasını ve debugging'i kolaylaştırmak için yeniden yazıldı; diagnostic location da bir miktar iyileştirildi- Buna karşılık analyzer'ın memory usage'ı arttı
-fanalyzeriçindeki memory contents simulation veri yapıları yeniden uygulandı; böylece daha hızlı ve bakımı daha kolay hale geldi- analyzer, GCC'nin
value_rangemachinery'sini kullanmaya başlayarak bazı false positive'leri ortadan kaldırıyor
libgdiagnostics ve düzeltilen sorunlar
- libgdiagnostics toplam 37 yeni entrypoint kazandı
- mantıksal konumlarla çalışmak için 5 entrypoint eklendi
- komut satırı seçenekleri ve SARIF playback desteği için 2 entrypoint eklendi
- yönlendirilmiş grafiklerle çalışmak için 12 entrypoint eklendi; bunlar grafik oluşturmayı, global grafik aktarmayı, diagnostic grafiği bağlamayı, node ve edge ekleme/sorgulamayı ve node label ile location ayarlamayı destekliyor
- diagnostic metnini bir buffer içinde oluşturmak için 17 entrypoint eklendi
- message buffer oluşturma/serbest bırakma, string/text/byte/printf append, event id append, URL/quote/color aralıklarını işleme, dump, buffer tabanlı diagnostic finish ve location label/event eklemeyi içeriyor
diagnostic_manager_set_debug_physical_locations()de eklendi- GCC bug tracking system'de 16.1 sürümü için fixed olarak işaretlenen problem report listesi PR list üzerinden görülebilir
- bu liste eksiksiz olmayabilir ve düzeltilen bazı PR'ler yer almıyor olabilir
2 yorum
Nihayet..
Hacker News yorumları
İnsanların benimsemesi gereken ama pratikte muhtemelen pek kullanılmayacak bir uygulama özelliği olarak P2590R2 Explicit lifetime management'ı işaret etmek istiyorum
Bu,
std::start_lifetime_asiçindir ve bir pointer'ı yapılandırılmış bir tipe type-pun yapmak için UB olmayan bir yöntemdirHarici I/O buffer'larını işleyen neredeyse tüm zero-copy kodları kabaca
reinterpret_cast(buffer.get())gibi görünür ve bu undefined behavior'dır; artıkreinterpret_castyerinestart_lifetime_askoyarsanız bu artık kötü bir şey sayılmazhttps://en.cppreference.com/cpp/memory/start_lifetime_as
Burada
reinterpret_castkullanmak bir bug'dırstart_lifetime_as, bellek laundering büyüsüne temiz bir standart isim vermenin dışında bir şey daha yapıyor. Anlamsal olarak belleğe dokunmuyor, oysa no-opmemmoveözünde belleğe dokunur. Pratikte derleyicimemmove'un no-op olduğunu görüp optimize edebildiği için büyük bir fark azdırreadimplementasyonuna bağlıdır. Derleyici açısından tamamen opaque ise, kernel ya da network kartı gibi bir şeyin gerçekten o buffer'ın içindeFoooluşturduğu kabul edilir ve cast tamamen meşru hale gelirstart_lifetime_as, buffer lifetime'ı derleyiciye şeffaf olduğunda ve aliasing varsayımlarını bozabildiğinde faydalıdırBunun anlamı,
T'nin tamamen yeni bir nesne olduğu, içinde subobject'ler bulunduğu ve bunlardan birininUtipinde olduğudur gibi görünüyor.U,bit_castgibi initialize ediliyor; muhtemelen bu, cast'in zaten o adreste duran bitlerden yapıldığı anlamına gelmek isteniyordu. Amaobjtanımsız şekilde ortaya çıktığı için, doğru adreste bulunan bir şeyi kastettiğini varsaymak gerekiyorAncak E'nin ne olduğu belirsiz. Sayfada “E is the lvalue of type U denoting obj” yazıyor, ama
objmuhtemelenchargibi bir tipte olmalı; zatenUtipinde olsaydıbit_castgerekmezdicharbuffer'larda type punning'e izin verilirAz önce bakana kadar GCC sürüm takviminin bu kadar düzenli olduğunu bilmiyordum: https://gcc.gnu.org/develop.html
90'lara kadar insanlar, istenen tüm özellikleri koydukları büyük sürümleri waterfall tarzında çıkarabileceklerini sanıyordu, ama proje büyüyünce her zaman hâlâ hazır olmayan bir özellik üzerinde çalışan biri olur. Düzenli sürüm yapınca en azından müşterilere bir sürüm sunabilirsiniz
Bu yaklaşım, hazır olup olmayacağı belirsiz geliştiricileri kararsız özellikleri kapatacak bir toggle yapmaya zorlar ve gerçekçi olarak bu yapılabilecek en iyi şeye yakındır
Eskiden daha yavaştı ve GCC 2.95'in C++ bug'larını dolaşmak için çok fazla zaman harcadım
Sorunlu sürümü hâlâ hatırlıyor olmam bile çok şey anlatıyor
Bir süredir zaten kullanıyorum. Debian sid'de trunk paketi var
İçinde
c++26 reflectionvar ve reflection ile biraz sihirli şeyler yapıyorum; ser-des gibi bazı durumlarda çok daha iyiKeşke ekosistemde bir LSP sunucusu da olsa
libstdsorun çıkarıyor-fdiagnostics-format=için sözdejsonformatı bu sürümde kaldırıldı ve GCC'de machine-readable diagnostics istiyorsanız SARIF kullanmanız söyleniyorAma bir yandan da
-fdiagnostics-add-output=experimental-htmlile diagnostics'in HTML çıktısı alınabildiği söyleniyorJSON çıktısı kaldırılırken HTML çıktısının eklenmesi kararının arka planını merak ediyorum
Acemi bir soru ama, GCC içeride herhangi bir yerde LLVM kullanıyor mu, yoksa kendi code generation ve optimization pipeline'ına mı sahip? LLVM ile karşılaştırınca seviyesi nasıl?
LLVM'den daha fazla target destekliyor ve çoğu durumda benzer ya da daha iyi executable üretiyor
Wikipedia'ya göre GCC 22 Mart 1987, LLVM'in ilk sürümü ise 2003
Bir diğer büyük fark da lisans. GCC GPL, LLVM ise Apache License kullanıyor; bu yüzden iki proje kod paylaşmıyor
Apple, GCC'den LLVM'e geçiş döneminde, 2012 civarında
llvm-gcckullanıyordu; bu da GCC front end ile LLVM back end birleşimiydihttps://dragonegg.llvm.org
-Ofasthâlâ-fno-fast-mathseçeneğini yok sayıyor mu?Son yaklaşık 3 ay boyunca unstable source kullandım
Yeni GCC ile derlenmeyen ama eski GCC ile gayet iyi derlenen programlar var; bu yüzden şu anda genel olarak
gcc 15.xbana daha uygun geliyorYine de 3000'den fazla program derlediğinizi düşünürseniz çoğu çalışıyor, yalnızca bazılarının patch'lenmesi gerekiyor. Bu tür patch'ler çoğu zaman LFS/BLFS'de bulunabiliyor ve tekil sorunları
sedile düzeltince genelde çalışıyorUmarım bu sorunlar düzeltilmiştir. Hepimizin istikrar ve “çalışsın yeter” anlayışına ihtiyacı var