Struktury danych |
Wpisany przez Patryk yarpo Jar | |||
sobota, 02 stycznia 2010 18:37 | |||
Taki przedmiot jest na studiach informatycznych. Każdych. Czasem się inaczej nazywa (u mnie to było Projektowanie i Analiza Algorytmów na przykład). Zasadniczo struktury danych to rzecz użyteczna, szczególnie jak ktoś je implementuje za nas. Z TR1 i następną wersją standardu (C++2009?) dostajemy do naszej kolekcji tablicę mieszającą (unordered_*map, unordered_*set). To już fajna rzecz, ale programiści takiej n.p. Javy mają java.util.Hashtable niemal od zawsze i nie jest to dla nich nic ekscytującego. Coś jeszcze? Ano dużo! Jak jest jakaś rzecz, której w standardzie C++ nie ma, a uważamy, że być powinna, to najpewniej ona już od dawna jest. W bibliotece Boost. Boost ma mapy dwukierunkowe, wielowymiarowe tablice, bufory cykliczne, tablice stałej wielkości (weszły do TR1), uogólnione krotki (także TR1) i wspomniane tablice mieszające (i znowu TR1). Nie będę przedstawiał Google Summer of Code – znacie ten wspaniały program znajdowania wakacyjnego zajęcia dla ambitnych młodych programistów. Owóż jeden z uczestników onego programu zaproponował wzbogacenie boosta o to, co w nim brakuje, a mianowicie całą gamę drzew słownikowch (trie, skompresowane trie, drzewa sufiksowe… oj czego to on nie zaproponował). Muszę powiedzieć, że kibicuję temu projektowi z całego serca, bo jest on w moim odczuciu arcyważny dla społeczności C++’owej. Dlaczego? Ano dlatego, że daje nam kolejną standardową strukturę danych. Mniejsza o to, że do wewnętrznej reprezentacji tekstu używa on własnego typu (ni to char ni to wchar_t) : on używa go również w API. jako jedynej opcji. Nie da się xercesa przekonać do stworzenia elementu pisząc: Trzeba być dużo bardziej dosadnym: Tłumaczenia, że to interoperacyjność czy że to unikod o kant stołu rozbić. Program bez konkretnej potrzeby (tu takiej nie ma) porzucający standardowe API na rzecz własnych wynalazków tylko dlatego, że te drugie są własne to niedobry program. Tworząc taki program utrudniamy życie autorom, którzy chcą z naszym programem się komunikować lub choćby chcą włączyć fragmenty naszego programu w swój program, czyż nie? Szczególnie bolesne jest to w kwestii bibliotek, dla których łączenie z innymi programami jest racją bytu. Jeśli takie cyrki robi się w ramach zamkniętego oprogramowania, to mniejszy problem (bo tego nie widzę), ale niech mi ktoś wyjaśni, czemu służy robienie takiego mętliku w oprogramowaniu otwartym? Autorem artykułu jest Maciej Kamiński.
|