Obecnie zajmuję się programowaniem w środowisku akademickim, więc mogę korzystać z wszystkiego, co chcę. Korzystam z biblioteki grafów boost do kilku rzeczy i zastanawiam się, czy warto zainwestować w głębsze zrozumienie GP.
Jestem ciekawy - czy programowanie ogólne (GP) jest często używane w przemyśle? Domyślam się, że większość programistów jest znacznie wygodniejsza w OOP lub używa języków, które nie podkreślają ani nie obsługują GP, więc poza wywoływaniem struktur / funkcji danych STL w C ++, mam wrażenie, że GP nie jest często używana w praktyce. Ale będąc obecnie poza przemysłem, miło byłoby usłyszeć od praktyków na ten temat.
(pisząc to, widzę, że programowanie ogólne nie jest nawet prawidłowym znacznikiem!)
Odpowiedzi:
Jest to bardzo szeroko zależne od kontekstu zespołu i projektu.
Na przykład w grach wideo kod jest często „najprostszy” z możliwych (a czasem nawet zbyt prosty), ale w dużych architekturach. Wynika to z faktu, że twórcy gier mają wiele problemów do rozwiązania i nie chcą zawracać sobie głowy meta programowaniem (jest to osobny, bardzo abstrakcyjny i trudny do zrozumienia język wewnątrz C ++).
Jednocześnie podstawowe użycie szablonów jest powszechne nawet w tych sklepach, a niektóre optymalizacje oparte na szablonach można zobaczyć w niektórych bardzo specyficznych funkcjach niektórych silników.
Ale w twórcach gier większość osób po prostu uniknie metaprogramowania.
Teraz, z drugiej strony, niektóre naprawdę złożone lub ciężkie aplikacje przetwarzania, które nie są powszechne, wymagają pewnego rodzaju ciężkiego metaprogramowania ze względu na wymagania dotyczące wydajności i elastyczności (w czasie kompilacji), które nie są powszechne. Pracuję teraz w jednym.
To nie jest powszechne, ale istnieje, a niektóre domeny niszowe (w niektórych osadzonych kontekstach naukowych lub krakujących numery) wymagają od ludzi dużej wiedzy na temat metaprogramowania lub chęci uczenia się.
Pośrodku większość ludzi po prostu użyje metaprogramowania jako „klient”, a nie jako „projektant”. Większość metaprogramowania jest zawarta w bibliotekach, ponieważ biblioteki są narzędziami do kodu i co jest lepszego niż biblioteka, która może dostosować się do niestandardowych typów, z którymi pracujesz do tej pory?
Boost (http://boost.org) to zestaw bibliotek, niektóre z nich są wykonane z ciężkiej czarnej metaprogramowania czarnej magii i są używane w wielu sklepach C ++ jako „STL ++”, rozszerzenie STL (i tak jest). Nie każdy sklep korzysta z niego z kilku powodów, takich jak kompatybilność z kompilatorem (niektóre biblioteki rozszerzeń mogą sprawić, że Twój kompilator będzie błagał o wybaczenie za każdym razem, gdy zranił twoje odczucia ...) i częściej, ponieważ niektórzy programiści nie lubią nie być w stanie zrozumieć jak działa narzędzie w środku (spróbuj zrozumieć Boost.Spirit ...)
Niezależnie od tego, dla jakich firm będziesz pracować, niektórzy wykorzystają ten paradygmat, inni będą mniej lub wcale, a nawet ich zabraniają.
Nie ma zgody, ponieważ nikt nie ma takich samych potrzeb, kontekstu lub zespołu.
Ale nadal, oczywiście, jest używany. Może zapytasz, kto używa boosta na swojej liście mailowej, aby mieć więcej przykładów z prawdziwego świata?
źródło
Programowanie ogólne, nazywane naukowo polimorfizmem parametrycznym , jest bardzo często stosowane w terenie. W mojej firmie używamy go głównie do tworzenia niezależnych edytorów danych, niezależnie od ich rodzaju. Po prostu nie potrzebujesz go tak często, jak innych funkcji, ale jest to zdecydowanie funkcja, której nie chciałbym przegapić. Używasz go, gdy zachowanie pasuje do dużej liczby typów. Jest to wyraźny znak, że potrzebujesz leków ogólnych, gdy wielokrotnie piszesz ten sam kod dla różnych typów.
Przynajmniej z mojego doświadczenia twój punkt widzenia jest błędny. OOP i programowanie ogólne nie wykluczają się wzajemnie. W rzeczywistości powinieneś wykorzystać efekty synergii, łącząc je. Jak wspomniałem wcześniej, powodem, dla którego nie widzisz go tak często jak innych technik, jest to, że nie potrzebujesz go tak często. Ale jest to silna cecha, która ma, i bardzo pomaga w utrzymaniu SUCHEGO kodu . Które języki tak naprawdę nie podkreślają wsparcia GP w programowaniu wysokiego poziomu? 3 z 5 języków Tiobe Top 5 obsługuje ogólne / szablony. PHP jest dynamicznie wpisywane, więc tak naprawdę ich nie potrzebuje. Więc co?
źródło
Szablony C ++ są szeroko stosowane do rzeczy innych niż kontenery - przynajmniej w mojej dziedzinie problemów (finanse ilościowe). Zaryzykowałbym nawet stwierdzenie, że czasami jest on zbyt często wykorzystywany do celów, w których wystarczyłyby zwykłe stare funkcje wirtualne (i nie wydłużyłoby to zbytnio czasu kompilacji).
Ludzie używają go, aby uniknąć powielania kodu i osiągnąć polimorfizm w czasie kompilacji (bez wirtualnej wysyłki).
źródło