Softwarová knihovna

Ve výpočetní technice je softwarová knihovna sbírkou rutin , které lze již sestavit a připravit k použití v programech . Knihovny jsou uloženy v souborech, které jsou podobné nebo dokonce identické s programovými soubory, ve formě kolekce tříděných souborů kódů objektů s indexem pro snadné načtení každé rutiny. Slovo „knihovna“ se často mylně používá k označení softwarové knihovny. Toto je vadný anglicismus kvůli falešnému příteli ( knihovně ).

Knihovny se objevily v padesátých letech minulého století a staly se základem programování . Používají se k vytváření programovacích rozhraní , frameworků , pluginů i programovacích jazyků . Rutiny obsažené v knihovnách obvykle souvisí s častými operacemi v programování  : manipulace s uživatelskými rozhraními, manipulace s databázemi nebo matematické výpočty.

Knihovny zpracovává linker a operační systém . Operace se liší v závislosti na tom, zda je knihovna statická nebo sdílená . Umístění a názvy knihoven se liší podle operačního systému.

použití

V počítačové vědě je rutina sada pokynů, která se stará o určitou operaci a přináší výsledek. Knihovny se poprvé objevily v padesátých letech jako obchod se spoustou děrných štítků nebo rolí magnetické pásky, na které byly zaznamenány rutiny . Programátoři si mohli vybrat, které magnetické pásky použijí ve svých programech.

Knihovny jsou používány pro implementaci programovacích rozhraní as stejně jako rámců a zásuvné moduly a mohou být začleněny do programovacích jazyků.

Programovací rozhraní (ve zkratce API pro Application Programming Interface ) je zdokumentována a standardizovaný soubor rutin, kterými software poskytuje služby jiným softwarem. Rutiny jsou zpřístupněny, kompilovány a zabaleny ve formě softwarové knihovny. Dokumentace určuje, jak může spotřebitelský software interagovat se softwarem dodavatele pomocí rutin. Programovací rozhraní jsou základem současného programování a software obvykle využívá mnoho programovacích rozhraní.

Rámečky jsou kolekce rozpracovaných tříd ( sad rutin), které společně využívají a tvoří páteř programu. Umožňují konstrukci programu sestavením a odvozením komponent. Rámec se odlišuje od programovacích rozhraní v tom, že programovací rozhraní mají rutiny, které program bude používat, zatímco rámce jsou knihovny, které budou používat rutiny programu.

Tyto zásuvné moduly jsou softwarové knihovny, které aplikovaný výzkum rozšířit jeho funkčnost. Tuto techniku ​​používají například webové prohlížeče k podpoře zobrazení animací nebo videí.

Programování a používání knihoven je jedním z běžných použití univerzálních programovacích jazyků . Pokud byly v prvních programovacích jazycích funkce vymezeny lexikonem jazyka, mají nedávné programovací jazyky velmi omezený lexikon a mnoho funkcí je poskytováno standardními knihovnami, které programovací jazyk doprovázejí. Například standardní knihovna C obsahuje standardizovanou kolekci rutin pro manipulaci se soubory, psaní textů, používání paměti nebo provádění výpočtů.

Technika

Linker a operační systém s knihovnami zachází odlišně v závislosti na tom, zda jsou statické nebo sdílené . Manipulace používá tabulku symbolů vytvořenou kompilátorem.

statická knihovna O knihovně se říká, že je statická, pokud má být kopírována do programů, které ji používají při jejich vytváření. sdílená knihovna O knihovně se říká, že je sdílena, pokud má být při provádění přidružena k programům. S takovou knihovnou lze stejnou kopii knihovny použít více programů. editor odkazů Linker je program, který kombinuje různé object code soubory , včetně knihoven, do spustitelného programu . tabulka symbolů Tabulka symbolů je struktura manipulovaná kompilátory a linkery, která obsahuje názvy prvků programu (rutiny, proměnné, konstanty) a jejich adresy, tj. Jejich umístění v programu. Tabulka symbolů vytvořená kompilátorem potom použije linker k určení umístění rutin, které jsou v knihovnách. rutinní čepice (anglický stub ) Rutina cap je rutina f () automaticky přidaná k programu, který nedělá nic jiného než použití rutiny f () sdílené knihovny.

Rozlišení jmen

