downloadDownload FAQFAQ
Site Navigation:
 
 

12. Utvecklingsverktyg

Denna sektion täcker diverse utvecklingsverktyg.

12.1. Körtid

Dessa är de nya funktionerna i glibc:

  • Stöd för arv av prioritet och pritoritetskyddande mutex. Dessa två funktioner är beskrivna i POSIX-standarderna.

    • Mutex som ärver prioritet förhindrar automatiskt prioritetsinversion orsakad genom att vänta på tillgängligheten av mutex. Kärnan förbättrar automatiskt prioriteten på den tråd som håller mutexet tills den släpper mutexet.

    • Prioritetsskydd tillåter dig att specificera en prioritet som alla trådar somanvänder mutex kommer köra med tills mutexet är släppt. Denna funktion är inte tillgänglig för robusta mutex.

  • Destinationsadress-sortering utförd av gränssnittet getaddrinfo() för värdnamn-uppslagning kan nu anpassas av regler i filen /etc/gai.conf.

  • Signifikant uppsnabbning i hantering av NIS och NIS+.

  • Stöd för RFC 3542 klart (avancerat uttags-API för IPv6).

  • Radikal uppsnabbning av dynamisk symboluppslagning.

12.2. Verktyg

Länkaren innehåller stöd för det nya symbolhashtabellformatet för ELF. Använd flaggan --hash-style för länkaren för att välja format.

12.2.1. Kärnans huvudfiler

Denna utgåva av Fedora har byggt genom använda Linux kärnhuvudfiler, exporterade direkt från kärnan, som använder den nya funktionen headers_install för 2.6.18-kärnan. Paketet glibc-kernheaders har tagits bort och ersatts med kernel-headers, ett underpaket till kernel.

Utvecklare kan notera en del ändringar mellan de nya kärnhuvudena och vad som fanns innan, inklusive men inte begränsat till följande:

  • Huvudfilen <linux/compiler.h> har tagits bort eftersom den inte innehöll något användabart för användarutrymmet.

  • Makrona _syscallX() är borttagna. Användarutrymme ska använda syscall() från C-biblioteket istället.

  • Makrot PAGE_SIZE är borttaget från en del arkitekturer, eftersom sidstorleken varierar. Användarutrymme ska använda sysconf(_SC_PAGE_SIZE) eller getpagesize() istället.

  • Huvudfilerna <asm/atomic.h> och <asm/bitops.h> har tagits bort. Dessa var inte designade för användning i användarutrymmet och skulle inte kunna kompileras på en del arkitekturer medan den skulle tyst uppföra oförutsägbart på andra. Istället tillhandahåller C-kompilatorn sina egna atomiska, inbyggda funktioner som passar för användning i program för användarutrymmet.

  • Innehåll som tidigare var skyddat med #ifdef __KERNEL__ är nu helt onödig med verktyget unifdef. Att definiera __KERNEL___ för att se delar som inte ska vara synligt för användarutrymme, fungerar inte längre.

Dessutom har en del huvudfiler tagits bort som inte passar för användarutrymme och änny fler huvudfiler har redigerats för att ta bort olämpligt innehåll.

[Notera]Ändringar i kärnans huvudfiler är inte specifika för Fedora

Dessa ändringar ärvs från uppströms-kärnan och är inte specifika för Fedora. Det är samma för alla distributioner som använder den nuvarande officiellt-exporterade kärnhuvudfilerna.

12.2.2. GCC-kompilatorsamlingen

Denna utgåva av Fedora är byggd med GCC 4.1, vilken är inkluderad i distributionen.

12.2.2.1. Varningar
  • Fedoras utvecklare har introducerat ändring i ELF .hash-sektionen som tillhandahåller symboler för dynamisk länkning. Denna nya .gnu.hash-sektion, som skapades med den nya standardflaggan --hash-style=gnu för gcc, fyller samma funktion som tidigare hash-sektioner. Den ger dock en ca 50%-ig ökning i hastighet för dynamisk länkning. Binärer och bibliotek skapade med de nya hashnings-funktionerna är inkompatibla med de äldreglibc och utgåvor av dynamisk länkare. För att använda gamla stilens hashing rutiner för kompatibilitet med äldre glibc -baserade system, skicka flaggan --hash-style=sysv istället.

  • Du behöver GDB 6.1 eller nyare för att felsöka binärer, såvida de inte är kompilerade med kompileringsflaggan -fno-var-tracking.

  • Flaggan -fwritable-strings är inte längre tillåten.

  • Engelska diagnostik-meddelanden använder numera Unicode situationstecken. Om du inte kan läsa detta, sätt din LC_CTYPE miljövariabel till C eller ändra din terminal-emulator.

  • Filen specs är inte längre installerad på de flesta system. Vanliga användare kommer inte märka något, men utvecklare som behöver ändra filen kan använda flaggan -dumpspecs för att generera filen för ändring.

12.2.2.2. Kodgenerering
  • Kodoptimeraren SSA är nu inkluderad och tillför bättre konstantspridning, partiell redundans elimination, ladda och spara kodrörelse, styrka-reduktion, död-lagring elimination, bättre upptäckt av oåtkomlig kod och svans-rekursion genom ackumulering.

  • Autovektorisering stöds. Denna teknik åstadkommer högre prestanda för repetitiv sling-kod, i en del fall.

12.2.2.3. Språktillägg
  • Det nya övervakningsattributet gör att kompilatorn ger en varning om en funktion som execl(char *path, const char *arg, ...) , vilket kräver en NULL listterminator, saknar NULL värdet.

  • cast-as-lvalue, conditional-expression-as-lvalue och compund-expression-as-lvalue utbyggnaderna har tagits bort.

  • #pragma pack() semantiken är nu närmare till de som används av andra kompilatorer.

  • Att ta adressen av en variabel deklarerad med register-modifieraren genererar numera ett fel istället för en varning.

  • Strängar av ofullständiga elementtyper genererar numera ett fel. Detta förutsätter att inga framåtreferenser till strukturdefinitioner finns.

  • Den grundläggande kompilatorn, utan någon optimering (-O0), har uppmätts att vara så mycket som 25% snabbare i verklig kod.

  • Bibliotek kan nu innehålla funktions-räckvidd statiska variabler i multitrådade program. Inbäddade utvecklare kan använda -fno-threadsafe-statics för att stänga av denna funktion, men vanliga användare ska aldrig göra detta.

12.3. Ruby

Standardsökvägen för Ruby-bibliotek $: har ändrats i enlighet med paketeringsriktlinjerna. Ändringar gjordes också för en del värden i Config::CONFIG i modulen rbconfig. De viktigaste ändringarna är:

  • sitedir och relaterade kataloger (sitelibdir, sitearchdir) är nu under rubylibdir. Istället för /usr/lib/site_ruby är de nu under /usr/lib/ruby/site_ruby.

  • Katalogerna för oberoende av arkitektur, ren Ruby-kod finns alltid i /usr/lib, även på x86_64-arkitekturen, där de brukade vara i /usr/lib64. Denna ändring påverkar Config::CONFIG värdena rubylibdir och sitelibdir.

Kataloger som förut var i $: stannar där för närvarande, så att exekverande kod, som /usr/lib/site_ruby inte behöver ändras. Dessa kataloger är föråldrade dock och kommer tas bort i utgåvan Fedora Core 8. Bygg Ruby-RPM-paket enligt paketeringsriktlinjerna. Särskilt Ruby-bibliotek ska bara installeras i sitelibdir och sitearchdir. Du ska också följa denna regel för Ruby-kod som inte är paketerad i en RPM.