Boost - przydatne funkcje i środowisko do testów jednostkowych.

0

1.Często widzę w ogłoszeniach, że pracodawcy wykorzystują boosta, ale właściwie do czego?
Rozumiem, że kiedyś w standardzie nie było wątków, inteligentnych wskaźników, for_loopów i kontenerów.
Jakie wartościowe funkcje/biblioteki ma boost, których warto się nauczyć?

2.Co pobrać do nauki testów jednostkowych w visual studio?

3

My np. używamy tylko boost::fibers, ale weź pod uwagę że dużo pracy w Polsce jest w legacy kodzie a tam niekoniecznie musi być najnowszy standard(albo chociaż c++11). Co do nauki testów to chyba gtest/gmock ale ja nie mam pojęcia jak się to integruje z IDE - ja używam tylko prostego edytora VSCode i piszę Makefile z palca.

2

boost składa się z różnych modułów robiących różne rzeczy.
Wiele z nich ostatecznie ląduje w standardzie C++, więc jeśli musisz używać starszego C++ to boost często stanowi dobre uzupełnienie powstałej luki.
Np w moim obecnym projekcie, używam składni języka dostępnej w C++17, ale z technicznych powodów (wsparcie dla MacOS 10.13), bibliotek z c++17 już mi nie wolno używać, więc zamiast np std::optional używam boost::optional.

poczytaj sobie co się znajduje w boost, jest tego dużo:
https://www.boost.org/doc/libs/1_64_0/libs/libraries.htm

1

Rozumiem, że kiedyś w standardzie nie było wątków, inteligentnych wskaźników, for_loopów i kontenerów.

Sporo rzeczy trafia do standardu właśnie z boosta.Zaletą boosta jest to, że oferuje cały pakiet funkcjonalności o przyzwoitej jakośći. Gdy korzystasz już np. z 3 funkcji boosta i szukasz jakiejś nowej biblioteki to jest szansa że też będzie w boost i nie musisz ogarniać tematu dostarczania nowych zależności. Może nie zawsze będzie to to co byś wybrał gdybyś boosta nie miał, ale może być wystarczająco dobre. Poza tym sporo kodu istniejącego w firmach była pisana na przestrzeni kilku, a nawet kilkunastu lat, i nawet jeśli w międzyczasie pewne rzeczy trafiły z boosta do standardu, to w kodzie jest wciąż używany.

Z wciąż przydatnych boostowych bibliotek można wymienić:

  • asio - oferuje możliwość tworzenia serwerów i klentów http. Nawet jeśli nie korzystasz z tej biblioteki bezpośrednio, to sporo innych bibliotek które oferuje tą funkcjonalność pod spodem korzysta właśnie z boost::asio
  • log - trochę toporny, ale można szybko ogarnąć proste logowanie.
  • filesystem
  • program options
  • system

Kiedyś faktycznie korzystałem z boosta więcej, np signals2, time, smart ptr, thread, teraz już nie ma takiej potrzeby

2.Co pobrać do nauki testów jednostkowych w visual studio?

Np właśnie boost::test :)
No może niekoniecznie... U mnie się z tego korzysta, generalnie spełnia swoją rolę, ale gtest przypadł mi bardziej do gustu. Ostatnio też ktoś polecał catch2, ale osobiście nie używałem.

1

Do testów C++ tylko i wyłącznie gtest.
Łatwy dla początkujących, elastyczny dla zaawansowanych.
Prawdziwa siła demonstruje się podczas użycia gmock.

0
leto napisał(a):

1.Często widzę w ogłoszeniach, że pracodawcy wykorzystują boosta, ale właściwie do czego?
Rozumiem, że kiedyś w standardzie nie było wątków, inteligentnych wskaźników, for_loopów i kontenerów.
Jakie wartościowe funkcje/biblioteki ma boost, których warto się nauczyć?

Na pewno te, które są już w standardzie, a nie możesz ich używać, bo nie możesz używać nowego standardu. Inna sprawa, że raczej nie polecam używać boosta, jeżeli masz do wyboru inne biblioteki oferujące to samo. Problemy to między innymi skomplikowanie, często brak sensownej dokumentacji, długie czasy kompilacji, słaby performance.

2.Często widzę w ogłoszeniach, że pracodawcy wykorzystują boosta, ale właściwie do czego?

Gtest jest najbardziej popularny, niestety trochę się zestarzał. Nowsze alternatywy to Catch i doctest. Jak chcesz uczyć się czegość pod pracę to trzymałbym się Gtest