Aby program mohl používat rutinu, musí být známa původ rutiny. Provenience je společně určována kompilátorem , linkerem a operačním systémem v procesu řešení, který prohledává knihovny. Proces se liší v závislosti na tom, zda se jedná o statické nebo sdílené knihovny .

Nejprve, během překladu souboru zdrojového kódu do objektového kódu kompilátorem, tento přidá do tabulky symbolů názvy rutin použitých v tomto zdrojovém souboru a jejich adresy. Pokud rutina nebyla nalezena v souboru zdrojového kódu, zůstane adresa prázdná. Pak linker poté vyhledá, co odpovídá každé rutině, jejíž adresa je kompilátorem prázdná.

Pokud rutina pochází z takzvané statické knihovny , linker zkopíruje celou knihovnu do programu. Soubor knihovny pak již není pro provádění programu nezbytný. Knihovna se tak zkopíruje do každého programu, který ji používá.

Pokud je rutina ze sdílené knihovny, pak ji linker nekopíruje do programu, místo toho operační systém vloží knihovnu do paměti spolu s programem, tj. Řekne bezprostředně před jeho spuštěním. V počítači je uložena pouze jedna kopie knihovny. Pokud je v paměti více programů využívajících tuto knihovnu, všechny používají stejnou kopii knihovny, což ve srovnání se statickou knihovnou šetří místo .

Existují však určitá rizika při používání sdílených knihoven. Hlavní riziko spočívá v tom, že knihovnu používanou programem nelze najít, když to program potřebuje, což způsobí selhání programu. Někdy se také stane, že programovací rozhraní nalezené knihovny neodpovídá rozhraní, které program potřebuje, což způsobí selhání programu.

Někdy je nutné přepočítat každou adresu rutiny po přidání do programu nebo vytvořit čepici rutiny .

U statické knihovny je přepočet adres proveden linkerem ihned po kompilaci. Zatímco se sdílenou knihovnou se provádí při načtení programu do paměti, bezprostředně před jeho spuštěním. Nezávislé pozice kódu (ABR. PIC ) je objektový kód produkované některými překladače, která nevyžaduje přepočet tyto adresy linker. Tento typ kódu se často používá pro knihovny.

Při vytváření rutiny se zakázaným inzerováním linker poté přidá položku do tabulky symbolů programu, aby informoval, že před spuštěním programu musí být přepočítána adresa odkazované rutiny.

V praxi

Programování knihoven je jedním z běžných použití univerzálních programovacích jazyků . Pokud byly v prvních programovacích jazycích funkce vymezeny lexikonem jazyka, mají nedávné programovací jazyky velmi omezený lexikon a mnoho funkcí je poskytováno standardními knihovnami, které programovací jazyk doprovázejí.

Když jeden nebo více programů používá dynamickou knihovnu, do paměti se načte pouze jedna kopie kódu a prostředků této knihovny. Stejnou rutinu lze potenciálně spustit současně několika programy a globální proměnné lze potenciálně změnit současně. Dvě žádoucí vlastnosti knihovních rutin mají být bezpečné pro vlákna a / nebo znovu zadané.

Simultánní použití několika programů rutiny, která není bezpečná pro vlákna nebo není reentrantní, může způsobit selhání v konkurenční situaci (anglický rasový stav ).

Názvy sdílených knihovních souborů končí v .so na Unixu , .dylib na Mac OS X a .dll na Windows a konvenční umístění knihoven se liší v rutině na platformě.

V operačních systémech Unix jsou knihovny obvykle uloženy v adresářích / lib nebo / usr / lib . Proměnná prostředí LD_LIBRARY_PATH se používá k označení dalších adresářů, které má linker vzít v úvahu. Název každé knihovny se skládá z písmen lib a končí na .a (statická knihovna) nebo .so (sdílená knihovna). Statické knihovny používají formát archivních souborů . Tento formát, teoreticky určený k uložení kolekce libovolných souborů , se používá výhradně pro soubory knihovny.

V operačních systémech Windows mají statické knihovny formát podobný formátu archivu unixových systémů , ale s jiným indexem sestavení. Názvy statických knihoven končí na .lib, zatímco názvy dynamických knihoven končí na .dll . Statická knihovna může být také souborem zástrček týkajících se dynamické knihovny. Názvy dynamických knihoven mohou také končit .ocx , .drv nebo .cpl . Standardní umístění knihovny jsou adresáře \ Windows nebo \ Windows \ System , stejně jako adresář, ve kterém je umístěna aplikace používající knihovnu. Proměnná prostředí se používá k označení operačního systému dalších možných adresářů.

