Llançament del conjunt de compiladors GCC 13

Després d'un any de desenvolupament, s'ha llançat el conjunt de compiladors gratuïts GCC 13.1, la primera versió significativa de la nova branca GCC 13.x. D'acord amb el nou esquema de numeració de la versió, es va utilitzar la versió 13.0 en el procés de desenvolupament, i poc abans del llançament de GCC 13.1, la branca GCC 14.0 ja s'havia ramificat, a partir de la qual es formaria la següent versió principal, GCC 14.1.

Principals canvis:

  • GCC inclou una interfície per muntar programes en el llenguatge de programació Modula-2. S'admet el muntatge de codi corresponent als dialectes PIM2, PIM3 i PIM4, així com l'estàndard ISO acceptat per a aquest llenguatge.
  • S'ha afegit una interfície amb una implementació del compilador de llenguatge Rust preparat pel projecte gccrs (GCC Rust) a l'arbre de fonts de GCC. En la seva forma actual, l'extrem directe es marca com a experimental i està desactivat per defecte. Una vegada que el frontend estigui llest (esperat a la propera versió), les eines estàndard GCC es poden utilitzar per compilar programes en llenguatge Rust sense necessitat d'instal·lar el compilador rustc, creat amb desenvolupaments LLVM.
  • El motor Link Time Optimization (LTO) ha afegit suport per al jobserver suportat pel projecte GNU make per optimitzar l'execució de compilacions paral·leles a diversos fils. A GCC, jobserver s'utilitza per paral·lelitzar el treball durant l'optimització de LTO en el context de tot el programa (WPA, anàlisi de tot el programa). Per interactuar amb jobserver, s'utilitzen canals amb nom per defecte (-jobserver-style=fifo).
  • L'analitzador estàtic (-fanalyzer) ofereix 20 noves comprovacions de diagnòstic, incloent "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite -recursió" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-fuite".
  • S'ha implementat la capacitat d'emetre diagnòstics en format SARIF, basat en JSON. El nou format es pot utilitzar per obtenir resultats d'anàlisi estàtica (GCC -fanalyzer), així com per obtenir informació d'avís i errors. L'habilitació es fa amb l'opció "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", on les opcions amb "json" donen com a resultat una variant específica de GCC del format JSON .
  • S'han implementat algunes característiques definides a l'estàndard C23 C, com ara la constant nullptr per definir punters nuls, simplificar l'ús de llistes variàdiques, ampliar les capacitats d'enumeració, l'atribut noreturn, permetent l'ús de constexpr i auto en definir objectes, el tipus de i typeof_unqual, noves paraules clau alignas, alignof, bool, false, static_assert, thread_local i true, que permeten especificar parèntesis buits durant la inicialització.
  • S'han implementat algunes característiques definides a l'estàndard C++23, com ara la capacitat de posar marques al final d'expressions compostes, la compatibilitat amb el tipus char8_t, la directiva del preprocessador #warning, delimitada (\u{}, \o{}, \x{}) i anomenades ('\N{LLETTA LLATINA A}') seqüències d'escapada, operador estàtic(), operador estàtic[], operador d'igualtat dins d'expressions, eliminació d'algunes restriccions sobre l'ús de constexpr, suport per a UTF -8 en els textos font.
  • libstdc++ ha millorat el suport experimental per als estàndards C++20 i C++23, per exemple, afegint suport de fitxers de capçalera i std::format, capacitats de fitxer de capçalera ampliades , s'han afegit tipus de coma flotant addicionals, s'han implementat fitxers de capçalera I .
  • S'han afegit nous atributs de funció per documentar que es passa un descriptor de fitxer en una variable entera: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" i "__attribute__((fd_arg_write(N))) )" Els atributs especificats es poden utilitzar en un analitzador estàtic (-fanalyzer) per detectar un funcionament incorrecte amb descriptors de fitxers.
  • S'ha afegit un nou atribut "__attribute__((assume(EXPR)))", amb el qual podeu dir al compilador que l'expressió és certa i que el compilador pot utilitzar aquest fet sense avaluar l'expressió.
  • S'ha afegit el senyalador "-fstrict-flex-arrays=[nivell]" per seleccionar el comportament quan es manegen elements de matriu flexible en estructures (Membres de matriu flexible, una matriu de mida indefinida al final d'una estructura, per exemple, "int b[]" ).
  • S'ha afegit el senyalador "-Wenum-int-mismatch" per avisar si hi ha una discrepància entre un tipus d'enum i un tipus d'enter.
  • La interfície de l'idioma Fortran admet totalment la finalització.
  • A la part frontal de l'idioma Go, s'ha afegit suport per a funcions i tipus genèrics (genèrics) i s'ha garantit la compatibilitat amb paquets per a l'idioma Go 1.18.
  • El backend de l'arquitectura AArch64 admet CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) i Arm Neoverse V2 (neoverse). -v2). S'ha afegit suport per als arguments "armv9.1-a", "armv9.2-a" i "armv9.3-a" a l'opció "-march=". S'ha afegit suport per a les extensions de processador FEAT_LRCPC, FEAT_CSSC i FEAT_LSE2.
  • S'ha afegit suport per a CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) i Arm Cortex-M85 (cortex-m85) al backend per a l'arquitectura ARM.
  • El backend per a l'arquitectura x86 afegeix suport per a processadors Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, així com els processadors AMD Zen 4 (znver4). S'han implementat les extensions d'arquitectura del conjunt d'instruccions AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT i AMX-COMPLEX, proposades en els processadors Intel. Per als llenguatges C i C++ als sistemes SSE2, es proporciona el tipus __bf16.
  • El backend de generació de codi per a les GPU AMD Radeon (GCN) inclou la possibilitat d'utilitzar acceleradors AMD Instinct MI200 per millorar el rendiment d'OpenMP/OpenACC. Vectorització millorada mitjançant instruccions SIMD.
  • Les capacitats de backend de la plataforma LoongArch s'han ampliat significativament.
  • Al fons de l'arquitectura RISC-V, s'ha afegit suport per a la CPU XuanTie C906 (thead-c906) de T-Head. S'ha implementat el suport per als processadors vectorials definits a l'especificació RISC-V Vector Extension Intrínseca 0.11. S'ha afegit suport per a 30 extensions a l'especificació RISC-V.
  • La generació d'objectes compartits amb l'opció -shared deixa d'afegir codi d'inici després d'afegir un entorn de punt flotant si les optimitzacions -Ofast, -ffast-math o -funsafe-math- estan habilitades.
  • El suport per al format de depuració DWARF s'implementa en gairebé totes les configuracions.
  • S'ha afegit l'opció "-gz=zstd" per comprimir la informació de depuració mitjançant l'algorisme Zstandard. El suport per al mode de compressió de depuració heretat "-gz=zlib-gnu" s'ha interromput.
  • S'ha afegit suport inicial per a OpenMP 5.2 (Open Multi-Processing) i la implementació continuada dels estàndards OpenMP 5.0 i 5.1, que defineixen API i mètodes per aplicar mètodes de programació paral·lel en sistemes multinúclis i híbrids (CPU+GPU/DSP) amb memòria compartida. i unitats de vectorització (SIMD).
  • El suport per al format d'emmagatzematge d'informació de depuració heretat "STABS" (habilitat amb les opcions -gstabs i -gxcoff), creat a la dècada de 1980 i utilitzat al depurador dbx, s'ha interromput.
  • El suport per a Solaris 11.3 ha quedat obsolet (el codi per donar suport a aquesta plataforma s'eliminarà en una versió futura).

Font: opennet.ru

Afegeix comentari