2

Najlepiej po prostu przeczytać https://theboostcpplibraries.com/ i samemu zobaczyć co ciekawego można tam wygrzebać. Nie jest to już najnowszy kurs i nie omawia niektórych nowych rzeczy jak Boost Hana, Boost DLL, Boost Compute, czy Boost Beast, ale i tak stanowi dobre wprowadzenie i pokazuje co mniej-więcej można tam znaleźć.

Z często przydatnych rzeczy wskazałbym alokatory (Boost Pool), parsery (Boost Spirit - uwaga, jest już nosza wersja, X3), algorytmy na napisach (Boost String Algorithm), komunikacje sieciową (Boost ASIO, Boost Beast), duże liczby (Boost Multiprecision), komunikację z Pythonem (Boost Pytnon), zakresy (Boost Range - przynajmniej dopóki nie wejdą ranges, zobacz https://greek0.net/boost-range/index.html), testy (Boost Test, chociaż sam wolę Catch2).

Czasami mogą się przydać grafy (Boost Graph Library) i geometria obliczeniowa (Boost Geometry), aczkolwiek mają średnio przyjazne API i dokumentację. Eigen wydaje się być bardziej popularny do obliczeń numerycznych niż Boost Compute. Czasami używa się Boost Fussion do imitowania refleksji, jak w tym przykładzie.

Spokojnie olać można to, co nowsze wersje standardu i ludki włączyły do języka (Boost Unordered, Boost SmartPointers, Boost Variant, Boost Move, Boost Foreach, Boost StaticAssert, Boost Any, Boost Array, Boost Tuple, Boost Regex, Boost Random, Boost Optional, Boost Foreach, Boost Filesystem - chyba, że zachodzi potrzeba pracy w legacy system lub w starym standardzie), biblioteki funkcyjne (Boost Phoenix, Boost Function, Boost Bind, Boost Ref, Boost Lambda - w dzisiejszych czasach po prostu ładniej i czytelniej jest korzystać z wyrażeń lambda), Boost MPL (jak już to Boost Hana jest nowsze), Boost Log (imho strasznie skomplikowany i przeinżynierowany), Boost QVM (cool kids używają GLM), Boost MPI (sama technologia jest już raczej starodawna, a rozproszone systemy pisze się inaczej).

Unikał bym też tych bibliotek, które na pierwszy rzut oka ciężko nawet powiedzieć co dokładnie robią, za to zdają się straszliwie korzystać z preprocesora czy szablonów, jak Boost Proto czy Boost Preprocessor. Wyglądają ciekawie i można z nimi robić szalone rzeczy, ale kto by to wpuścił na produkcję... kod produkcyjny powinien być nudny i łatwy do zrozumienia, a nie korzystać z wariackich hacków.

Reszta wydaje się przydawać raczej sporadycznie. Googlując po odpowiedzi na SO można raz za czas się natknąć na nie.

2
leto napisał(a):

1.Często widzę w ogłoszeniach, że pracodawcy wykorzystują boosta, ale właściwie do czego?

To, że boost jest w ogłoszeniu (domyślam się że w ogłoszeniu o rekrutacji pracownika), nie oznacza jeszcze, że rzeczywiście z niego korzystają. Równie dobrze może to być jakieś puste hasło, albo w jakimś jednym na 10 programów wykorzystali jedną bibliotekę. Ale w przypadku rzeczywistego wykorzystania, a nie fikcji literackiej, to najprędzej spodziewałbym się biblioteki asio - chociaż moim zdaniem wcale nie jest ona wygodna i preferuję używanie normalnych funkcji systemowych w C (nawet jak mam zrobić #ifdef-y aby mi działało zarówno na Linuksie jak i Windowsie) - ale nie raz zetknąłem się z tym, że ktoś co do asio wyrażał entuzjazm.

Dużą część z tego, co jest w Boost, uważam za pewnego rodzaju pułapkę. Ktoś sobie z czymś eksperymentował, dla zaprezentowania jakie możliwości ma język C++, zamiast dla udostępnienia jakiejś konkretnej użytecznej funkcjonalności. Użycie jest skomplikowane, błędy kompilacji nieczytelne, a pożytek marny. Niestety, przez to że 1/10 (czy jakaś tam inna proporcja) bibliotek okazuje się udana i trafia do standardu z niewielkimi zmianami, Boost jako całość potrafi mieć renomę na jaką nie zasługuje - zbioru bibliotek dobrej jakości i użytecznych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1