V operačních systémech Mac OS X jsou knihovny distribuovány ve formě rámce : adresář, ve kterém jsou umístěny knihovny, dokumentace a záhlaví (popis rutin v programovacím jazyce). Většina softwarových knihoven Mac OS X ( Cocoa , Carbon …) je distribuována v této podobě. Knihovny ve formě rozhraní jsou uloženy v adresáři / System / Library / Frameworks a ovladače jsou uloženy v adresáři / System / Library / Extensions .

Poznámky a odkazy

  1. (en) Brian Ward, Jak Linux funguje: co by měl každý superuser vědět , San Francisco, No Starch Press,2004, 347  s. ( ISBN  978-1-59327-088-9 a 978-1-593-27035-3 , OCLC  62890298 , online prezentace )
  2. (en) Neil Matthew a Richard Stones, Beginning Linux Programming , Somerset, Wiley,2011, 678  s. ( ISBN  978-1-118-05861-9 , OCLC  927494019 , číst online )
  3. (en) John R Levine, Linkers and loaders , San Francisco, Morgan Kaufmann,2000, 256  s. ( ISBN  978-1-55860-496-4 , OCLC  42413382 , www.worldcat.org/title/linkers-and-loaders/oclc/42413382/viewport)
  4. (in) John Shapley Gray, meziprocesová komunikace v Linuxu , Upper Saddle River, NJ, Prentice Hall,2003, 600  s. ( ISBN  978-0-13-046042-4 , OCLC  50693452 , online prezentace )
  5. (en) Martin Reddy, design API pro C , Boston, Morgan Kaufmann,2011, 441  s. ( ISBN  978-0-12-385004-1 , OCLC  704559821 , online prezentace )
  6. (in) Stephen D. Huston, James Johnson a Umar Syyid EC ( pref.  Douglas C. Schmidt) The ACE Programmer's Guide: Practical Design Patterns for Network and Systems Programming , Boston, Addison-Wesley,2004, 506  s. ( ISBN  978-0-201-69971-5 , OCLC  81301680 , online prezentace )
  7. (in) Richard Harrison , Symbian OS C ++ pro mobilní telefon , let.  3: Vývoj aplikací pro Symbian OS v9 , Chichester, West Sussex, Anglie, Wiley,2007, 834  s. ( ISBN  978-0-470-06658-4 , OCLC  174031161 , online prezentace )
  8. (in) David A Watt a William Findlay, koncepty programovacího jazyka , Chichester, West Sussex, Anglie Hoboken, NJ, John Wiley,2004, 473  s. ( ISBN  978-0-470-02047-0 a 978-0-470-85320-7 , OCLC  55747931 , číst online )
  9. (in) KV Shibu , Úvod do vestavěných systémů , Nové Dillí Singapur, Tata McGraw-Hill Education,2009, 716  s. ( ISBN  978-0-07-014589-4 , OCLC  496946032 , online prezentace )
  10. (in) Arndt Bode , paralelní zpracování Euro-Par 2000: 6. mezinárodní konference Euro-Par, Mnichov, Německo, 29. srpna - 1. září 2000: sborník , Berlín New York, Springer al.  „Přednášky v informatice“ ( n °  1900),2000, 1368  s. ( ISBN  978-3-540-67956-1 , OCLC  44969185 , online prezentace )
  11. (en) Dick Buttlar , Jacqueline Farrell a Bradford Nichols , PThreads Programming. , O'Reilly Media,1996, 286  s. ( ISBN  978-1-4493-6474-8 a 1449364748 , číst online )
  12. (in) Brian Hook , Write Portable Code: An Introduction to Developing Software for Multiple Platforms , San Francisco, No Starch Press,2005, 1 st  ed. , 272  s. ( ISBN  978-1-59327-056-8 , online prezentace )
  13. (in) Amit Singh , Interní systémy Mac OS X: Systémový přístup , Addison-Wesley Professional,19. června 2006, 1680  s. ( ISBN  978-0-13-270226-3 , online prezentace )

Podívejte se také

Související články