MPU: Meta-Programing Unit

Wraz ze wzrostem doświadczenia, a raczej "wyklepanych linii kodu" i "przemielonych" projektów rośną nasze zasoby wiedzy, ale także zasoby elementów i własnych konstrukcji najchętniej wykorzystywanych w nowych projektach. Oczywiście pomijam tutaj sens robienia lub składowania czegokolwiek co znajduje się w bibliotece standardowej, boost lub milionie innych popularnych bibliotek, niemniej czasami, nawet te standardowe i najczęściej używane biblioteki mają jakieś braki, bądź z jakiś powodów oferowane przez nich implementacje potrzebnych nam elementów nie są dla nas zadowalające. W ten sposób nasz zbiór przydatnych elementów i konstrukcji się rozwija i rozrasta, niekiedy stajać się samowolną biblioteką.

Podobnie było z MPU (Meta-Programing-Utils lub Meta-Programing-Unit, niestety nie pamiętam już dokładnie jaki był zamysł nazwy i jej rozwinięcia), moim zbiorem elementów i konstrukcji przydatnych w metaprogramowaniu i programowaniu uogólnionym. W zamierzeniu miała to być biblioteki różnych konstrukcji, których mi usilnie brakowało w STL-u lub Boost-cie, a były one na tyle popularne (w moich kodach), że z czasem chciałem je (a nawet zacząłem) wydzielać do osobnej biblioteki.

Niestety biblioteka ta nigdy oficjalnie nie powstała, nie została wydania lub upubliczniona, mimo, że strona projektu "wisi", chyba tylko informacyjnie, bo w niektórych projektach stosowałem wyekstrahowane fragmenty różnych konstrukcji z MPU wraz z odnośnikiem i informacjami zwrotnymi, licencjami, skąd ten kod pochodzi.

Aktualnie, gdy nowy standard się już pojawił, wiele konstrukcji tam przedstawionych straciło swój sens, a wiele innych bardzo się uprościło, dzięki nowym możliwością języka i biblioteki standardowej, dlatego zdecydowałem się nie wydawać i nie upubliczniać kodu. Zamiast tego, lepszą rzeczą będzie napisanie kilku ciekawych notek, odnośnie różnych zastosowanych konstrukcji i tricków związanych głównie z metaprogramowaniem i szablonami jakie tam czasami się przewijały. Myślę, że to będzie dużo bardziej wartościowe, wnoszące trochę światła w zrozumieniu nowych konstrukcji języka, a także przedstawić ciekawe rozwiązania i sztuczki wykorzystywane nie tylko w metaprogramwoaniu, ale często także w zwykłym programowaniu. Przecież wszyscy dążymy do prostszego i łatwiejszego życia...

Zastanawiam się, czy niektóre fragmenty kodu, jakie tutaj zostaną prezentowane "wrzucić" do jakiegoś repozytorium powiązanego z tym "niby" projektem. Zobaczymy...

Warto na początku ustalić terminologię i założenia jakie będą używane. Wszędzie, gdy będziemy mówić o C++ będziemy mieć na myśli najnowszą wersję tego języka (czyli C++11) – taka niejawne implicite. W innych przypadkach, jasno będzie określone, do której wersji się odwołujemy, choć myślę, że możemy również założyć C++98 = C++03 = to co przed C++11. Powinno to nieco ułatwić sprawę, aczkolwiek, może się zdarzyć, że w pewnych sytuacjach zajdzie potrzeba rozdzielenia w/w warunku, co zostanie w takich momentach poczynione i jasno wyjaśnione.

Niestety w tej notce nie będzie żadnego głębszego tematu do poruszenia i przedstawienia, poprzestanę na tym małym wprowadzeniu. W ciągu kilku dni możecie się spodziewać jakiegoś pierwszego artykułu związanego z MPU – prawdopodobnie będą to proste helpery ułatwiające wykorzystywanie algorytmów operujących na zakresach na zwykłych tablicach.

Poniekąd może z tego stać się mały cykl powiązany z tym co miało kiedyś powstać, o czym dumnie pisałem w kilku notatkach przed „wielką przerwą” - Dlaczego w C++ jest lepiej? i Modern C++. Wydaje mi się ze dano przeszły mi zapędy edukacyjne i ewangelizacyjne, ale z drugiej strony czasem warto podzielić się swoja wiedzą, swoimi uwagami i perspektywą...

Jedno przemyślenie nt. „MPU: Meta-Programing Unit”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *