LLVM 16.0 και κυκλοφόρησε και αυτά είναι τα νέα του

Λογότυπο LLVM

Το LLVM είναι ένα πλαίσιο για την ανάπτυξη μεταγλωττιστών καθώς και για τη βοήθεια στη δημιουργία νέων γλωσσών προγραμματισμού και τη βελτίωση των υπαρχουσών γλωσσών.

Μετά από λίγο περισσότερο από έξι μήνες ανάπτυξης, η έναρξη του τη νέα έκδοση του έργου LLVM 16.0, έκδοση στην οποία υλοποιείται ένας μεγάλος αριθμός αλλαγών και βελτιώσεων.

Για όσους δεν είναι εξοικειωμένοι με το LLVM, θα πρέπει να γνωρίζετε ότι αυτό είναι ένας μεταγλωττιστής συμβατός με το GCC (μεταγλωττιστές, βελτιστοποιητές και γεννήτριες κώδικα) που μεταγλωττίζει προγράμματα σε ενδιάμεσο bitcode εικονικής εντολής τύπου RISC (μια εικονική μηχανή χαμηλού επιπέδου με σύστημα βελτιστοποίησης πολλαπλών επιπέδων).

Ο ψευδοκώδικας που δημιουργείται μπορεί να μετατραπεί από τον μεταγλωττιστή JIT σε οδηγίες μηχανής ακριβώς τη στιγμή της εκτέλεσης του προγράμματος.

Σημαντικά νέα χαρακτηριστικά του LLVM 16.0

Σε αυτή τη νέα έκδοση που παρουσιάζεται, μπορούμε να βρούμε αρκετές σημαντικές βελτιώσεις στο clang 16.0, εκ των οποίων ξεχωρίζει το προεπιλεγμένο πρότυπο C++/ObjC++, το οποίο έχει οριστεί σε gnu++17 (πρώην gnu++14), το οποίο υπονοεί υποστήριξη για χαρακτηριστικά C++17 με επεκτάσεις GNU από προεπιλογή. Η χρήση στοιχείων που ορίζονται στο πρότυπο C++17 επιτρέπεται στον κώδικα LLVM.

