Questa sezione riguarda vari strumenti di sviluppo e caratteristiche.
Queste sono le nuove caratteristiche in glibc:
Supporto per l'ereditarietà della priorità e la protezione delle priorità mutex. Queste sono due caratteristiche descritte negli standard POSIX.
L'ereditarietà delle priorità mutex previente automaticamente l'inversione della priorità causata dall'attesa della disponibilità delle mutex. Il kernel accresce automaticamente la priorità del thread che possiede il mutex fino allo sblocco del mutex.
La protezione della priorità permette di specificare una priorità in cui tutti i threads che acquisiscono il mutex dovranno essere eseguiti fino allo sblocco del mutex. Questa caratteristica non è disponibile per i mutex robusti.
L'ordinamento dell'indirizzo di destinazione performato dall'interfaccia getaddrinfo() per il lookup di un hostname può ora essere personalizzata da regole nel file /etc/gai.conf.
Significativa accelerazione nei processi NIS e NIS+.
Completato il supporto per l'RFC 3542 (API socket avanzate per IPv6).
Significativa accelerazione del lookup di simboli dinamici.
Il linker include il supporto per il nuovo formato di tavola del'hash dei simboli ELF. Usare l'opzione --hash-style del linker per selezionare il formato(i).
Questa versione di Fedora è stata compilata usando i kernel headers di Linux esportati direttamente dal kernel, usando la nuova caratteristica headers_install del kernel 2.6.18. Quindi, il pacchetto glibc-kernheaders è stato rimosso e sostituito con kernel-headers, un sottopacchetto di kernel.
Gli sviluppatori potranno notare alcuni cambiamenti tra questi nuovi kernel headers e quello che era presente in precedenza, incluso ma non limitato quanto segue:
Il file header <linux/compiler.h> è stato rimosso, poiché non conteneva nulla da usare in userspace.
Le macro _syscallX() sono state rimosse. In userspace si dovrà invece usare la syscall() dallalibreria C.
La macro PAGE_SIZE è stata rimossa da alcune architetture, poiché la grandezza della pagina è variabile. In userspace si drovrà invece usare sysconf(_SC_PAGE_SIZE) o getpagesize().
I files header <asm/atomic.h> e <asm/bitops.h> sono stati rimossi. Questi non erano disegnati per l'uso in userspace, e sarebbero falliti nella compilazione sotto alcune architetture mentre avrebbero avuto un comportamento non-atomic in altre. Il compilatore C fornisce le sue funzioni atomic builtin che invece sono disponibili per l'uso in programmi userspace.
I contenuti che precedentemente erano protetti con #ifdef __KERNEL__ sono ora completamente elise con lo strumento unifdef. La definizione __KERNEL___ per poter vedere le parti che non sono visibili in userspace non ha più effetto.
In più, alcuni altri files header che non sono disponibili per l'utilizzo in userspace sono stati rimossi, ed ancora molti altri headers sono stati editati per rimuovere contenuti non desiderabili.
![]() | Cambiamenti negli header del kernel non specifici per Fedora |
|---|---|
Questi cambiamenti sono ereditati dal'kernel base e non sono specifici di Fedora. Qualsiasi distribuzione che usa i kernel headers correnti ufficialmente esportati avrà gli stessi cambiamenti. |
Questa versione di Fedora è stata compilata usando GCC 4.1, che è incluso nella distribuzione.
Gli sviluppatori Fedora hanno introdotto cambiamenti nella sezione .hash ELF che fornisce i simboli per il linking dinamico. Questa nuova sezione .gnu.hash, che è prodotta con la nuova opzione predefinita --hash-style=gnu per gcc , assolve i medesimi propositi delle precedenti sezioni hash. Fornisce, comunque, un incremento approssimativo del 50% nella velocità di linking dinamico. I binari e le librerie prodotte con le nuove funzioni di hashing sono incompatibili con le vecchie versioni di glibc e linker dinamici. Per usare le routine di hashing vecchio stile per la compatibilità con sistemi basati su vecchie versioni di glibc, si passi invece l'opzione --hash-style=sysv.
GDB 6.1 o superiore è necessario per eseguire il debug di binari, a meno che siano compilati usando l'opzione di compilazione -fno-var-tracking.
L'opzione -fwritable-strings non è più accettata.
I messaggi diagnostici in lingua inglese adesso usano apici Unicode. Se non si riesce a leggerli, impostare la variabile ambiente LC_CTYPE su C o cambiare l'emulatore terminale.
Il file specs non è più installato su molti sistemi. Gli utenti ordinari non lo noteranno, ma gli sviluppatori che debbono alterare il file possono usare l'opzione -dumpspecs per generare il file per l'editing.
L'ottimizzatore di codice SSA è ora incluso e porta con se una migliore costante propagazione, parziale eliminazione della ridondanza, load e store code motion, riduzione della forza, eliminazione del dead storage, miglior individuazione del codice irraggiungibile, e ricorsività delle code per cumulazione.
L'autovettorizazione è supportata. Questa tecnica ottiene più alte prestazioni per cicli repetitivi di codice, in alcune circostanze.
Il nuovo attributo sentinella genera un avviso nel compilatore se una funzione come execl(char *path, const char *arg, ...), che richiede che un terminatore di lista NULL, manchi del NULL.
Le estensioni cast-as-lvalue , conditional-expression-as-lvalue e compund-expression-as-lvalue sono state rimosse.
La semantica #pragma pack() è ora più vicina a quelle usate dagli altri compilatori.
Ricavare l'indirizzo di una variabile dichiarata con il modificatore register ora genera un errore invece di un avvertimento.
Arrays di tipi di elementi incompleti ora generano un errore. Che implica nessuna referenza alle definizioni di struttura.
Il compilatore base, senza nessuna ottimizzazione (-O0), è stato misurato come più veloce almeno del 25% su codice reale.
Le librerie possono ora contenere a scopo funzionale variabili statiche nei programmi multi-threaded. L'-fno-threadsafe-statics può essere usato dagli sviluppatori per disattivare questa caratteristica, ma gli utenti ordinari non dovranno mai farlo.
Il percorso di ricerca standard per le librerie Ruby, $:, e' cambiato in accordo con le linee guida per il packaging . Sono anche stati fatti cambiamenti ad alcune voci in Config::CONFIG nel modulo rbconfig. I cambiamenti più importanti includono:
sitedir e le directories relative (sitelibdir, sitearchdir) sono adesso sotto rubylibdir. Invece di /usr/lib/site_ruby esse sono sotto /usr/lib/ruby/site_ruby.
Le directories per il codice Ruby puro indipendente dall'architettura sono sempre sotto /usr/lib, anche sull'architettura x86_64, dove erano solite essere sotto /usr/lib64. Questo cambiamento interessa Config::CONFIG voci rubylibdir e sitelibdir.
Le directories che in precedenza erano in $: rimangono li per il che ci vorrà, così che il codice esistente, come /usr/lib/site_ruby, non abbia necessità di essere modificato. Queste directories sono comunque deprecate, e saranno rimosse per il rilascio di Fedora Core 8. Si compilino i pacchetti RPM Ruby in accordo con le linee guida del packaging. In particolare, le librerie di Ruby dovranno solo essere installate sotto sitelibdir e sitearchdir. Si dovrà anche seguire queste regole per il codice Ruby che non è pacchettizzato come RPM.