Jeśli więc poświęcisz trochę czasu na przeglądanie / odpowiadanie na pytania dotyczące przepełnienia stosu pod znacznikiem C ++, szybko zauważysz, że prawie wszyscy korzystają z biblioteki boost ; niektórzy powiedzieliby nawet, że jeśli go nie używasz, nie piszesz „prawdziwego” C ++ (nie zgadzam się, ale nie o to chodzi).
Ale jest też branża gier, która jest dobrze znana z używania C ++ i nie używania boosta. Nie mogę się nie zastanawiać, dlaczego tak jest. Nie dbam o to, żeby używać boosta, ponieważ piszę gry (teraz) jako hobby, a częścią tego hobby jest wdrażanie tego, czego potrzebuję, kiedy mogę, i używanie gotowych bibliotek, kiedy nie mogę. Ale to tylko ja.
Dlaczego twórcy gier nie korzystają z biblioteki doładowań? Czy dotyczy to wydajności lub pamięci? Styl? Coś innego?
Właśnie miałem to zadać przy przepełnieniu stosu, ale pomyślałem, że lepiej zadać pytanie tutaj.
EDYTOWAĆ :
Zdaję sobie sprawę, że nie mogę mówić za wszystkich programistów gier i nie widziałem wszystkich projektów gier, więc nie mogę powiedzieć, że twórcy gier nigdy nie używają ulepszeń; to po prostu moje doświadczenie.
Pozwól mi edytować moje pytanie, aby również zapytać, jeśli używasz wzmocnienia, dlaczego zdecydowałeś się go użyć?
Odpowiedzi:
Niektórzy programiści tak robią, inni nie (w grach i gdzie indziej). Zależy to od potrzeb / wymagań tych programistów i od istniejącej technologii, którą muszą wykorzystać.
Biblioteka standardowa C ++ 's jest często stosowany z takiego samego traktowania, a ludzie często zastanawiam samo zastanawiasz się o nim też. Większość przyczyn jest podobnych, na przykład:
Deweloper może już mieć wewnętrzną bibliotekę funkcji, która zapewnia te same usługi, co standardowa biblioteka lub Boost. Takie biblioteki wewnętrzne były często pisane dawno temu, gdy obsługa implementacji biblioteki standardowej była słaba, a Boost zasadniczo nie istniał, więc mniej więcej trzeba było je napisać. W tym scenariuszu zazwyczaj nie warto odchodzić od wewnętrznej funkcjonalności - byłby to duży wysiłek związany z portowaniem, który destabilizowałby dużo kodu i nie zapewniłby prawie żadnych korzyści.
Deweloper może pracować na platformach, na których obsługa kompilatora zaawansowanych technik C ++ wykorzystywanych przez Boost nie jest dobrze obsługiwana, tak że kod Boost w ogóle się nie kompiluje lub działa dość słabo. Dotyczy to również standardowej biblioteki, choć w dzisiejszych czasach znacznie mniej.
Zwiększenie i standardowa biblioteka języka są uniwersalne i chociaż jest to dobre i dobre dla większości aplikacji, czasami deweloper ma specyficzne potrzeby, które mogą być lepiej zaspokojone przez bardziej wyspecjalizowane kontenery.
Myślę, że powyższe są dwa uzasadnione powody, choć z pewnością są inne. Trzeba jednak uważać, ponieważ wiele powodów, dla których należy unikać wzmocnienia, bibliotek standardowych lub czegokolwiek sprowadza się do syndromu „nie wymyślono tutaj”, co może wskazywać, że przyczyna nie jest zbyt dobrze ugruntowana w praktyce.
Pamiętaj też, że potrzeby dużego studia zwykle są bardzo różne od potrzeb poszczególnych programistów. Na przykład, indywidualny programista prawdopodobnie ma mniej przestarzałego kodu do utrzymania, więc być może przeniesienie z domowej wersji wersji Boost lub standardowej biblioteki nie będzie tak dużym nakładem czasu i uratuje tego programistę przed utrzymaniem ten kod jest tak obszerny w przyszłości - w ten sposób unieważniając mój pierwszy punktor.
Ostatecznie chodzi o ocenę wymagań i nakładów czasowych w stosunku do zamierzonego celu i określenie, która opcja najlepiej odpowiada Twoim potrzebom. Programiści, którzy nie używają Boosta ani standardowej biblioteki, zwykle tak robią i doszli do tego wniosku - być może ty też, a może nie.
źródło
Edytuj wracając do tego pytania po kilku latach
Po dalszym korzystaniu z coraz większej liczby bibliotek doładowań, pomyślałem, że zaktualizuję to pytanie, aby dać solidne uzasadnienie, dlaczego powinieneś używać doładowania, gdy opis produktu odpowiada pożądanej funkcjonalności. Przekona to nawet nie-mówców. Pobierz openSSL, spróbuj utworzyć z nim aplikację kliencką i serwerową. Teraz spróbuj, aby działało to na każdej platformie. Następnie pobierz i użyj boost :: asio :: ssl, aby utworzyć tę samą aplikację. Jeśli nie jesteś przekonany, że ulepszenie jest właściwym miejscem do poszukiwania czystego, dobrze zoptymalizowanego, sprawdzonego przez wielu platform kodu, to proste ćwiczenie cię przekonwertuje.
Wersja Tl; dr:
Moim zdaniem nie widzisz mnóstwa niezależnych lub małych i średnich firm deweloperskich korzystających z boosta, ponieważ jest to potężna i potężna dzika bestia, która nie jest łatwa do oswojenia i jesteś w zasadzie sam, próbując dowiedzieć się, jak użyć tego. Dokumentacji brakuje na kilka sposobów (patrz długa wersja), a „społeczność” wokół projektu wydaje się być zaginiona, rozproszona lub nieaktywna (w porównaniu z innymi projektami).
Bardzo długa wersja:
zdaję sobie sprawę, że odpowiedź jest już zaakceptowana, ale jako ktoś, kto faktycznie wykorzystuje ulepszenia w prawie każdym projekcie, który robię, pomyślałem, że opublikuję odpowiedź.
Pamiętam, kiedy po raz pierwszy zacząłem grzebać w akcji i szczerze mówiąc, nie miałem cholernego pojęcia, co się dzieje. Zwiększenie wcale nie jest dobrze udokumentowane. Ludzie mogą się ze mną nie zgodzić, że jestem pewien, ponieważ istnieje mnóstwo fragmentów przykładowego kodu i komentarzy i tym podobnych, ale wszystko jest bardzo zimne i niejasne, a także trudne w nawigacji.
Trudno też znaleźć miejsce, w którym czujesz, że znalazłeś „społeczność” wokół projektu. W rzeczywistości społeczność wydaje się nieistniejąca lub koczownicza. Niestety, nawet ich lista mailingowa została przeszukana przez tak wiele stron z pijawkami, że możesz zejść do tej króliczej nory, zawsze zapętlając się z powrotem do miejsca, w którym zacząłeś.
Te dwa czynniki sprawiają, że nauka korzystania z bibliotek rozszerzeń jest dość trudnym zadaniem. Nawet jeśli techniczne korzystanie z boosta nie jest zbyt skomplikowane, jest to ogromny zestaw bibliotek i patrzenie w dół, gdy wszystko, co masz do dyspozycji, to kilka fragmentów kodu i rozrzuconych fragmentów listy mailingowej z najciemniejszych zakątków Internetu ... masz pomysł.
Zacząłem majstrować przy ulepszeniu wersji 1.45 i dopiero teraz w wersji 1.52 / 1.53 czuję się wystarczająco wygodnie, aby używać go w produkcji. Jest tak wiele rzeczy, do których należy się przyzwyczaić i pamiętać, nawet proste rzeczy, takie jak konfiguracja wzmocnienia i zapamiętywanie tej konfiguracji, ponieważ sposób budowania bibliotek i funkcji może się znacznie różnić w zależności od twoich preferencji w czasie kompilacji ze względu na to, jak można dostosowywać rzeczy są.
Jednakże , nie pomyłka , raz można dzierżyć impuls, masz zyskał potężną broń do szybkiego budowania stałych, programy cross-platform. Weźmy
boost::asio
na przykład. Możesz napisać niezwykle potężny, skalowalny i solidny, wieloplatformowy asynchroniczny serwer WWW w zaledwie kilkuset wierszach. Przez lata napisałem wielu klientów, serwerów, serwerów proxy itp., Mając zaledwie kilkaset wierszy kodu, z których każdy jeszcze mnie nie zawiódł, i mogę przenieść je z platformy na platformę w kilka minut.Jak zauważyli inni, większe firmy zwykle utknęły w posiadaniu starszych produktów lub lubią tworzyć własne, co całkowicie rozumiem. Jest też ta naprawdę głupia rzecz, o której słyszałem i zetknąłem się, gdy deweloperzy i / lub kierownicy projektów zabraniają używania ulepszeń, ponieważ są „za duże”. Domyślam się, że wierzą, że boost to 1 pojedyncza biblioteka lub nigdy nie słyszeli o BCP .
Co do DLACZEGO decyduję się na użycie boosta
Powiedziałbym, że go używam, ponieważ jak sugerujesz w swoim pytaniu, jest to „biblioteka” C ++. Boost jest postrzegany w świecie C ++ jako szwajcarski scyzoryk rzeczy, których w końcu będziesz musiał użyć. Pomysł polega więc na tym, że jeśli zajdzie taka potrzeba, powinna istnieć bardzo wydajna i przenośna wersja tego pakietu. Duże firmy przyczyniają się do rozwoju , bardzo wykształceni ludzie z imponującymi życiorysami przyczyniają się i utrzymują go , a gdy opracowywany jest nowy standard C ++, ludzie zwykle szukają ulepszenia, aby zobaczyć, które jego części powinny stać się standardem ISO C ++.
Więc jeśli muszę dodać funkcjonalność, dla której prawdopodobnie istnieje biblioteka, pierwsze miejsce, w którym będę szukał, to ulepszenie tylko dlatego, że jestem całkiem bezpieczny w zakładach, że jest dość dobrze zoptymalizowane, przenośne, będzie obsługiwane i utrzymywane przez bardzo długo, a błędy zostaną znalezione i usunięte. W świecie open source te cechy mogą być bardzo trudne do zdobycia.
źródło
W naszym starym miejscu pracy wykorzystaliśmy trochę ulepszenia. Głównymi powodami, dla których najczęściej go unikano i ograniczano jego użycie, były:
źródło
To samo mówi się (było?) O „bardziej standardowym” STL. Ten artykuł mówi o EASTL, wewnętrznym przepisaniu (części) STL firmy Electronic Arts, aby zaspokoić potrzeby związane z tworzeniem gier, które różnią się raczej od potrzeb związanych z tworzeniem „bardziej ogólnych” aplikacji.
Więc może ktoś gdzieś jest ponowne pisanie (części) impuls aby zaspokoić swoje potrzeby w rozwoju gry!
źródło
Kto powiedział, że nie używają wzmocnienia? Znałem jeden lub dwa silniki C ++, które wykorzystały boost. Nigdy z nimi bezpośrednio nie współpracowałem; ale głównie dlatego, że moje doświadczenie leży w Unreal.
Jeśli chodzi o powody, dla których napotkałem, że nie używam wzmocnienia, i są one subiektywne:
Zasadniczo sprowadza się to do: ogólne rozwiązanie nie zawsze jest „odpowiednie”.
Jestem pewien, że ktoś, kto faktycznie pracował z biblioteką, mógłby lepiej komentować.
źródło
Wychodzę na StackOverflow i nie używam wzmocnienia. Dodam swój powód, ponieważ nie wymieniono go jeszcze.
Boost ma naprawdę wiele świetnych pomysłów. Lubię patrzeć na to, co zrobili i wypróbowywać nowe rzeczy i pomysły. Są świetne, ponieważ są gruntem dla wielu ulepszeń C ++.
Ale podbicie jest bardzo nieporęczną bestią z wielu powodów. Jednym z powodów jest to, że muszą (chcą) być kompatybilne z praktycznie każdym kompilatorem z wszelkimi dziwactwami. W związku z tym muszą zastosować wiele sztuczek, takich jak MPL, aby to zrobić. Na przykład (dawno temu) chciałem użyć ich shared_ptr, uruchomienie go oznaczało, że potrzebuję źródeł i bibliotek tego, co wydawało się 90% doładowania. Skończyłem pisać własne; 50 czytelnych wierszy kodu. (Moje wymagania są bardziej rygorystyczne, takie jak brak słabych argumentów lub bezpieczeństwo wątków.)
Często potrzebujesz naprawdę niewielkiej części wzmocnienia, ale zintegrowanie całości wzmocnienia nie jest po prostu warte wysiłku.
Edytuj :
Samo wyjaśnienie jest jasne, ponieważ wydaje się, że nie doszło do tego jasno (tj. Głosowanie negatywne). Używam nie używać bibliotek innych firm. Ale w większości przypadków, gdy wszystkie rzeczy są równe, integrując bibliotekę strony trzeciej lub ulepszenia, biblioteka drugiej strony jest szybsza i czystsza. Reszta odbywa się w ćwiczeniu palca „2h”. Bardzo uważnie przyglądam się kompilacji lub kupuję pytanie.
źródło
W naszym przypadku (nie gier) mamy doskonały powód, aby nie używać boost (ani standardowego): Mamy dużo kodu, który sięga dekady. Według seniorów std i boost były albo niekompletne, pełne błędów lub po prostu zbyt wolne dla potrzebnych rzeczy o wysokiej wydajności. Tak więc niektóre klasy podstawowe zostały zaimplementowane przy użyciu tych samych pojęć (takich jak iteratory) i często zoptymalizowane pod kątem naszych algorytmów. Obecnie wszystkie trzy biblioteki (nasza, std i boost) są bardzo podobne.
Ale czy chcemy przenieść cały nasz kod? Nie całkiem. Zakładam, że wiele innych firm boryka się z tym samym dylematem. Albo przepisz dużo przetestowanego i działającego kodu, albo nie używaj standardowego standardu / boost.
źródło
Podczas tworzenia gier osobiście nie używam doładowania ani żadnego innego kodu ogólnego przeznaczenia, ponieważ gry nie są ogólnie przeznaczeniem ogólnym. Rodzaj kodu, który może być potrzebny do wdrożenia gry, jest zazwyczaj specyficzny dla rozwoju gry, nie zawsze, ale na przykład 98% (liczba losowa) czasu. Możesz sflashować te ostatnie fragmenty kodu z boosta lub innej biblioteki, ale prawdopodobnie lepiej jest napisać tę małą część, której potrzebujesz tu i tam.
Na marginesie, myślę, że fajnie jest napisać własny kod w c ++, dlatego nigdy nie korzystałem z boosta ani nic podobnego.
źródło
spuścizna bibliotek domowych nie jest czynnikiem ... głównym powodem, dla którego nikt nie powinien używać boost u innych bibliotek ogólnego przeznaczenia, jest to, że nie mają zoptymalizowanej prędkości i pamięci, muszę wspomnieć, że Cryengine używa STL, ale się kompiluje jest to wersja open source o nazwie STLPort, więc nie bój się używać STL, po prostu zaimplementuj niestandardowe alokatory i wszystko będzie dobrze. nie używaj doładowania.
źródło