Biblioteka programistyczna

Biblioteka programistycznaplik dostarczający podprogramy, dane oraz typy danych, które mogą zostać wykorzystane z poziomu kodu źródłowego programu. Użycie bibliotek to sposób na ponowne wykorzystanie tego samego kodu.

Dobór odpowiedniej biblioteki programistycznej może ułatwić zaimplementowanie niemalże dowolnego zadania. Pisanie programów jedynie za pomocą czystych elementów języka programowania jest czasochłonne, a czasami nawet niemożliwe.

Kategoryzacja

edytuj

Ze względu na czas dołączania biblioteki do programu wyróżniamy biblioteki statyczne dołączane w czasie konsolidacji oraz biblioteki dynamiczne dołączane w czasie uruchamiania programu.

Biblioteki statyczne

edytuj

Biblioteki statyczne (ang. static library) łączone są z programem w momencie konsolidacji (linkowania). W przypadku narzędzi dostarczonych przez Microsoft dla systemów z rodziny Windows pliki bibliotek mają zazwyczaj rozszerzenia .lib lub .obj, natomiast dla pakietów w systemach z rodziny Unix (np. GCC) i ich portach dla systemu Microsoftu (jakim jest np. MinGW) są to .a lub .o[potrzebny przypis].

Biblioteki dynamiczne

edytuj

Biblioteki dynamiczne łączone są z programem wykonywalnym dopiero w momencie jego wykonania. Dane z bibliotek dynamicznych mogą być współdzielone przez różne programy jednocześnie. Biblioteki są ładowane do pamięci tylko raz, nawet jeśli są równocześnie współużytkowane[1].

Interfejs programistyczny aplikacji

edytuj

Dla standaryzacji pracy z biblioteką programistyczną definiuje się dla niej z reguły interfejs programistyczny aplikacji (ang. application programming interface, API). Dzięki temu użytkownik biblioteki może się skupić na tym co biblioteka oferuje niż na tym jak jest to realizowane na różnych platformach.

 
Relacja między aplikacją, biblioteką i API

API projektuje się jako standard komunikacji aplikacji z funkcjami biblioteki. Twórcy interfejsów programistycznych (np. Microsoft[2]) kładą z zasady nacisk, by były proste w użyciu, jednoznaczne i dobrze udokumentowane. W cyklu życiowym biblioteki programistycznej interfejs jest elementem najbardziej trwałym, a konsekwencje każdej zmiany muszą być dokładnie przeanalizowane. Poszczególne biblioteki mogą mieć wiele implementacji, ale trzymać się standardowej struktury interfejsu (np. definicja „biblioteki standardowej języka C”, która jest właśnie definicją interfejsu API, a nie jedną konkretną biblioteką).

Dzięki dobrze zdefiniowanemu API możliwa ma być podmiana jednej biblioteki na inną bez potrzeby modyfikowania aplikacji. Przykładem tu może być biblioteka libjpeg, której API zostało wykorzystane w implementacji dużo szybszej biblioteki libjpeg-turbo. W efekcie biblioteka libjpeg-turbo zastąpiła bibliotekę libjpeg w wielu projektach które używają formatu JPG m.in. w przeglądarkach i programach graficznych jak również stała się domyślą biblioteką obsługi formatu JPG w nowych dystrybucjach systemu Linux i innych uniksopodobnych[3].

Bindingi

edytuj

Biblioteki są bardzo często realizowane z użyciem jednego, źródłowego języka programowania. Interfejsy (API) do innych języków są tworzone za pomocą tzw. bindingów – czyli realizacji danej biblioteki programowania w innym języku. Główny kod bibliotek programistycznych jest realizowany w języku programowania najbardziej efektywnym obliczeniowo. Reszta języków definiuje jedynie warstwę interfejsu (API), specyficzną dla danego języka, obejmującą mechanizmy, które pozwalają skorzystać z możliwości biblioteki z poziomu innego języka programowania. Popularnym językiem, w którym pisana jest główna część bibliotek, jest język C, ze względu na szybkość działania oraz łatwość pisania wrapperów z C do innych języków.

Wrappery

edytuj
Osobny artykuł: Wrapper.

Dostępne biblioteki mogą być napisane z użyciem stylu programowania lub paradygmatu programowania, który nie przystaje do tych obowiązujących w danym środowisku lub systemie operacyjnym. Żeby nie wymuszać na programistach nienaturalnego stylu programowania, a zarazem pozwolić na użycie możliwości biblioteki programistycznej, tworzy się biblioteki o zbliżonej funkcjonalności lecz o interfejsie przepisanym według prawideł i zasad docelowego środowiska. Wykorzystuje się w tym celu tzw. wrappery – fragmenty kodu, które odbierają wywołanie w języku danego programu, przetwarzają je na wywołanie języka biblioteki, wysyłają wywołanie do biblioteki i przetwarzają zwrócone wyniki na postać odpowiednią dla danego języka.

Historia

edytuj

Za twórców koncepcji bibliotek uważani są Maurice Wilkes, David J. Wheeler i Stanley Gill, autorzy książki „The Preparation of Programs for an Electronic Digital Computer” z 1951.

Zobacz też

edytuj

Przypisy

edytuj