Drogi Czytelniku! Czy bawiłeś się kiedyś klockami LEGO? Czy sięgałeś po przygotowane schematy? A może składałeś misternie wykonane modele statków, samolotów i innych pojazdów? Jeśli na którekolwiek z powyższych pytań twoją odpowiedzią było tak - cóż sam się domyśl co i jak ;-). Jeśli jednak owe klocki sam sobie strugałeś, a patyczki i deseczki do modeli sam heblowałeś - na pewno nie spodobają ci się przedstawione dalej idee. Oto bowiem przybliżamy "pigułkę" dotyczącą klocków, z którymi powinien być zaznajomiony każdy rozsądnie traktujący swój czas i nerwy programista C++.
Zacznijmy jednak od sprawy prawie oczywistej. Informatyk-programista to zwierzę z natury nieco niechlujne i bardzo leniwe. Jeśli popuści się cugli takiemu osobnikowi, pewnikiem jest, że sięgnie po mało wymagające rozwiązanie. I choć, jeśli przyjdzie takowa potrzeba, każdy maniak kodu potrafi wszystko od podstaw prawie pisać, to wielekroć nie tylko sięga po reusing własnego kodu. Z dużą chęcią wykorzystuje także szeroko stosowane biblioteki programistyczne, m.in. tytułowego STLa...
STL (Standard Template Library) (ang. standardowa biblioteka szablonów) - biblioteka C++ zawierająca algorytmy, kontenery, iteratory oraz inne konstrukcje w formie szablonów, gotowe do użycia w programach.
Pierwszy człon tytułu ksiązki. To o tych "klockach" w sposób bardzo minimalistyczny pisze Ray Lischner. To ich szablonami są zapisane niecałe 130 stron formatu B6. To je właśnie programista powinien odkryć, zrozumieć i wykorzystywać. To na nich można bowiem bazować przy budowie większych aplikacji. To nimi można zabezpieczyć się przed własnymi błędami w organizacji przestrzeni pamięciowej...
Dlaczegóż STL miałby zainteresować przeciętnego C++-owego "kodziarza"? Otóż szablon jak to szablon ma za zadanie uprościć czyjąś pracę. W tym przypadku idzie o czystą robociznę z kodem. STL stanowi bowiem bibliotekę generyczną - cóż to oznacza? Programiści wiedzą, laicy znajdą zaś u wujka Gugla ;-). Samo rzucenie hasłem "biblioteka generyczna" może się wydawać mało interesujące z punktu widzenia "C++-owego pisarza", ale już fakt z czego się STL składa może zaciekawić dość znaczną grupę programistów. A jest w czym wybierać. Kontenery - przez wielu uważane za sedno biblioteki - są odpowiednio przygotowanymi strukturami typu lista, kolejka, zbiór, wektor itd. Każda takowa struktura otoczona jest odpowiednimi metodami/algorytmami służącymi do przeglądu, dodania czy usunięcia elementu. Nie zabrakło oczywiście konstruktorów i destruktorów, a także metod obsługi wyjątków. A wszystko to wykonane w bardzo efektywny sposób, znacznie wydajniejszy od analogicznych bibliotek występujących chociażby w języku C.
Racja, że każdą z zaprezentowanych technik programistycznych czy samych struktur można by napisać samemu - wystarczy odrobina IQ i znajomość wskaźników... Można by posiedzieć i pomyśleć nad odpowiednimi metodami służącymi do sortowania czy obracania kolejności elementów w strukturze. Można by, tylko po co? Pytam się, po co skupiać się na małostkowych detalach implementacyjnych? Czy nie lepiej, odpowiednio składając gotowe już "klocki", uzyskać większy, praktyczniejszy twór? Czy nie lepiej dobrać gotowe tryby i trybiki i z odpowiednim pomysłem złożyć je chociażby w zegarek? Zamiast tracić czas na szczegóły w wielu przypadkach (prawie 90% projektów) mało ważne, lepiej jest się przecież skupić na czymś twórczym.
Ogrom wiedzy dotyczący sposobów wykorzystania biblioteki spokojnie zapełniłby wiele tomiszczy. Zwłaszcza, że poza tymi "wysokimi" metodami jest też pokaźny zbiór odpowiednich funkcji niskopoziomowych. Gmeranie w pamięci, automatyczna organizacja zasobów... wiele by wymieniać. I wiele stron zapisać. Nie dziwota, że pełne wydania traktujące o tym uproszczeniu życia programisty zajmują pod 800 stron B5... I naprawdę ciężko jest tę wiedzę logicznie uorganizować. Z pomocą przychodzi kolejny człon tytułu książki...
LEKSYKON [gr.], pierwotnie — uporządkowany (zwykle alfabetycznie) zbiór objaśnionych wyrazów, terminów jednego języka (gr. lub łac.) dotyczących pewnej dziedziny (np. Onomastikon Polluksa, II w., Lexikon Hezychiusza z Aleksandrii, V w.), później — słownik 2-3-języczny (np. Lexicon latino-polonicum... J. Mączyńskiego 1564); współcześnie — słownik encyklopedyczny, uniwersalny lub specjalistyczny, będący słownikiem językowym (niekiedy połączonym z biogr.) zawierającym skondensowane wiadomości encyklopedyczne.
Zastosowana forma niesie wiele dobrego. Przede wszystkim organizuje strukturę informacji w określony sposób. Sposób czytelny i łatwy do trawersowania w poszukiwaniu potrzebnych danych. Całość została podzielona na grupy - mamy więc blok informacji o elemencie typu kontener i jego rodzajach, następnie wprowadzone zostają iteratory, po czym przybliżane są specyficzne, najczęściej wykorzystywane, algorytmy. Po nich autor przybliża czytelnikowi funktory, by po chwili skupić się odrobinę na niezbyt do końca pasujących do wcześniejszych "działów" obiektów. Całą publikację zamyka pigułkowy przegląd najważniejszych bibliotek projektu Boost, które to zostały przez komitet standaryzacyjny włączone do standardu języka. Niewątpliwie takie uorganizowanie ułatwi wyszukanie odpowiednich informacji, zaś utrzymanie języka encyklopedyczno-technicznego wciąż czytelnego dla laika ułatwia tym bardziej korzystanie z publikacji. Jak widać, wydaje się, że jest to pozycja dość pokaźnej wielkości. I tu kolejna niespodzianka...
KIESZEŃ [def. autora] - fragment ubrania, zazwyczaj o dość ograniczonych rozmiarach, służący do przechowywania przedmiotów podręcznego użytku.
Trzeci człon tytułu wydaje się dokładnie podkreślać kształt i grubość książeczki. Rzeczywiście - jest ona kieszonkowego formatu. Mimo to spełnia idealnie swoje zadanie. Zastosowanie leksykonu w ramach tej książki zbliża ją do pojęcia skondensowanej publikacji ze specjalistycznymi wiadomościami encyklopedycznymi w ramach tematu STL. Skondensowane i "zrarowane" do 130 stron B6 - oto jak nie tracąc wiele na przekazie informacyjnym zachować rozsądny minimalistyczny format.
Pozostaje jeszcze odpowiedzieć na jedno z pytań wielu z was nurtujące. Czy warto? Czy warto wydać niecałą dyszkę na taką maliznę, podczas gdy zarówno w Internecie, jak i w innych knigach znajdziecie więcej informacji? Według mnie warto... Już śpieszę z wytłumaczeniem. Zacznę od prostego pytania. Zdarzyło wam się, z samym tylko notesem i długopisem w ręku, wpaść na genialny pomysł obejścia tego a tego problemu programistycznego? Właśnie w takich momentach zazwyczaj brak urządzeń udostępniających zasoby sieciowe. A pomysł przecież trzeba szybko przenieść na trwalszy od naszego organicznego RAM-u nośnik. Znajomość STLa na pewno ułatwi i przyspieszy proces "papierkowej implementacji". Lecz jeśli nie jest się pewnym, czy określona metoda działa/ma sens, to znikąd szukać pomocy. A w zasadzie z kieszeni. Bo w niej właśnie powinien znaleźć się "STL. Leksykon kieszonkowy". Oszczędność czasu i nerwów... czy nie jest to warte marnej "dyszki"? Sam, drogi czytelniku, odpowiedz sobie na to pytanie. Ja tylko powtórzę po Andrew Duncanie (Senior Software Engeneer z Expertcity Inc):
"Nie, nie pożyczę swojego egzemplarza... kup sobie własny!"
Autor: Ray Lischner
Tłumaczenie: Wojciech Moch
Wydawnictwo: Helion
Rodzaj oprawy: Miękka