Vad är dynamiska bibliotek?
De flesta funktionerna i en app implementeras i bibliotek med körbar kod. När en app länkas med ett bibliotek med hjälp av en statisk länkare kopieras den kod som appen använder till den genererade körbara filen. En statisk länkare samlar kompilerad källkod, så kallad objektkod, och bibliotekskod i en körbar fil som laddas in i minnet i sin helhet vid körning. Den typ av bibliotek som blir en del av en apps körbara fil kallas statiskt bibliotek. Statiska bibliotek är samlingar eller arkiv av objektfiler.
När en app startas laddas appens kod – som innehåller koden för de statiska bibliotek som den länkats med – in i appens adressutrymme. Länkning av många statiska bibliotek till en app ger stora exekverbara filer för appen. Figur 1 visar minnesanvändningen i en app som använder funktioner som implementerats i statiska bibliotek. Applikationer med stora körbara filer har långsamma starttider och stora minnesavtryck. När ett statiskt bibliotek uppdateras kan klientprogrammen inte heller dra nytta av de förbättringar som görs i det statiska biblioteket. För att få tillgång till den förbättrade funktionaliteten måste appens utvecklare länka appens objektfiler med den nya versionen av biblioteket. Och apparnas användare måste byta ut sin kopia av appen mot den senaste versionen. Att hålla en app uppdaterad med den senaste funktionaliteten som tillhandahålls av statiska bibliotek kräver därför störande arbete av både utvecklare och slutanvändare.
Ett bättre tillvägagångssätt är att en app laddar in kod i sitt adressutrymme när den faktiskt behövs, antingen vid start eller vid körning. Den typ av bibliotek som ger denna flexibilitet kallas dynamiska bibliotek. Dynamiska bibliotek är inte statiskt länkade i klientprogrammen; de blir inte en del av den körbara filen. Istället kan dynamiska bibliotek laddas (och länkas) in i en app antingen när appen startas eller när den körs.
Figur 2 visar hur implementering av viss funktionalitet som dynamiska bibliotek i stället för som statiska bibliotek minskar det minne som används av appen efter lanseringen.
Användning av dynamiska bibliotek gör att program kan dra nytta av förbättringar av de bibliotek som de använder automatiskt, eftersom länkningen till biblioteken är dynamisk och inte statisk. Det innebär att klientprogrammens funktionalitet kan förbättras och utökas utan att programutvecklarna behöver kompilera programmen på nytt. Appar som är skrivna för OS X drar nytta av den här funktionen eftersom alla systembibliotek i OS X är dynamiska bibliotek. Det är på detta sätt som appar som använder Carbon- eller Cocoa-teknik drar nytta av förbättringar i OS X.
En annan fördel som dynamiska bibliotek erbjuder är att de kan initialiseras när de laddas och att de kan utföra rensningsuppgifter när klientappen avslutas normalt. Statiska bibliotek har inte denna funktion. Mer information finns i Module Initializers and Finalizers.
En fråga som utvecklare måste tänka på när de utvecklar dynamiska bibliotek är att bibehålla kompatibilitet med klientappar när ett bibliotek uppdateras. Eftersom ett bibliotek kan uppdateras utan att klientappens utvecklare vet om det, måste appen kunna använda den nya versionen av biblioteket utan att ändra sin kod. För detta ändamål bör bibliotekets API inte ändras. Det finns dock tillfällen då förbättringar kräver API-ändringar. I det fallet måste den tidigare versionen av biblioteket finnas kvar i användarens dator för att klientappen ska kunna köras korrekt. Riktlinjer för utformning av dynamiska bibliotek behandlar ämnet hantering av kompatibilitet med klientappar när ett dynamiskt bibliotek utvecklas.