Μια άλλη από τις αλλαγές που ξεχωρίζει είναι ότι προστέθηκε υποστήριξη για επεξεργαστές Cortex-A715, Cortex-X3 και Neoverse V2, επεκτάσεις Armv8.3 και δυνατότητες πολλαπλών εκδόσεων στο backend του AArch64.
La συμβατότητα πλατφόρμας Τα Armv2, Armv2A, Armv3 και Armv3M έχουν διακοπεί στο backend της αρχιτεκτονικής ARM, για το οποίο δεν ήταν εγγυημένη η σωστή δημιουργία κώδικα. Προστέθηκε η δυνατότητα δημιουργίας κώδικα για οδηγίες για εργασία με μιγαδικούς αριθμούς και προστέθηκε υποστήριξη για αρχιτεκτονικές των συνόλων οδηγιών (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT to X86 backend.

Εκτός αυτού, οι απαιτήσεις για την κατασκευή LLVM έχουν αυξηθεί, Επίσης, η έκδοση θα πρέπει τώρα να είναι συμβατή με το πρότυπο C++17, δηλαδή η έκδοση απαιτεί τουλάχιστον GCC 7.1, Clang 5.0, Apple Clang 10.0 ή Visual Studio 2019 16.7.

Από την άλλη, αναδεικνύει επίσης βελτιωμένα backend για αρχιτεκτονικές MIPS, PowerPC και RISC-V, καθώς και υποστήριξη για τον εντοπισμό σφαλμάτων 64-bit εκτελέσιμων για την αρχιτεκτονική LoongArch στο πρόγραμμα εντοπισμού σφαλμάτων LLDB και βελτιωμένο χειρισμό των συμβόλων εντοπισμού σφαλμάτων COFF.

Από τις άλλες αλλαγές που ξεχωρίζουν:

  • Στη βιβλιοθήκη Libc++, η κύρια εργασία επικεντρώθηκε στην υλοποίηση υποστήριξης για νέες δυνατότητες των προτύπων C++20 και C++23.
  • Ο χρόνος σύνδεσης έχει μειωθεί σημαντικά στον σύνδεσμο LDD παραλληλίζοντας τις λειτουργίες σάρωσης μετεγκατάστασης διεύθυνσης και αρχικοποίησης ενότητας. Προστέθηκε υποστήριξη για συμπίεση τομών χρησιμοποιώντας τον αλγόριθμο ZSTD.
  • Τονίζονται επίσης οι προηγμένες λειτουργίες που υλοποιούνται με το πρότυπο C++20.
  • καταγραφή δομημένων συνδέσμων σε συναρτήσεις λάμδα.
  • Ο τελεστής ισότητας μέσα στις εκφράσεις.
  • Δυνατότητα να μην προσδιορίζεται η λέξη-κλειδί typename σε ορισμένα περιβάλλοντα,
  • Η δυνατότητα προετοιμασίας προστέθηκε μεταξύ παρενθέσεων ("Aggr(val1, val2)").
  • Εφαρμοσμένες συναρτήσεις που ορίζονται στο μελλοντικό πρότυπο C++2b.
  • Παρέχεται υποστήριξη με τύπο char8_t,
  • Επέκτασε το εύρος των χαρακτήρων που επιτρέπεται για χρήση στο "\N{…}",
  • Προστέθηκε η δυνατότητα χρήσης μεταβλητών που δηλώνονται ως "static constexpr" σε συναρτήσεις που δηλώνονται ως constexpr.
  • Εφαρμοσμένες λειτουργίες που ορίζονται στο μελλοντικό πρότυπο C2x C:
  • Προστέθηκε υποστήριξη για τη φόρτωση πολλών αρχείων διαμόρφωσης (τα προεπιλεγμένα αρχεία διαμόρφωσης φορτώνονται πρώτα και μετά αυτά που καθορίζονται μέσω της σημαίας “–config=”, η οποία μπορεί πλέον να καθοριστεί πολλές φορές).
  • Άλλαξε η σειρά φόρτωσης των προεπιλεγμένων αρχείων διαμόρφωσης: το clang προσπαθεί να φορτώσει πρώτα το αρχείο - .cfg και αν δεν το βρει, προσπαθεί να φορτώσει δύο αρχεία .cfg και .cfg.
  • Προστέθηκε μια νέα σημαία έκδοσης "-fcoro-aligned-allocation" για τη συνήθη διανομή στοίχισης πλαισίου.
  • Προστέθηκε η σημαία "-fmodule-output" για να ενεργοποιηθεί το μονοφασικό μοντέλο κατασκευής τυπικών μονάδων C++.
  • Προστέθηκε η λειτουργία "-Rpass-analysis=stack-frame-layout" για τη διάγνωση προβλημάτων με τη διάταξη πλαισίων στοίβας.
  • Προστέθηκε ένα νέο χαρακτηριστικό __attribute__((target_version("cpu_features"))) και επέκτεινε τη λειτουργικότητα του χαρακτηριστικού __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) σε συγκεκριμένες εκδόσεις των χαρακτηριστικών που παρέχονται από το CPU AArch64 .
  • Βελτιωμένα διαγνωστικά εργαλεία:
  • Προστέθηκε η προειδοποίηση "-Wsingle-bit-bitfield-constant-conversion" για τη σύλληψη σιωπηρής περικοπής κατά την εκχώρηση ενός σε ένα υπογεγραμμένο bit πεδίου ενός bit.
  • Εκτεταμένα διαγνωστικά για μη αρχικοποιημένες μεταβλητές constexpr.
  • Προστέθηκαν προειδοποιήσεις "-Wcast-function-type-strict" και "-Wincompatible-function-pointer-types-strict" για την αντιμετώπιση πιθανών προβλημάτων κατά τη μετάδοση τύπων συναρτήσεων.

Τελικά Εάν ενδιαφέρεστε να μάθετε περισσότερα γι 'αυτό, μπορείτε να ελέγξετε τις λεπτομέρειες στο παρακάτω σύνδεσμο.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: AB Internet Networks 2008 SL
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.