MPU: Meta-Programing Unit
• tech • 487 słów • 3 minuty czytania
Wraz ze wzrostem doświadczenia, a raczej ilości “wyklepanych” linii kodu i “przemielonych” projektów rośną nasze zasoby elementów i własnych konstrukcji najchętniej wykorzystywanych w kolejnych projektach. Oczywiście pomijam tutaj sens robienia czegokolwiek co znajduje się w bibliotece standardowej, boost lub jednej z miliona innych popularnych bibliotek. Niemniej, czasami nawet te standardowe i najczęściej używane biblioteki mają jakieś braki lub z innych powodów oferowane przez nie implementacje potrzebnych nam elementów nas nie zadowalają. W ten sposób nasz zbiór przydatnych elementów i konstrukcji się rozwija i rozrasta, a niekiedy stajać się taką samowolną biblioteką.
Podobnie było z MPU (Meta-Programing-Utils1), moim zbiorem elementów i konstrukcji przydatnych w metaprogramowaniu i programowaniu uogólnionym. W zamierzeniu miała to być mała i lekka biblioteka różnych konstrukcji, których mi usilnie brakowało w STL-u i/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 osobnych plików i biblioteki.
Niestety biblioteka ta nigdy oficjalnie nie powstała i nie została wydana publicznie. I to mimo tego, że strona projektu od dawna gdzieś “wisi”, ale chyba tylko informacyjnie, bo w niektórych projektach stosowałem wyekstrahowane fragmenty różnych konstrukcji z MPU wraz z odnośnikami do niej (licencja, pochodzenie). Aktualnie, kiedy to nowy standard się już pojawił i zadomowił, wiele tamtych konstrukcji straciło swój sens, a inne bardzo się uprościły (dzięki nowym możliwością języka i biblioteki standardowej). W związku z tym zdecydowałem się nie wydawać i nie upubliczniać kodu.
Zamiast tego, wydaje mi się, że lepszą rzeczą będzie napisanie kilku notek o zastosowanych tam konstrukcjach i trickach. Myślę, że to będzie dużo bardziej wartościowe. Przy okazji wniesie trochę światła w zrozumienie ciekawych rozwiązań i sztuczek wykorzystywanych nie tylko w metaprogramowaniu, ale często także i w zwykłym programowaniu.
Na początku warto ustalić używaną terminologię i założenia. Wszędzie, gdzie będę mówił o C++ będę miał na myśli najnowszą wersję tego języka, czyli C++11 - taki niejawny implicite. W innych przypadkach jasno będę określał, do której wersji się odwołuję. Choć myślę, że można już założyć, że “C++98 = C++03 = przed C++11” co przy dwóch podziałach - pre-C++11 i post-C++11 powinno nieco ułatwić sprawę. Aczkolwiek, może się zdarzyć, że w pewnych sytuacjach zajdzie potrzeba uszczegółowienia, co zostanie w takich miejscach poczynione.
Niestety w tej notce nie będzie żadnego tematu do poruszenia i przedstawienia, poprzestanę na tym małym wprowadzeniu. W ciągu kilku dni można 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 z tych kilku planowanych wpisów może stać się mały cykl powiązany z tym o czym kiedyś myślałem i dumnie opisałem w kilku notatkach przed “wielką przerwą” - Dlaczego w C++ jest lepiej? i Modern C++. Wydaje mi się, że już dawno przeszły mi takie zapędy edukacyjne i ewangelizacyjne, ale z drugiej strony czasem warto podzielić się swoją wiedzą, uwagami i perspektywą…
Przypisy
-
A może Meta-Programing-Unit, bo niestety nie pamiętam już dokładnie jaki był oryginalny zamysł nazwy i jej rozwinięcia. ↩︎
Komentarze (0)