Mitä ovat dynaamiset kirjastot?

Suurin osa sovelluksen toiminnoista on toteutettu suoritettavan koodin kirjastoissa. Kun sovellus linkitetään kirjaston kanssa staattisella linkittäjällä, sovelluksen käyttämä koodi kopioidaan luotuun suoritettavaan tiedostoon. Staattinen linkittäjä kokoaa käännetyn lähdekoodin, niin sanotun objektikoodin, ja kirjastokoodin yhdeksi suoritettavaksi tiedostoksi, joka ladataan kokonaisuudessaan muistiin suoritusaikana. Sellaista kirjastoa, joka tulee osaksi sovelluksen suoritettavaa tiedostoa, kutsutaan staattiseksi kirjastoksi. Staattiset kirjastot ovat objektitiedostojen kokoelmia tai arkistoja.

Kun sovellus käynnistetään, sovelluksen koodi – joka sisältää sen kanssa linkitettyjen staattisten kirjastojen koodin – ladataan sovelluksen osoiteavaruuteen. Monien staattisten kirjastojen linkittäminen sovellukseen tuottaa suuria sovelluksen suoritettavia tiedostoja. Kuvassa 1 esitetään sellaisen sovelluksen muistinkäyttö, joka käyttää staattisissa kirjastoissa toteutettuja toimintoja. Sovellukset, joiden suoritettavat tiedostot ovat suuria, kärsivät hitaista käynnistysajoista ja suurista muistijäljistä. Kun staattista kirjastoa päivitetään, sen asiakassovellukset eivät myöskään hyödy siihen tehdyistä parannuksista. Parannetun toiminnallisuuden käyttämiseksi sovelluksen kehittäjän on linkitettävä sovelluksen objektitiedostot kirjaston uuden version kanssa. Sovellusten käyttäjien on vaihdettava sovelluksen kopio uusimpaan versioon. Näin ollen sovelluksen pitäminen ajan tasalla staattisten kirjastojen tarjoaman uusimman toiminnallisuuden kanssa vaatii häiritsevää työtä sekä kehittäjiltä että loppukäyttäjiltä.

Kuva 1 Sovellus, joka käyttää staattisia kirjastoja

Parempi lähestymistapa on se, että sovellus lataa koodia osoiteavaruuteensa silloin, kun sitä oikeasti tarvitaan, joko käynnistyshetkellä tai ajon aikana. Kirjastotyyppiä, joka tarjoaa tämän joustavuuden, kutsutaan dynaamiseksi kirjastoksi. Dynaamisia kirjastoja ei linkitetä staattisesti asiakassovelluksiin; ne eivät tule osaksi suoritettavaa tiedostoa. Sen sijaan dynaamiset kirjastot voidaan ladata (ja linkittää) sovellukseen joko sovellusta käynnistettäessä tai sen suorituksen aikana.

Kuvassa 2 näytetään, miten joidenkin toimintojen toteuttaminen dynaamisina kirjastoina staattisten kirjastojen sijaan vähentää sovelluksen käyttämää muistia käynnistyksen jälkeen.

Kuvassa 2 Sovellus, jossa käytetään dynaamisia kirjastoja
>Dynaamisia kirjastoja käyttämällä ohjelmat hyötyvät käyttämiinsä kirjastoihin tehdyistä parannuksista automaattisesti siksi, että ohjelmissa oleva linkki on dynaaminen eikä staattinen. Toisin sanoen asiakassovellusten toiminnallisuutta voidaan parantaa ja laajentaa ilman, että sovelluskehittäjien on käännettävä sovellukset uudelleen. OS X:lle kirjoitetut sovellukset hyötyvät tästä ominaisuudesta, koska kaikki OS X:n järjestelmäkirjastot ovat dynaamisia kirjastoja. Näin Carbon- tai Cocoa-tekniikkaa käyttävät sovellukset hyötyvät OS X:n parannuksista.

Toinen dynaamisten kirjastojen tarjoama hyöty on se, että ne voidaan alustaa, kun ne ladataan, ja ne voivat suorittaa siivoustehtäviä, kun asiakassovellus lopetetaan normaalisti. Staattisilla kirjastoilla ei ole tätä ominaisuutta. Lisätietoja on kohdassa Module Initializers and Finalizers.

Yksi asia, joka kehittäjien on pidettävä mielessä dynaamisia kirjastoja kehitettäessä, on yhteensopivuuden säilyttäminen asiakassovellusten kanssa, kun kirjastoa päivitetään. Koska kirjasto voidaan päivittää asiakassovelluksen kehittäjän tietämättä, sovelluksen on voitava käyttää kirjaston uutta versiota ilman muutoksia koodiinsa. Tätä varten kirjaston API ei saisi muuttua. On kuitenkin tilanteita, joissa parannukset edellyttävät API-muutoksia. Tällöin kirjaston edellisen version on jäätävä käyttäjän tietokoneelle, jotta asiakassovellus toimisi oikein. Dynaamisten kirjastojen suunnitteluohjeissa käsitellään asiakassovellusten yhteensopivuuden hallintaa dynaamisen kirjaston kehittyessä.

Vastaa

Sähköpostiosoitettasi ei julkaista.