Το GCC (Συλλογή μεταγλωττιστή GNU) είναι ένα λογισμικό γραμμής εντολών ανοιχτού κώδικα σχεδιασμένο να λειτουργεί ως μεταγλωττιστής για λειτουργικά συστήματα που βασίζονται στο GNU / Linux και BSD. Περιλαμβάνει front-ends για πολλές γλώσσες προγραμματισμού, όπως Objective-C, Go, C ++, Java, C, Ada και Fortran.
Χαρακτηριστικά με μια ματιά
Με το GCC μπορείτε να διαμορφώσετε, να μεταγλωττίσετε και να εγκαταστήσετε εφαρμογές GNU / Linux σε λειτουργικά συστήματα Linux ή BSD χρησιμοποιώντας μόνο το αρχικό αρχείο του αντίστοιχου προγράμματος. Ωστόσο, οι χρήστες δεν χρειάζεται να αλληλεπιδρούν με τον μεταγλωττιστή, καθώς αυτό γίνεται αυτόματα από τη διαμόρφωση και τη δημιουργία σεναρίων.
Το έργο περιλαμβάνει επίσης βιβλιοθήκες για διάφορες γλώσσες προγραμματισμού, όπως libstdc και libgcj, και όπως και το περισσότερο λογισμικό GNU, πρέπει να ρυθμιστεί πριν να μπορεί να κατασκευαστεί και να εγκατασταθεί στον υπολογιστή σας.
Μπορεί επίσης να εμφανίσει την πλήρη διαδρομή σε μια συγκεκριμένη βιβλιοθήκη, τους φακέλους στη διαδρομή αναζήτησης του μεταγλωττιστή, την πλήρη διαδρομή προς ένα συγκεκριμένο στοιχείο, τον κατάλογο βιβλιοθηκών στόχων, το sysroot επίθημα που χρησιμοποιείται για την εύρεση κεφαλίδων και την κανονικοποιημένη τριπλή GNU. p>
Επιπλέον, υπάρχουν διάφορες άλλες επιλογές για τη μεταφορά ορισμένων επιλογών και παραδειγμάτων που χωρίζονται από κόμματα στον assembler, τον preprocessor και τον linker, τη μεταγλώττιση και τη συναρμολόγηση χωρίς σύνδεση, τη δημιουργία μιας κοινόχρηστης βιβλιοθήκης και πολλών άλλων.
Σχεδιασμένο για το λειτουργικό σύστημα GNU
Αρχικά γράφτηκε ως κύριος μεταγλωττιστής για το λειτουργικό σύστημα GNU, το GCC (Συλλογή μεταγλωττιστή GNU) αναπτύχθηκε ως 100% ελεύθερο λογισμικό και είναι εγκατεστημένο από προεπιλογή σε οποιαδήποτε διανομή Linux.
Το λογισμικό χρησιμοποιείται επίσης από προγραμματιστές ανοιχτού κώδικα για την κατάρτιση των προγραμμάτων τους. Η γραμμή εντολών έρχεται με πολλές επιλογές, μεταξύ των οποίων μπορούμε να αναφέρουμε την ικανότητα εμφάνισης του επεξεργαστή στόχου του μεταγλωττιστή, καθώς και τη σχετική διαδρομή προς τις βιβλιοθήκες λειτουργιών.
Συμπέρασμα
Συνολικά, το GCC είναι ένα από τα πιο σημαντικά συστατικά του κάθε λειτουργικού συστήματος GNU / Linux. Όχι μόνο δεν μπορούμε να φανταστούμε έναν κόσμο χωρίς αυτό, αλλά το GCC είναι ο κύριος λόγος πίσω από όλο το οικοσύστημα ανοιχτού κώδικα.
Τι είναι νέο σε αυτή την έκδοση: p>GCC 7.3 είναι μια έκδοση κώδικα σφαλμάτων από τον κλάδο GCC 7 που περιέχει σημαντικές διορθώσεις για παλινδρομήσεις και σοβαρά σφάλματα στο GCC 7.2 με περισσότερα από 99 σφάλματα που έχουν καθοριστεί από την προηγούμενη έκδοση.
Τι νέο υπάρχει στην έκδοση 8.1.0:
- Ο κλάδος GCC 7 περιέχει σημαντικές διορθώσεις για παλινδρομήσεις και σοβαρά σφάλματα στο GCC 7.2 με περισσότερα από 99 σφάλματα που έχουν καθοριστεί από την προηγούμενη έκδοση.
- Αυτή η έκδοση περιλαμβάνει επιλογές δημιουργίας κώδικα για την άμβλυνση του Specter Variant 2 (CVE 2017-5715) για τους στόχους x86 και powerpc.
Τι νέο υπάρχει στην έκδοση:
- Το GCC 7.1 είναι μια σημαντική έκδοση που περιέχει σημαντικές νέες λειτουργίες που δεν είναι διαθέσιμες στο GCC 6.x ή σε προηγούμενες εκδόσεις του GCC. Το C ++ frontend έχει τώρα πειραματική υποστήριξη για όλο το τρέχον C ++ 17 draft, με τις επιλογές -std = c ++ 1z και -std = gnu ++ 1z και η βιβλιοθήκη libstdc ++ έχει το μεγαλύτερο μέρος του C ++ 17 draft λειτουργίες βιβλιοθήκης που εφαρμόζονται επίσης. Αυτές οι εκδόσεις παρουσιάζουν διάφορες βελτιώσεις στα εκπεμπόμενα διαγνωστικά, συμπεριλαμβανομένων των βελτιωμένων τοποθεσιών, των περιοχών τοποθεσίας, των προτάσεων για τα ανακριβή αναγνωριστικά, τα ονόματα επιλογών, τις συμβουλές καθορισμού και διάφορες νέες προειδοποιήσεις. Οι βελτιστοποιητές έχουν βελτιωθεί, με βελτιώσεις που εμφανίζονται σε όλες τις βελτιστοποιήσεις εντός και μεταξύ των διαδικασιών, τις βελτιστοποιήσεις χρόνου σύνδεσης και τις διάφορες επαναλήψεις στόχων, όπως, μεταξύ άλλων, προσθήκες συγχώνευσης πακέτων αποθήκευσης, βελτιστοποίησης κώδικα ανύψωσης, διαχωρισμού βρόχων και συρρίκνωσης βελτιώσεις συσκευασίας. Το εργαλείο Address Sanitizer μπορεί τώρα να αναφέρει τις χρήσεις των μεταβλητών μετά την έξοδο από το πεδίο εφαρμογής τους. Το GCC μπορεί πλέον να ρυθμιστεί για εκφόρτωση OpenMP 4.5 σε NVPia PTX GPGPUs.
Τι νέο υπάρχει στην έκδοση 6.3.0:
- Το GCC 6.3 είναι μια έκδοση κώδικα σφαλμάτων από τον κλάδο GCC 6 που περιέχει σημαντικές διορθώσεις για παλινδρομήσεις και σοβαρά σφάλματα στο GCC 6.2 με περισσότερα από 79 σφάλματα που έχουν καθοριστεί από την προηγούμενη έκδοση.
Τι νέο υπάρχει στην έκδοση 6.2.0:
- Αυτή η έκδοση είναι μια έκδοση bug-fix, που περιέχει διορθώσεις για παλινδρομήσεις στο GCC 5.2 σε σχέση με προηγούμενες εκδόσεις του GCC.
Τι νέο υπάρχει στην έκδοση 6.1.0:
- Αυτή η έκδοση είναι μια έκδοση bug-fix, που περιέχει διορθώσεις για παλινδρομήσεις στο GCC 5.2 σε σχέση με προηγούμενες εκδόσεις του GCC.
Τι νέο υπάρχει στην έκδοση 5.3.0:
- Αυτή η έκδοση είναι μια έκδοση bug-fix, που περιέχει διορθώσεις για παλινδρομήσεις στο GCC 5.2 σε σχέση με προηγούμενες εκδόσεις του GCC.
Τι νέο υπάρχει στην έκδοση 5.2.0:
- Αυτή η έκδοση είναι μια έκδοση bug-fix, που περιέχει διορθώσεις για παλινδρομήσεις στο GCC 5.1 σε σχέση με προηγούμενες εκδόσεις του GCC.
Τι νέο υπάρχει στην έκδοση 5.1.0:
- Το front-end C ++ έχει τώρα πλήρη υποστήριξη γλώσσας C ++ 14 και η Standard C ++ Library έχει πλήρη υποστήριξη C ++ 11 και πλήρη πειραματική υποστήριξη C ++ 14. Η πλήρης υποστήριξη C ++ 11 έχει καταστεί δυνατή με την υιοθέτηση του Dual ABI, για περισσότερες λεπτομέρειες, βλ. Https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html.
- Το front-end C είναι τώρα προεπιλεγμένο για τη λειτουργία C11 με τις επεκτάσεις GNU, το οποίο επηρεάζει τη σημασιολογία της εν σειρά λέξης-κλειδιού και φέρνει αρκετές άλλες ορατές αλλαγές του χρήστη, δείτε https://gcc.gnu.org/gcc-5/porting_to.html για περισσότερες λεπτομέρειες.
- Το GCC 5.1 περιέχει διάφορες βελτιώσεις βελτιστοποίησης μεταξύ διαδικασιών, π.χ. ένα νέο πακέτο ταυτότητας κώδικα IPA πανομοιότυπου κώδικα και διάφορες βελτιώσεις LTO, π.χ. Η δημιουργία ODR που βασίζεται στη συγχώνευση των τύπων C ++, βλ. Http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html για περισσότερες λεπτομέρειες.
- Ο GCC 5.1 Το τοπικό καταχωρητή καταχώρησης περιέχει πλέον μια υποπεριοχή επαναπληροφόρησης, στο i? 86 / x86-64 είναι σε θέση να χρησιμοποιήσει ξανά το σκληρό μητρώο PIC για να βελτιώσει την απόδοση του ανεξάρτητου κώδικα θέσης, υπάρχει μια απλή διαδικασία διαδοχής RA και διάφορα άλλα μητρώα βελτιώθηκαν οι κατανομές.
- Το GCC 5.1 προσθέτει μερική υποστήριξη για το πρότυπο OpenACC, υποστήριξη για το OpenMP 4.0 εκφόρτωση στους επερχόμενους επιταχυντές Xeon Phi της Intel και υποστήριξη για εκφόρτωση OpenACC σε PTX. Ο αθέμιτος απολυμαντής συμπεριφοράς στο GCC έχει επεκταθεί προσθέτοντας διάφορους νέους ελέγχους χρόνου εκτέλεσης. Μια πειραματική βιβλιοθήκη GCC JIT έχει προστεθεί στο GCC 5.1
Τι νέο υπάρχει στην έκδοση 4.8.4:
- Βελτιώσεις γενικού βελτιωτή:
- Ο ανιχνευτής διεύθυνσης AddressSanitizer, ένας γρήγορος ανιχνευτής σφαλμάτων μνήμης, είναι τώρα διαθέσιμος στο ARM.
- ΑπροσδιόριστοςBehaviorSanitizer (ubsan), ένας γρήγορος ανυπολόγιστος ανιχνευτής συμπεριφοράς, έχει προστεθεί και μπορεί να ενεργοποιηθεί μέσω -fsanitize = undefined. Για την ανίχνευση της απροσδιόριστης συμπεριφοράς κατά τη διάρκεια εκτέλεσης, θα χρησιμοποιηθούν διάφοροι υπολογισμοί. Το UndefinedBehaviorSanitizer διατίθεται προς το παρόν για τις γλώσσες C και C ++.
- Βελτιώσεις βελτιστοποίησης χρόνου σύνδεσης (LTO):
- Ο τύπος συγχώνευσης ξαναγράφηκε. Η νέα εφαρμογή είναι σημαντικά ταχύτερη και χρησιμοποιεί λιγότερη μνήμη.
- Καλύτερος αλγόριθμος διαχωρισμού με αποτέλεσμα λιγότερη ροή κατά τη διάρκεια του χρόνου σύνδεσης.
- Η έγκαιρη κατάργηση των εικονικών μεθόδων μειώνει το μέγεθος των αρχείων αντικειμένων και βελτιώνει τη χρήση της μνήμης και τη σύνταξη του χρόνου.
- Οι φορτίο λειτουργιών φορτώνονται τώρα κατά παραγγελία και απελευθερώνονται νωρίτερα βελτιώνοντας τη συνολική χρήση της μνήμης κατά τη διάρκεια της σύνδεσης.
- Οι κρυφές μεθόδους C ++ μπορούν τώρα να βελτιστοποιηθούν.
- Όταν χρησιμοποιείτε μια σύνδεση συνδέσμου, η συμπλήρωση με την επιλογή -flto δημιουργεί τώρα λεπτά αρχεία αντικειμένων (.o) τα οποία περιέχουν μόνο αναπαράσταση ενδιάμεσης γλώσσας για LTO. Χρησιμοποιήστε τα αντικείμενα -fat-lto-για να δημιουργήσετε αρχεία που περιέχουν επιπλέον τον κωδικό αντικειμένων. Για να δημιουργήσετε στατικές βιβλιοθήκες κατάλληλες για επεξεργασία LTO, χρησιμοποιήστε gcc-ar και gcc-ranlib. για να εμφανίσετε σύμβολα από ένα λεπτό αρχείο αντικειμένων, χρησιμοποιήστε το gcc-nm. (Αυτό απαιτεί ότι τα ar, ranlib και nm έχουν συνταχθεί με υποστήριξη plugin.)
- Η χρήση της μνήμης του Firefox με δυνατότητα εντοπισμού σφαλμάτων μειώθηκε από 15GB σε 3,5GB. σύνδεση χρόνου από 1700 δευτερόλεπτα σε 350 δευτερόλεπτα.
- Βελτιώσεις βελτίωσης μεταξύ διαδικασιών:
- Μονάδα ανάλυσης κληρονομιών νέας μορφής που βελτιώνει την αποκρυπτογράφηση. Η αποκρυπτογράφηση λαμβάνει τώρα υπόψη τα ανώνυμα ονόματα-χώρους και την τελική λέξη-κλειδί C ++ 11.
- Νέα παράδοση κερδοσκοπικής αποεικονικοποίησης (ελεγχόμενη από -fdevirtualize-κερδοσκοπικά.
- Οι κλήσεις που έγιναν κερδοσκοπικά απευθείας μετατρέπονται σε έμμεσες όπου η άμεση κλήση δεν είναι φθηνότερη.
- Εισάγονται τοπικά ψευδώνυμα για σύμβολα τα οποία είναι γνωστό ότι είναι ισοδύναμα σε κοινές βιβλιοθήκες, βελτιώνοντας τους χρόνους δυναμικής σύνδεσης.
- Βελτιώσεις βελτίωσης βελτιστοποίησης ανάδρασης:
- Προφίλ των προγραμμάτων που χρησιμοποιούν λειτουργίες C ++ inline είναι πλέον πιο αξιόπιστη.
- Το νέο προφίλ χρόνου καθορίζει την τυπική σειρά εκτέλεσης των λειτουργιών.
- Μια νέα λειτουργία ανακατανομής pass (ελέγχεται από τις λειτουργίες -freorder) μειώνει σημαντικά τον χρόνο έναρξης των μεγάλων εφαρμογών. Μέχρι να ολοκληρωθεί η υποστήριξη binutils, είναι αποτελεσματική μόνο με τη βελτιστοποίηση του χρόνου σύνδεσης.
- Η απομάκρυνση έμμεσων κλήσεων και η αποκριστοποίηση που βασίζονται στην ανάδραση χειρίζονται τώρα κλήσεις μεταξύ των ενότητες όταν είναι ενεργοποιημένη η βελτιστοποίηση του χρόνου σύνδεσης.
- Ειδικές βελτιώσεις για νέες γλώσσες και γλώσσες:
- Η έκδοση 4.0 της προδιαγραφής OpenMP υποστηρίζεται τώρα από τους μεταγλωττιστές C και C ++ και ξεκινά με την έκδοση 4.9.1 και στον μεταγλωττιστή Fortran. Η νέα επιλογή -fopenmp-simd μπορεί να χρησιμοποιηθεί για την ενεργοποίηση των οδηγιών SIMD του OpenMP, ενώ αγνοεί άλλες οδηγίες OpenMP. Η νέα επιλογή -fsimd-cost-model = επιτρέπει τον συντονισμό του μοντέλου κόστους διάνυσμα για βρόχους σχολιασμένους με τις οδηγίες OpenMP και Cilk Plus simd. -Wopenmp-simd προειδοποιεί όταν το τρέχον μοντέλο κόστους υπερισχύει των οδηγιών του simd που ορίζονται από το χρήστη.
- Η επιλογή -Wed-time έχει προστεθεί για τους μεταγλωττιστές C, C ++ και Fortran, ο οποίος προειδοποιεί όταν χρησιμοποιούνται οι μακροεντολές __DATE__, __TIME__ ή __TIMESTAMP__. Αυτές οι μακροεντολές ενδέχεται να αποτρέψουν την αναπαραγωγή των πανομοιότυπων αναπαραστάσεων.
- Ada:
- Το GNAT μετατράπηκε από προεπιλογή σε Ada 2012 αντί για Ada 2005.
- οικογένεια C:
- Έχει προστεθεί υποστήριξη για τη διάγνωση χρωμάτων που εκπέμπεται από το GCC. Το -fdiagnostics-color = auto θα το ενεργοποιήσει κατά την έξοδο σε τερματικά, -fdiagnostics-color = πάντα χωρίς όρους. Η μεταβλητή περιβάλλοντος GCC_COLORS μπορεί να χρησιμοποιηθεί για την προσαρμογή των χρωμάτων ή την απενεργοποίηση του χρωματισμού. Εάν η μεταβλητή GCC_COLORS υπάρχει στο περιβάλλον, η προεπιλογή είναι -fdiagnostics-color = auto, διαφορετικά -fdiagnostics-color = never.
- Έξοδος διαγνωστικού δείγματος:
- $ g ++ -fdiagnostics-color = πάντα -S -Wall test.C
- test.C: Σε λειτουργία & lsquo; int foo () ':
- test.C: 1: 14: προειδοποίηση: καμία δήλωση επιστροφής σε λειτουργία επιστρέφει μη-κενό [-Wreturn τύπου]
- int foo () {}
- test.C: 2: 46: σφάλμα: το βάθος εμφάνισης του προτύπου υπερβαίνει το μέγιστο των 900 (χρησιμοποιήστε το -ftemplate-depth = για να αυξήσετε το μέγιστο) παράσταση "struct X '
- πρότυπο δομή X {static τιμή const int = τιμή X; }, πρότυπο struct X ·
- test.C: 2: 46: Απαιτείται επαναληπτικά από το & lsquo; const int X :: value '
- test.C: 2: 46: Απαιτείται από & lsquo; const int X :: value '
- test.C: 2: 88: απαιτείται από εδώ
- test.C: 2: 46: σφάλμα: ατελής τύπος & lsquo; X 'που χρησιμοποιείται στον προσδιοριστή ονομασμένων ονομάτων
- Με το νέο #pragma GCC ivdep, ο χρήστης μπορεί να ισχυριστεί ότι δεν υπάρχουν εξαρτήσεις που μεταφέρονται με βρόχο, γεγονός που θα εμπόδιζε την ταυτόχρονη εκτέλεση διαδοχικών επαναλήψεων χρησιμοποιώντας οδηγίες πολλαπλών δεδομένων SIMD.
- Η υποστήριξη για το Cilk Plus έχει προστεθεί και μπορεί να ενεργοποιηθεί με την επιλογή -fcilkplus. Το Cilk Plus είναι μια επέκταση στις γλώσσες C και C ++ για την υποστήριξη παραλληλισμού δεδομένων και εργασιών. Η παρούσα εφαρμογή ακολουθεί το ABI έκδοση 1.2. όλα τα χαρακτηριστικά αλλά το _Cilk_for έχουν εφαρμοστεί.
- Υποστηρίζονται πλέον τα ατομικά πρότυπα ISO C11 (ο προσδιοριστής _Atomic τύπου και ο προσδιοριστής και η κεφαλίδα).
- Οι γενικές επιλογές ISO C11 (_Γενική λέξη-κλειδί) υποστηρίζονται τώρα.
- Η αποθήκευση τοπικών κλωστών ISO C11 (_Thread_local, παρόμοια με το GNU C __thread) υποστηρίζεται τώρα.
- Η υποστήριξη ISO C11 βρίσκεται τώρα σε παρόμοιο επίπεδο πληρότητας με την υποστήριξη του ISO C99: ουσιαστικά ολοκληρωμένα σφάλματα modulo, εκτεταμένα αναγνωριστικά (υποστηρίζονται εκτός από τις γωνιακές περιπτώσεις όταν χρησιμοποιούνται -εξαιρετικοί προσδιοριστές), θέματα κυμαινόμενου σημείου (κυρίως αλλά όχι πλήρως σχετικά με τα προαιρετικά χαρακτηριστικά C99 από τα παραρτήματα F και G) και τα προαιρετικά παραρτήματα K (διεπαφές ελέγχου δεσμών) και L (αναλυσιμότητα).
- Μια νέα επέκταση C __auto_type παρέχει ένα υποσύνολο της λειτουργικότητας του C ++ 11 auto στο GNU C.
- C ++:
- Η υλοποίηση του G + + της απόκλισης τύπου επιστροφής C ++ για κανονικές λειτουργίες έχει ενημερωθεί ώστε να συμμορφώνεται με το N3638, η πρόταση αποδεκτή στο έγγραφο εργασίας. Πιο συγκεκριμένα, προσθέτει decltype (auto) για να πάρει σημασιολογία decltype και όχι για τη σημασιολογία εκπτώσεων παραμέτρων πρότυπου plain auto:
- int & amp; f (),
- αυτόματη i1 = f (); // int
- decltype (αυτόματη) i2 = f (); // int & amp;
- Το G ++ υποστηρίζει τους αρχικοποιητές δέσμευσης C ++ 1y λάμδα:
- [x = 42] {...}
- Στην πραγματικότητα, έχουν γίνει αποδεκτές από το GCC 4.5, αλλά τώρα ο μεταγλωττιστής δεν προειδοποιεί γι 'αυτούς με το -std = c ++ 1y και υποστηρίζει και τους παρενθετικούς κλειστούς και τους κλειστούς συνδέσμους.
- Το G ++ υποστηρίζει συστοιχίες μεταβλητού μήκους C ++ 1y. Το G ++ έχει υποστηρίξει VLAs με στυλ GNU / C99 για μεγάλο χρονικό διάστημα, αλλά τώρα υποστηρίζει επιπλέον τους αρχικοποιητές και τη δέσμευση λάμδα με αναφορά. Στη λειτουργία C + + 1y το G + + θα παραπονεθεί για χρήσεις VLA που δεν επιτρέπονται από το πρότυπο πρότυπο, όπως το σχηματισμό δείκτη σε τύπο VLA ή η εφαρμογή μεγέθους σε μεταβλητή VLA. Σημειώστε ότι τώρα φαίνεται ότι τα VLAs δεν θα είναι μέρος της C ++ 14, αλλά θα είναι μέρος ενός ξεχωριστού εγγράφου και στη συνέχεια ίσως C ++ 17.
- κενό f (int n) {
- int a [n] = {1, 2, 3}. // ρίχνει std :: bad_array_length αν n < 3
- [& amp;] {για (int i: a) {cout
Τι νέο υπάρχει στην έκδοση 4.9.1:
- Το GCC 4.9.1 είναι μια έκδοση κώδικα σφαλμάτων από τον κλάδο GCC 4.9 που περιέχει σημαντικές επιδιορθώσεις για παλινδρομήσεις και σοβαρά σφάλματα στο GCC 4.9.0 με περισσότερα από 88 σφάλματα που έχουν καθοριστεί από την προηγούμενη έκδοση. Εκτός από αυτό, η έκδοση GCC 4.9.1 υποστηρίζει το OpenMP 4.0 επίσης στο Fortran και όχι μόνο στα C και C ++.
Τι νέο υπάρχει στην έκδοση 4.9.0:
- Βελτιώσεις γενικού βελτιωτή:
- Ο ανιχνευτής διεύθυνσης AddressSanitizer, ένας γρήγορος ανιχνευτής σφαλμάτων μνήμης, είναι τώρα διαθέσιμος στο ARM.
- ΑπροσδιόριστοςBehaviorSanitizer (ubsan), ένας γρήγορος ανυπολόγιστος ανιχνευτής συμπεριφοράς, έχει προστεθεί και μπορεί να ενεργοποιηθεί μέσω -fsanitize = undefined. Για την ανίχνευση της απροσδιόριστης συμπεριφοράς κατά τη διάρκεια εκτέλεσης, θα χρησιμοποιηθούν διάφοροι υπολογισμοί. Το UndefinedBehaviorSanitizer διατίθεται προς το παρόν για τις γλώσσες C και C ++.
- Βελτιώσεις βελτιστοποίησης χρόνου σύνδεσης (LTO):
- Ο τύπος συγχώνευσης ξαναγράφηκε. Η νέα εφαρμογή είναι σημαντικά ταχύτερη και χρησιμοποιεί λιγότερη μνήμη.
- Καλύτερος αλγόριθμος διαχωρισμού με αποτέλεσμα λιγότερη ροή κατά τη διάρκεια του χρόνου σύνδεσης.
- Η έγκαιρη κατάργηση των εικονικών μεθόδων μειώνει το μέγεθος των αρχείων αντικειμένων και βελτιώνει τη χρήση της μνήμης και τη σύνταξη του χρόνου.
- Οι φορτίο λειτουργιών φορτώνονται τώρα κατά παραγγελία και απελευθερώνονται νωρίτερα βελτιώνοντας τη συνολική χρήση της μνήμης κατά τη διάρκεια της σύνδεσης.
- Οι κρυφές μεθόδους C ++ μπορούν τώρα να βελτιστοποιηθούν.
- Όταν χρησιμοποιείτε μια plugin συνδέσμου, η σύνταξη με την επιλογή -flto δημιουργεί τώρα αρχεία λεπτών αντικειμένων (.o) τα οποία περιέχουν μόνο αναπαράσταση ενδιάμεσης γλώσσας για το LTO. Χρησιμοποιήστε τα αντικείμενα -fat-lto-για να δημιουργήσετε αρχεία που περιέχουν επιπλέον τον κωδικό αντικειμένων. Για να δημιουργήσετε στατικές βιβλιοθήκες κατάλληλες για επεξεργασία LTO, χρησιμοποιήστε gcc-ar και gcc-ranlib. για να εμφανίσετε σύμβολα από ένα λεπτό αρχείο αντικειμένων, χρησιμοποιήστε το gcc-nm. (Απαιτεί ότι τα ar, ranlib και nm έχουν συνταχθεί με υποστήριξη plugin.)
- Η χρήση της μνήμης του Firefox με δυνατότητα εντοπισμού σφαλμάτων μειώθηκε από 15GB σε 3,5GB. σύνδεση χρόνου από 1700 δευτερόλεπτα σε 350 δευτερόλεπτα.
- Βελτιώσεις βελτίωσης μεταξύ διαδικασιών:
- Μονάδα ανάλυσης κληρονομιών νέας μορφής που βελτιώνει την αποκρυπτογράφηση. Η αποκρυπτογράφηση λαμβάνει τώρα υπόψη τα ανώνυμα ονόματα-χώρους και την τελική λέξη-κλειδί C ++ 11.
- Νέα παράδοση κερδοσκοπικής αποεικονικοποίησης (ελεγχόμενη από -fdevirtualize-κερδοσκοπικά.
- Οι κλήσεις που έγιναν κερδοσκοπικά απευθείας μετατρέπονται σε έμμεσες όπου η άμεση κλήση δεν είναι φθηνότερη.
- Εισάγονται τοπικά ψευδώνυμα για σύμβολα τα οποία είναι γνωστό ότι είναι ισοδύναμα σε κοινές βιβλιοθήκες, βελτιώνοντας τους χρόνους δυναμικής σύνδεσης.
- Βελτιώσεις βελτίωσης βελτιστοποίησης ανάδρασης:
- Προφίλ των προγραμμάτων που χρησιμοποιούν λειτουργίες C ++ inline είναι πλέον πιο αξιόπιστη.
- Το νέο προφίλ χρόνου καθορίζει την τυπική σειρά εκτέλεσης των λειτουργιών.
- Μια νέα λειτουργία ανακατανομής pass (ελέγχεται από τις λειτουργίες -freorder) μειώνει σημαντικά τον χρόνο έναρξης των μεγάλων εφαρμογών. Μέχρι να ολοκληρωθεί η υποστήριξη binutils, είναι αποτελεσματική μόνο με τη βελτιστοποίηση του χρόνου σύνδεσης.
- Η απομάκρυνση έμμεσων κλήσεων και η αποκριστοποίηση που βασίζονται στην ανάδραση χειρίζονται τώρα κλήσεις μεταξύ των ενότητες όταν είναι ενεργοποιημένη η βελτιστοποίηση του χρόνου σύνδεσης.
- Ειδικές βελτιώσεις για νέες γλώσσες και γλώσσες:
- Η έκδοση 4.0 της προδιαγραφής OpenMP υποστηρίζεται τώρα για τους μεταγλωττιστές C και C ++. Η νέα επιλογή -fopenmp-simd μπορεί να χρησιμοποιηθεί για την ενεργοποίηση των οδηγιών SIMD του OpenMP, ενώ αγνοεί άλλες οδηγίες OpenMP. Η νέα επιλογή -fsimd-cost-model = επιτρέπει τον συντονισμό του μοντέλου κόστους διάνυσμα για βρόχους σχολιασμένους με τις οδηγίες OpenMP και Cilk Plus simd. -Wopenmp-simd προειδοποιεί όταν το τρέχον μοντέλο costmodel αντικαθιστά τις οδηγίες που ορίζονται από το χρήστη.
- Η επιλογή -Wed-time έχει προστεθεί για τους μεταγλωττιστές C, C ++ και Fortran, ο οποίος προειδοποιεί όταν χρησιμοποιούνται οι μακροεντολές __DATE__, __TIME__ ή __TIMESTAMP__. Αυτές οι μακροεντολές ενδέχεται να αποτρέψουν την αναπαραγωγή των πανομοιότυπων αναπαραστάσεων.
- Ada:
- Το GNAT μετατράπηκε από προεπιλογή σε Ada 2012 αντί για Ada 2005.
- οικογένεια C:
- Έχει προστεθεί υποστήριξη για τη διάγνωση χρωμάτων που εκπέμπεται από το GCC. Το -fdiagnostics-color = auto θα το ενεργοποιήσει κατά την έξοδο σε τερματικά, -fdiagnostics-color = πάντα χωρίς όρους. Η μεταβλητή περιβάλλοντος GCC_COLORS μπορεί να χρησιμοποιηθεί για την προσαρμογή των χρωμάτων ή την απενεργοποίηση του χρωματισμού. Εάν η μεταβλητή GCC_COLORS υπάρχει στο περιβάλλον, η προεπιλογή είναι -fdiagnostics-color = auto, διαφορετικά -fdiagnostics-color = never.
- Έξοδος διαγνωστικού δείγματος:
- $ g ++ -fdiagnostics-color = πάντα -S -Wall test.C
- test.C: Σε λειτουργία & lsquo; int foo () ':
- test.C: 1: 14: προειδοποίηση: καμία δήλωση επιστροφής σε λειτουργία επιστρέφει μη-κενό [-Wreturn τύπου]
- int foo () {}
- test.C: 2: 46: σφάλμα: το βάθος εμφάνισης του προτύπου υπερβαίνει το μέγιστο των 900 (χρησιμοποιήστε το -ftemplate-depth = για να αυξήσετε το μέγιστο) παράσταση "struct X '
- πρότυπο δομή X {static τιμή const int = τιμή X; }, πρότυπο struct X ·
- test.C: 2: 46: Απαιτείται επαναληπτικά από το & lsquo; const int X :: value '
- test.C: 2: 46: Απαιτείται από & lsquo; const int X :: value '
- test.C: 2: 88: απαιτείται από εδώ
- test.C: 2: 46: σφάλμα: ατελής τύπος & lsquo; X 'που χρησιμοποιείται στον προσδιοριστή ονομασμένων ονομάτων
- Με το νέο #pragma GCC ivdep, ο χρήστης μπορεί να ισχυριστεί ότι δεν υπάρχουν εξαρτήσεις που μεταφέρονται με βρόχο, γεγονός που θα εμπόδιζε την ταυτόχρονη εκτέλεση διαδοχικών επαναλήψεων χρησιμοποιώντας οδηγίες πολλαπλών δεδομένων SIMD.
- Η υποστήριξη για το Cilk Plus έχει προστεθεί και μπορεί να ενεργοποιηθεί με την επιλογή -fcilkplus. Το Cilk Plus είναι μια επέκταση στις γλώσσες C και C ++ για την υποστήριξη παραλληλισμού δεδομένων και εργασιών. Η παρούσα εφαρμογή ακολουθεί το ABI έκδοση 1.2. όλα τα χαρακτηριστικά αλλά το _Cilk_for έχουν εφαρμοστεί.
- Υποστηρίζονται πλέον τα ατομικά πρότυπα ISO C11 (ο προσδιοριστής _Atomic τύπου και ο προσδιοριστής και η κεφαλίδα).
- Οι γενικές επιλογές ISO C11 (_Γενική λέξη-κλειδί) υποστηρίζονται τώρα.
- Η αποθήκευση τοπικών κλωστών ISO C11 (_Thread_local, παρόμοια με το GNU C __thread) υποστηρίζεται τώρα.
- Η υποστήριξη ISO C11 βρίσκεται τώρα σε παρόμοιο επίπεδο πληρότητας με την υποστήριξη του ISO C99: ουσιαστικά ολοκληρωμένα σφάλματα modulo, εκτεταμένα αναγνωριστικά (υποστηρίζονται εκτός από τις γωνιακές περιπτώσεις όταν χρησιμοποιούνται -εξαιρετικοί προσδιοριστές), θέματα κυμαινόμενου σημείου (κυρίως αλλά όχι πλήρως σχετικά με τα προαιρετικά χαρακτηριστικά C99 από τα παραρτήματα F και G) και τα προαιρετικά παραρτήματα K (διεπαφές ελέγχου δεσμών) και L (αναλυσιμότητα).
- Μια νέα επέκταση C __auto_type παρέχει ένα υποσύνολο της λειτουργικότητας του C ++ 11 auto στο GNU C.
- C ++:
- Η υλοποίηση του G + + της απόκλισης τύπου επιστροφής C ++ για κανονικές λειτουργίες έχει ενημερωθεί ώστε να συμμορφώνεται με το N3638, η πρόταση αποδεκτή στο έγγραφο εργασίας. Πιο συγκεκριμένα, προσθέτει decltype (auto) για να πάρει σημασιολογία decltype και όχι για τη σημασιολογία εκπτώσεων παραμέτρων πρότυπου plain auto:
- int & amp; f (),
- αυτόματη i1 = f (); // int
- decltype (αυτόματη) i2 = f (); // int & amp;
- Το G ++ υποστηρίζει τους αρχικοποιητές δέσμευσης C ++ 1y λάμδα:
- [x = 42] {...}
- Στην πραγματικότητα, έχουν γίνει αποδεκτές από το GCC 4.5, αλλά τώρα ο μεταγλωττιστής δεν προειδοποιεί γι 'αυτούς με το -std = c ++ 1y και υποστηρίζει και τους παρενθετικούς κλειστούς και τους κλειστούς συνδέσμους.
- G ++ υποστηρίζει συστοιχίες μεταβλητού μήκους C ++ 1y. Το G ++ έχει υποστηρίξει VLAs με στυλ GNU / C99 για μεγάλο χρονικό διάστημα, αλλά τώρα υποστηρίζει επιπλέον τους αρχικοποιητές και τη δέσμευση λάμδα με αναφορά. Στη λειτουργία C + + 1y το G + + θα παραπονεθεί για χρήσεις VLA που δεν επιτρέπονται από το πρότυπο πρότυπο, όπως το σχηματισμό δείκτη σε τύπο VLA ή η εφαρμογή μεγέθους σε μεταβλητή VLA. Σημειώστε ότι τώρα φαίνεται ότι τα VLAs δεν θα είναι μέρος της C ++ 14, αλλά θα είναι μέρος ενός ξεχωριστού εγγράφου και στη συνέχεια ίσως C ++ 17.
- κενό f (int n) {
- int a [n] = {1, 2, 3}. // ρίχνει std :: bad_array_length αν n < 3
- [& amp;] {για (int i: a) {cout
1 Σχόλια
http://www.eduwizzonlinetrainings.com 29 Dec 17
EduwizzOnlineTraining is one of the Best Online Training Institute in Hyderabad, Bangalore. Eduwizz provide courses like Hybris Development, WebSphere Commerce Server,Blockchain Training,Hyperledger Fabric Development ,Ethereum Development ,Commvault Training, Devops , Netapps , Mulesoft ESB ,Machine Learning,Data Science , Internet of Things , Hybris ,Angular JS , Node JS , Express JS , Business Analyst, Selenium testing with webdriver, Guidewire ,Adobe, RPA ,TSM, EMC...etc