Έκδοση της σουίτας μεταγλωττιστή GCC 13

Μετά από ένα χρόνο ανάπτυξης, κυκλοφόρησε η δωρεάν σουίτα μεταγλωττιστών GCC 13.1, η πρώτη σημαντική έκδοση στον νέο κλάδο GCC 13.x. Σύμφωνα με το νέο σχήμα αρίθμησης εκδόσεων, η έκδοση 13.0 χρησιμοποιήθηκε στη διαδικασία ανάπτυξης και λίγο πριν από την κυκλοφορία του GCC 13.1, ο κλάδος GCC 14.0 είχε ήδη διακλαδωθεί, από τον οποίο θα δημιουργηθεί η επόμενη μεγάλη έκδοση, το GCC 14.1.

Βασικές αλλαγές:

  • Το GCC περιλαμβάνει ένα frontend για τη συναρμολόγηση προγραμμάτων στη γλώσσα προγραμματισμού Modula-2. Υποστηρίζεται η συναρμολόγηση του κώδικα που αντιστοιχεί στις διαλέκτους PIM2, PIM3 και PIM4, καθώς και το αποδεκτό πρότυπο ISO για μια δεδομένη γλώσσα.
  • Στο δέντρο προέλευσης GCC προστέθηκε μια διεπαφή με μια υλοποίηση του μεταγλωττιστή γλώσσας Rust που προετοιμάστηκε από το έργο gccrs (GCC Rust). Στην τρέχουσα μορφή του, το μπροστινό άκρο επισημαίνεται ως πειραματικό και απενεργοποιημένο από προεπιλογή. Μόλις το frontend είναι έτοιμο (αναμένεται στην επόμενη έκδοση), τα τυπικά εργαλεία του GCC μπορούν να χρησιμοποιηθούν για τη μεταγλώττιση προγραμμάτων στη γλώσσα Rust χωρίς την ανάγκη εγκατάστασης του μεταγλωττιστή rustc, που έχει κατασκευαστεί με χρήση των εξελίξεων LLVM.
  • Η μηχανή Link Time Optimization (LTO) έχει προσθέσει υποστήριξη για το jobserver που υποστηρίζεται από το έργο GNU make για τη βελτιστοποίηση της εκτέλεσης παράλληλων δομών σε πολλαπλά νήματα. Στο GCC, ο jobserver χρησιμοποιείται για να παραλληλίσει την εργασία κατά τη βελτιστοποίηση LTO στο πλαίσιο ολόκληρου του προγράμματος (WPA, Ανάλυση ολόκληρου του προγράμματος). Για την αλληλεπίδραση με το jobserver, οι επώνυμες σωλήνες χρησιμοποιούνται από προεπιλογή (-jobserver-style=fifo).
  • Ο στατικός αναλυτής (-fanalyzer) προσφέρει 20 νέους διαγνωστικούς ελέγχους, συμπεριλαμβανομένων "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite -recursion" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Έχει υλοποιηθεί η δυνατότητα εξόδου διαγνωστικών σε μορφή SARIF, βάσει JSON. Η νέα μορφή μπορεί να χρησιμοποιηθεί για τη λήψη αποτελεσμάτων στατικής ανάλυσης (GCC -fanalyzer), καθώς και για τη λήψη πληροφοριών προειδοποίησης και σφαλμάτων. Η ενεργοποίηση γίνεται με την επιλογή "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", όπου οι επιλογές με "json" καταλήγουν σε έξοδο σε μια συγκεκριμένη παραλλαγή του GCC της μορφής JSON .
  • Εφάρμοσε ορισμένα χαρακτηριστικά που ορίζονται στο πρότυπο C23 C, όπως η σταθερά nullptr για τον καθορισμό μηδενικών δεικτών, η απλοποίηση της χρήσης μεταβλητών λιστών, η επέκταση των δυνατοτήτων απαρίθμησης, το χαρακτηριστικό noreturn, η χρήση των constexpr και auto κατά τον καθορισμό αντικειμένων, ο τύπος και typeof_unqual, νέες λέξεις-κλειδιά alignas, alignof, bool, false, static_assert, thread_local και true, επιτρέποντας τον καθορισμό κενών παρενθέσεων κατά την προετοιμασία.
  • Εφάρμοσε ορισμένες δυνατότητες που ορίζονται στο πρότυπο C++23, όπως η δυνατότητα τοποθέτησης σημαδιών στο τέλος σύνθετων παραστάσεων, συμβατότητα με τον τύπο char8_t, η οδηγία προεπεξεργαστή #warning, οριοθετημένη (\u{}, \o{}, \x{}) και ονομάστηκε ('\N{LATIN CAPITAL LETTER A}') ακολουθίες διαφυγής, στατικός τελεστής(), στατικός τελεστής[], τελεστής ισότητας μέσα σε εκφράσεις, εξάλειψη ορισμένων περιορισμών στη χρήση του constexpr, υποστήριξη για UTF -8 σε κείμενα πηγής.
  • Το libstdc++ έχει βελτιωμένη πειραματική υποστήριξη για πρότυπα C++20 και C++23, για παράδειγμα, προσθέτοντας υποστήριξη αρχείων κεφαλίδας και std::format, διευρυμένες δυνατότητες αρχείου κεφαλίδας , προστέθηκαν πρόσθετοι τύποι κινητής υποδιαστολής, εφαρμόστηκαν αρχεία κεφαλίδας Και .
  • Προστέθηκαν νέα χαρακτηριστικά συνάρτησης για να τεκμηριωθεί ότι ένας περιγραφέας αρχείου μεταβιβάζεται σε μια ακέραια μεταβλητή: "__attribute__((fd_arg(N)))", "__attribute__((fd_arg_read(N)))" και "__attribute__((fd_arg_write(N) )" Τα καθορισμένα χαρακτηριστικά μπορούν να χρησιμοποιηθούν σε έναν στατικό αναλυτή (-fanalyzer) για τον εντοπισμό εσφαλμένης λειτουργίας με περιγραφείς αρχείων.
  • Προστέθηκε ένα νέο χαρακτηριστικό "__attribute__((assume(EXPR)))", με το οποίο μπορείτε να πείτε στον μεταγλωττιστή ότι η έκφραση είναι αληθής και ο μεταγλωττιστής μπορεί να χρησιμοποιήσει αυτό το γεγονός χωρίς να αξιολογήσει την έκφραση.
  • Προστέθηκε η σημαία "-fstrict-flex-arrays=[level]" για επιλογή συμπεριφοράς κατά το χειρισμό ευέλικτων στοιχείων πίνακα σε δομές (Ευέλικτα μέλη πίνακα, ένας πίνακας αορίστου μεγέθους στο τέλος μιας δομής, για παράδειγμα, "int b[]" ).
  • Προστέθηκε η σημαία "-Wenum-int-mismatch" για προειδοποίηση εάν υπάρχει αναντιστοιχία μεταξύ ενός τύπου enum και ενός ακέραιου τύπου.
  • Το frontend για τη γλώσσα Fortran υποστηρίζει πλήρως την οριστικοποίηση.
  • Στο μπροστινό μέρος για τη γλώσσα Go, έχει προστεθεί υποστήριξη για γενικές λειτουργίες και τύπους (γενικά) και έχει διασφαλιστεί η συμβατότητα με πακέτα για τη γλώσσα Go 1.18.
  • Το backend για την αρχιτεκτονική AArch64 υποστηρίζει CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) και Arm Neoverse V2 (neoverse -v2). Προστέθηκε υποστήριξη για ορίσματα "armv9.1-a", "armv9.2-a" και "armv9.3-a" στην επιλογή "-march=". Προστέθηκε υποστήριξη για επεκτάσεις επεξεργαστή FEAT_LRCPC, FEAT_CSSC και FEAT_LSE2.
  • Η υποστήριξη για CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) και Arm Cortex-M85 (cortex-m85) έχει προστεθεί στο backend για την αρχιτεκτονική ARM.
  • Το backend για την αρχιτεκτονική x86 προσθέτει υποστήριξη για επεξεργαστές Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, καθώς και επεξεργαστές AMD Zen 4 (znver4). Οι επεκτάσεις αρχιτεκτονικής σετ εντολών AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT και AMX-COMPLEX, που προτείνονται στους επεξεργαστές Intel, έχουν υλοποιηθεί. Για γλώσσες C και C++ σε συστήματα SSE2, παρέχεται ο τύπος __bf16.
  • Το backend δημιουργίας κώδικα για τις AMD Radeon GPU (GCN) περιλαμβάνει τη δυνατότητα χρήσης επιταχυντών AMD Instinct MI200 για τη βελτίωση της απόδοσης OpenMP/OpenACC. Βελτιωμένη διανυσματοποίηση χρησιμοποιώντας οδηγίες SIMD.
  • Οι δυνατότητες υποστήριξης για την πλατφόρμα LoongArch έχουν επεκταθεί σημαντικά.
  • Στο backend για την αρχιτεκτονική RISC-V, έχει προστεθεί υποστήριξη για την CPU XuanTie C906 (thead-c906) του T-Head. Έχει υλοποιηθεί η υποστήριξη για διανυσματικούς επεξεργαστές που ορίζονται στην προδιαγραφή RISC-V Vector Extension Intrinsic 0.11. Προστέθηκε υποστήριξη για 30 επεκτάσεις στις προδιαγραφές RISC-V.
  • Η δημιουργία κοινόχρηστων αντικειμένων με την επιλογή -shared διακόπτει την προσθήκη κώδικα εκκίνησης μετά την προσθήκη περιβάλλοντος κινητής υποδιαστολής, εάν είναι ενεργοποιημένες οι βελτιστοποιήσεις -Ofast, -fast-math ή -funsafe-math-.
  • Η υποστήριξη για τη μορφή εντοπισμού σφαλμάτων DWARF εφαρμόζεται σχεδόν σε όλες τις διαμορφώσεις.
  • Προστέθηκε η επιλογή "-gz=zstd" για τη συμπίεση πληροφοριών εντοπισμού σφαλμάτων χρησιμοποιώντας τον αλγόριθμο Zstandard. Η υποστήριξη για τη λειτουργία συμπίεσης εντοπισμού σφαλμάτων παλαιού τύπου "-gz=zlib-gnu" έχει διακοπεί.
  • Προστέθηκε αρχική υποστήριξη για το OpenMP 5.2 (Open Multi-Processing) και συνεχής εφαρμογή των προτύπων OpenMP 5.0 και 5.1, τα οποία ορίζουν API και μεθόδους για την εφαρμογή παράλληλων μεθόδων προγραμματισμού σε συστήματα πολλαπλών πυρήνων και υβριδικών (CPU+GPU/DSP) με κοινόχρηστη μνήμη και μονάδες διανυσματοποίησης (SIMD).
  • Η υποστήριξη για την παλαιού τύπου μορφή αποθήκευσης πληροφοριών εντοπισμού σφαλμάτων "STABS" (ενεργοποιημένη με τις επιλογές -gstabs και -gxcoff), που δημιουργήθηκε τη δεκαετία του 1980 και χρησιμοποιήθηκε στο πρόγραμμα εντοπισμού σφαλμάτων dbx, έχει διακοπεί.
  • Η υποστήριξη για το Solaris 11.3 έχει καταργηθεί (ο κώδικας για την υποστήριξη αυτής της πλατφόρμας θα αφαιρεθεί σε μελλοντική έκδοση).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο