Αυτή η ενότητα καλύπτει διάφορα εργαλεία ανάπτυξης λογισμικού.
Υπάρχουν νέες δυνατότητες στην glibc:
Υποστήριξη για κληρονομικότητα προτεραιότητας και σημαφόρων προστασίας προτεραιότητας. Αυτά είναι δύο χαρακτηριστικά τα οποία περιγράφονται στα πρότυπα POSIX.
Οι σημαφόροι κληρονομικότητας προτεραιότητας αυτόματα εμποδίζουν ανατροπή προτεραιότητας η οποία δημιουργείται από την αναμονή διαθεσιμότητας για τους σημαφόρους. Ο πυρήνας αυτόματα ενισχύει την προτεραιότητα του νήματος που κρατάει τον σημαφόρο μέχρι να ξεκλειδώσει αυτόν το σημαφόρο.
Η προστασία προτεραιότητας επιτρέπει τον ορισμό μιας προτεραιότητας ώστε όλα τα νήματα που αποκτούν το σημαφόρο να εκτελούνται μέχρι ο σημαφόρος να ξεκλειδωθεί. Αυτό το χαρακτηριστικό δεν είναι διαθέσιμο για robust σημαφόρους.
Η ταξινόμηση διευθύνσεων προορισμού που εκτελείται από τη διεπαφή getaddrinfo() για hostname lookup μπορεί τώρα να οριστεί με κανόνες στο αρχείο /etc/gai.conf.
Σημαντικές βελτιώσεις ταχύτητας στην επεξεργασία NIS και NIS+.
Ολοκληρώθηκε η υποστήριξη RFC 3542 (προχωρημένα socket APIs για IPv6)
Σημαντικές βελτιώσεις ταχύτητας της δυναμικής αναζήτησης συμβόλων.
Ο linker περιλαμβάνει υποστήριξη για τη νέα μορφή του ELF symbol hash table. Χρησιμοποιήστε την επιλογή --hash-style του linker για να επιλέγξετε τη μορφή ή τις μορφές.
Αυτή η έκδοση του Fedora έχει χτιστεί χρησιμοποιώντας τις κεφαλίδες του πυρήνα Linux των οποίων έγινε εξαγωγή απευθείας από τον πυρήνα, χρησιμοποιώντας το νέο χαρακτηριστικό headers_install του πυρήνα 2.6.18. Έτσι, το πακέτο glibc-kernheaders έχει αφαιρεθεί και αντικατασταθεί από το kernel-headers, ένα υπο-πακέτο του kernel.
Οι προγραμματιστές ίσως παρατηρήσουν κάποιες αλλαγές μεταξύ αυτών των νέων κεφαλίδων πυρήνα και αυτών που υπήρχαν πριν, συμπεριλαμβανομένων των παρακάτω:
Το αρχείο κεφαλίδας <linux/compiler.h> έχει αφαιρεθεί, αφού δεν περιείχε τίποτα για το userspace.
Οι μακροεντολές _syscallX() έχουν αφαιρεθεί. Το userspace θα πρέπει αντί αυτού να χρησιμοποιεί το syscall() από τη βιβλιοθήκη C.
Η μακροεντολή PAGE_SIZE έχει αφαιρεθεί από κάποιες αρχιτεκτονικές, αφού το μέγεθος της σελίδας είναι μεταβλητό. Το userspace θα πρέπει αντί αυτού να χρησιμοποιεί το sysconf(_SC_PAGE_SIZE) ή το getpagesize().
Τα αρχεία κεφαλίδας <asm/atomic.h> και <asm/bitops.h> έχουν αφαιρεθεί. Αυτά δεν έχουν σχεδιαστεί για να χρησιμοποιούνται στο userspace, και η μεταγλώττιση τους θα αποτύχει σε μερικές αρχιτεκτονικές, δίνοντας τη μη-ατομική συμπεριφορά σε άλλα αρχεία. Ο μεταγλωττιστής C παρέχει τις δικές του ενσωματωμένες ατομικές συναρτήσεις οι οποίες είναι πιο κατάλληλες για χρήση σε προγράμματα του userspace.
Το περιεχόμενο το οποίο προηγουμένως προφυλασσόταν με το #ifdef __KERNEL__ έχει αντικατασταθεί από το εργαλείο unifdef. Δεν είναι πλέον αποτελεσματικός ο ορισμός του __KERNEL___ για εμφάνιση των μερών τα οποία δε θα έπρεπε να εμφανίζονται στο userspace.
Επιπλέον, κάποια αρχεία κεφαλίδων τα οποία δεν είναι κατάλληλα για χρήση στο userspace έχουν αφαιρεθεί και ακόμη περισσότερες κεφαλίδες έχουν τροποποιηθεί για να αφαιρεθεί μη κατάλληλο περιεχόμενο.
![]() | Οι αλλαγές κεφαλίδων πυρήνα δεν είναι συγκεκριμένες για το Fedora |
|---|---|
Αυτές οι αλλαγές κληρονομούνται από τον upstream πυρήνα και δεν είναι συγκεκριμένες για το Fedora. Κάθε διανομή που χρησιμοποιεί τις κεφαλίδες πυρήνα που διανέμονται επίσημα με τον πυρήνα θα περιέχει αυτές τις αλλαγές. |
Αυτή η έκδοση του Fedora έχει χτιστεί με το GCC 4.1, το οποίο συμπεριλαμβάνεται στη διανομή.
Οι προγραμματιστές του Fedora έχουν εισάγει αλλαγές στην ενότητα .hash του ELF η οποία παρέχει σύμβολα για δυναμική σύνδεση (dynamic linking). Αυτή η νέα ενότητα .gnu.hash, η οποία δημιουργείται με τη νέα προεπιλεγμένη επιλογή --hash-style=gnu για το gcc, έχει τον ίδιο σκοπό με τις προηγούμενες ενότητες hash. Παρέχει, ωστόσο, μία αύξηση ταχύτητας της τάξης του 50% στη δυναμική σύνδεση. Τα εκτελέσιμα αρχεία και οι βιβλιοθήκες που παράγονται με τη νέα συνάρτηση hashing είναι ασύμβατα με παλαιότερες εκδόσεις της glibc και του δυναμικού linker. Για να χρησιμοποιηθούν οι ρουτίνες hashing παλιότερου τύπου για συμβατότητα με συστήματα βασισμένα στην παλιότερη glibc, περάστε αντ' αυτής την επιλογή --hash-style=sysv.
Απαιτείται GDB 6.1 ή νεότερο για αποσφαλμάτωση δυαδικών αρχείων, εκτός κι αν είναι μεταγλωττισμένα με ενεργοποιημένη την επιλογή -fno-var-tracking.
Η επιλογή -fwritable-strings δεν υποστηρίζεται πια.
Τα διαγνωστικά μηνύματα αγγλικής γλώσσας τώρα χρησιμοποιούν Unicode εισαγωγικά. Αν δεν μπορείτε να το διαβάσετε αυτό, ορίστε τη μεταβλητή περιβάλλοντος LC_CTYPE σεC ή αλλάξτε τον προσομοιωτή τερματικού σας.
Το αρχείο specs δεν εγκαθίσταται πια στα περισσότερα συστήματα. Οι μέσοι χρήστες δε θα το προσέξουν αλλά οι προγραμματιστές οι οποίοι χρειάζεται να αλλάξουν το αρχείο μπορούν να χρησιμοποιήσουν την επιλογή -dumpspecs για να δημιουργήσουν αυτό το αρχείο για επεξεργασία.
Το λογισμικό βελτιστοποίησης SSA τώρα συμπεριλαμβάνεται και φέρνει μαζί του καλύτερο constant propagation, redundancy elimination, load and store code motion, strength reduction, dead storage elimination, καλύτερη ανίχνευση γιαunreachable code, και tail recursion by accumulation.
Το autovectorization υποστηρίζεται. Αυτή η τεχνική πετυχαίνει σε κάποιες περιπτώσεις μεγαλύτερη απόδοση για επαναλαμβανόμενο κώδικα βρόγχων.
Το νέο όρισμα sentinel κάνει τον μεταγλωττιστή να παράγει μια προειδοποίηση αν μιας συνάρτησης, η οποία απαιτεί το NULL list terminator, σαν την execl(char *path, const char *arg, ...), της λείπει το NULL.
Οι επεκτάσεις cast-as-lvalue, conditional-expression-as-lvalue, και compund-expression-as-lvalue έχουν αφαιρεθεί.
Τα #pragma pack() semantics είναι τώρα πιο κοντά σε αυτά που χρησιμοποιούν άλλοι μεταγλωττιστές.
Η λήψη της διεύθυνσης μιας μεταβλητής η οποία έχει δηλωθεί με το register modifier τώρα παράγει ένα σφάλμα αντί μια προειδοποίηση.
Οι πίνακες με incomplete element types τώρα παράγουν ένα σφάλμα. Αυτό σημαίνει πως δεν επιτρέπονται forward reference σε δηλώσεις για structure.
Ο βασικός μεταγλωττιστής (compiler), χωρίς καμία επιλογή βελτιστοποίησης (-O0), μετρήθηκε ως και 25% ταχύτερος σε τυπικό κώδικα εφαρμογών.
Οι βιβλιοθήκες τώρα μπορούν να περιέχουν function-scope static variables σε πολυνηματικά προγράμματα. Οι προγραμματιστές για embedded συστήματα μπορούν να χρησιμοποιούν το -fno-threadsafe-statics για να απανεργοποιήσουν αυτό το χαρακτηριστικό, αλλά οι κανονικοί χρήστες δε θα πρέπει να το κάνουν αυτό ποτέ.
Το κανονικό μονοπάτι αναζήτησης για τις βιβλιοθήκες της Ruby, $:, έχει αλλάξει σε συμφωνία με τις οδηγίες πακεταρίσματος. Επίσης, έγιναν αλλαγές σε μερικές από τις εγγραφές στο Config::CONFIG στο άρθρωμα rbconfig. Μερικές από τις σημαντικότερες αλλαγές είναι:
Ο κατάλογος sitedir και οι σχετικοί με αυτόν (sitelibdir, sitearchdir) είναι τώρα κάτω από τον κατάλογο rubylibdir. Αντί του /usr/lib/site_ruby είναι κάτω από το /usr/lib/ruby/site_ruby.
Οι κατάλογοι για καθαρό κώδικα Ruby ο οποίος είναι ανεξάρτητος αρχιτεκτονικής είναι πάντα κάτω από τον κατάλογο /usr/lib, ακόμη και στην αρχιτεκτονική x86_64, όπου παλιότερα βρίσκονταν κάτω από τον κατάλογο /usr/lib64. Αυτή η αλλαγή αφορά τις δύο εγγραφές Config::CONFIG, rubylibdir και sitelibdir.
Οι κατάλογοι που πριν βρίσκονταν στο $: παραμένουν εκεί προς το παρόν, έτσι ώστε υπάρχων κώδικας, όπως ο /usr/lib/site_ruby, να μην χρειάζεται να αλλαχτεί. Αυτοί οι κατάλογοι ωστόσο θα απαρχειωθούν και θα αφαιρεθούν με την κυκλοφορία του Fedora Core 8. Συνιστάται το χτίσιμο των πακέτων Ruby RPM σε συμφωνία με τις οδηγίες πακεταρίσματος. Συγκεκριμένα, οι βιβλιοθήκες της Ruby πρέπει να εγκαθιστώνται μόνο στους κατάλογους sitelibdir και sitearchdir. Θα πρέπει επίσης να ακολουθείτε αυτό τον κανόνα για κώδικα Ruby ο οποίος δεν πακετάρεται σαν ένα RPM.