Dlaczego programiści C ++ Game nie korzystają z biblioteki boost? [Zamknięte]


81

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ć?



2
Czy uczciwie byłoby powiedzieć, że „Wzmocnienie” to zdecydowanie zbyt duży zbiór bibliotek, aby „użyć wzmocnienia” lub „nie używać wzmocnienia” jest dobrym wyborem? Uważam, że nawet Google ogranicza niewielki podzbiór „ulepszenia” swoich standardów.
Dan Olson,

Pliki binarne gier są już wystarczająco duże.
Legion

3
@Tetrad STL nie jest doładowywany, a STL jest intensywnie wykorzystywany w gamedev.
rootlocus

7
Naprawdę nie rozumiem, gdzie pytanie nie jest „konstruktywne”, trzeba by to wyjaśnić.
v.oddou

Odpowiedzi:


42

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.


2
Kolejna kwestia - niektóre firmy nie używają wzmocnienia ze względu na jego negatywny wpływ na szybkość kompilacji w wysoce interaktywnym środowisku programistycznym.
Steven

27

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::asiona 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.


Bardzo dobrze, jeśli chodzi o dokumentację. Na przykład doktorzy Boost.asio wyjaśnią, jak napisać serwer http w zaskakująco niewielu liniach, co jest świetne, jeśli twoja gra używa http (lub dowolnego innego waniliowego protokołu TCP w tym zakresie), ale staje się znacznie trudniejsze, jeśli chcesz użyć niestandardowy protokół lub zastrzeżona biblioteka sieciowa. Zajęło mi 20 minut, aby zrozumieć, jak utworzyć serwer WebSocket za pomocą boost.asio, ale tygodnie, aby zrozumieć, jak korzystać z ENet ( enet.bespin.org ) za pomocą niestandardowego boost.asio io_service.
ClosetGeek

21

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:

  • czasy kompilacji - niektóre z nich kompilują się bardzo wolno, co powoduje niechęć do zwiększenia #include w dowolnym nagłówku
  • złożoność - nie jest dobrze znana większości twórców gier, dlatego powoduje, że kod jest nieczytelny
  • wydajność - niektóre koncepcje domyślnie działają wolno, np. shared_ptr

1
boost :: shared_ptr? jak to?
Tili

6
Jeśli dobrze pamiętam, gdzieś przypisuje liczbę referencji na stercie. Jest to bardzo niekorzystne dla spójności pamięci podręcznej podczas użycia, a także oznacza podwojenie czasu alokacji i dezalokacji na początku i na końcu.
Kylotan,

10
(Warto dodać, że użycie make_shared może złagodzić problem.)
Kylotan

Myślę, że ta odpowiedź jest dość jasna, że ​​istnieje więcej powodów, dla których ludzie jej unikają, niż tylko unikanie jednej lub dwóch złych klas.
Kylotan

16

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!


+1 za artykuł. Myślę, że to pięknie odpowiada na pytanie.
egarcia

9
Z mojego doświadczenia wynika, że ​​im bardziej przenośna staje się twoja baza kodu, tym bardziej przepisujesz „standardowe” komponenty, takie jak STL.
Jari Komppa,

6

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:

  • Lubimy tworzyć własne struktury danych specyficzne dla platform, na których wdrażamy
  • Lubimy ograniczać ilość kodu, który nie został opracowany wewnętrznie, którego musimy użyć w naszych projektach, szczególnie gdy ten kod zewnętrzny jest zależny od innych bibliotek opracowanych zewnętrznie.

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ć.


To prawda, zredagowałem moje pytanie, aby to wyjaśnić.
James

5

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.


1
Wiesz, istnieją narzędzia takie jak BCP.
Bartek Banachewicz

2
Czy sugerujesz, że nie musisz utrzymywać własnego kodu? Ponadto chciałbym być tak dobry, aby móc napisać wszystkie części wzmocnienia, których używam w ciągu 2 godzin (co obejmuje również testowanie ich na wszystkich celach kompilacji, których zamierzam użyć, i pisanie testów). Musisz być naprawdę szybkim programistą. Aha, a także „większość użytecznych bitów” równa się tutaj „nie mogę C ++”, ponieważ standardowi wciąż dużo brakuje .
Bartek Banachewicz

2
Na początek kilka funkcji zapewnianych przez boost, znalazłem gdzie indziej w małych, dobrze zdefiniowanych pakietach, na przykład sigc ++. W wielu przypadkach bardziej elegancki i / lub bardziej wydajny. To, co postanowiłem poprawić, dla większości funkcji, takich jak wątki, inteligentne wskaźniki i wyrażenia regularne, które stały się standardem. Przez lata nabyłem zbiór bibliotek stron trzecich i trochę własnego kodu. „Mogę C ++” od ponad 15 lat, dziękuję bardzo.
rioki,

3
@SeanFarrell nie powinieneś być protekcjonalny. Mówisz, że pracujesz w C ++ od 15 lat, a potem w sarkastycznym sarkastycznym komentarzu do Bartka wydaje się, że nie rozumiesz, co Bartek ma na myśli, kiedy mówi „utrzymuj” w połączeniu z „pakietami”. Utrzymanie nie oznacza ich naprawienia. Zwykle oznacza to po prostu aktualizację do nowej wersji lub przechowywanie wersji dla wielu celów. Po prostu dla ciebie.

3
Sigh Boost działa również od razu po wyjęciu z pudełka, a mimo to wspomniałeś o jego utrzymaniu. Nie widzę tutaj twojej logiki.
Bartek Banachewicz

4

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.


5
To prawda i coś, o czym nie myślałem, ale zauważyłem, że wiele osób rozpoczynających grę w C ++ nie chce używać boost / std. Czasami wydaje mi się, że przyspieszenie nauki jest jak nauka zupełnie nowego języka.
James

1
@James To jeden z największych powodów. Odpowiedziałem, mimo że już ją zaakceptowałeś, aby dać mi perspektywę jako kogoś, kto wytrwał, ucząc się, jak sobie radzić, ale nie po pokusie ucieczki.

1

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.


3
To zabawne, ale ulepszenie jest przeznaczone dla osób, które chcą zrobić wszystko, zamiast wymyślać koło.
Bartek Banachewicz

3
Takie jest moje zdanie, ale błędem jest twierdzenie, że „gry są wyjątkowe”. Tak, automatyka przemysłowa w czasie rzeczywistym jest również wyjątkowa. Robię oba i mogę zaświadczyć, że bity, w których miałoby zastosowanie wzmocnienie, bardzo wyraźnie są dość podobne. Mówienie, że są różne, jest ignorancją, ponieważ na marginesie są bardzo różne, ale użycie podstawowego języka jest takie samo. Funkcja sortowania jest zasadniczo taka sama, bez względu na to, co sortujesz. (Z drugiej strony, tylko że możesz, nie oznacza to, że chcesz, zobacz moją odpowiedź.)
rioki

2
Możesz dodać całą warstwę sieciową / multiplayer do swojej gry za pomocą boost :: asio i opracować dla niej własny protokół komunikacyjny. Jest to w 100% całkowicie uzasadniony powód, aby używać boosta, jakąkolwiek grę, którą kiedykolwiek piszesz, wymagającą jakiejkolwiek funkcji sieciowej. „Stawianie własnych” może być świetne, gdy jesteś nowy i musisz się uczyć. Nic w tym złego. Ale na koniec dnia nie będę marnować czasu na pisanie własnej wieloplatformowej asynchronicznej warstwy komunikacyjnej, gdy jest to już zrobione i dobrze.

2
@HaywireSpark Nie ma potrzeby, aby obrażać ludzi. Przeczytałem twój post i nadal się z tobą nie zgadzam. Nawet jeśli używasz „zwykle określonego”, jest to całkowicie nieistotne. Prawie wszystko w trybie boost jest zaprojektowane tak, aby było jak najbardziej przenośne i zmienne. boost :: asio jest bardzo ogólną implementacją i nie jest ukierunkowana na żaden konkretny sposób komunikacji sieciowej. Nie wyobrażam sobie żadnego scenariusza, w którym musiałbym powiedzieć „gee, boost :: asio po prostu nie pasuje do mojego modelu warstwy sieciowej, lepiej wymyślić koło”. Tylko mówię.

2
@HaywireSpark westchnienie. Miłego dnia, kolego. Powinieneś starać się być bardziej otwarty na krytykę. Umiejętność zaakceptowania krytyki jest częścią bycia nauczanym, a jeśli tego nie uczysz, nigdy się nie nauczysz. Nie zaczepiam cię. Każda osoba, która opublikowała Twój komentarz, nie zgodziła się z Tobą. To zwykle dobra wskazówka, że ​​powiedziałeś coś nieprzyjemnego.

0

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.


5
-1: Dla twojego przekonania, że ​​„Boost” nie jest „zoptymalizowaną prędkością i pamięcią”, gdy dosłownie jest kilkadziesiąt bibliotek Boost, wszystkie o różnym stopniu prędkości i wydajności pamięci.
Nicol Bolas,

2
... To jest właśnie powód, dla którego wielu twórców gier unika ulepszenia, a nawet rzuca własnym STL, a także fakt, że duże obciążenie szablonem kompiluje czasy przez dach. Zwłaszcza pamiętaj, że debugowanie opiera się na MSVC, gdzie potrzebujesz absolutnie minimalnej ilości abstrakcji oraz opakowań i generyczności, z którymi możesz uciec, a które są przeciwne do wzmocnienia. Problem nie jest algorytmiczny, ale po prostu to, że Boost nigdy nie był przeznaczony do szybkości gołego dziesięciny. Nikt poza twórcami gier nie chciałby kompromisów, które i tak wymagają.
Sean Middleditch,

2
@seanmiddleditch: Chodzi mi o to, że w Boost jest wiele bibliotek. Niektóre z nich są szybsze i bardziej wydajne pod względem pamięci niż cokolwiek, co można kodować, aby wykonać tę samą pracę, a niektóre nie. Zniesławianie za to całego zestawu bibliotek jest po prostu ignorancją.
Nicol Bolas,

2
Niewiele twórców gier potrafi napisać analizator składni, który jest szybszy niż Boost.Spirit. Podczas gdy istnieje wiele lepszych (łatwiejszych w użyciu) opcji do analizowania kompletnych języków, Spirit bardzo szybko analizuje dobrze ustrukturyzowane ciągi, nawet po prostu przekształcając je w typy danych. Biblioteka Boost.Xpressive jest również bardzo szybka pod względem wyrażeń regularnych. Pamiętaj, że wiele osób pracujących nad Boost to także osoby pracujące w standardowym komitecie C ++ i wiedzą, jak uzyskać optymalną wydajność z C ++ na różnych platformach.
Gerald

5
Często używają metaprogramowania szablonów w sposób, który pozwala na wykonanie dużej części pracy w czasie kompilacji, a nie w czasie wykonywania, co przebije każdą z optymalizacji niskiego poziomu, z których twórcy gier są tak dumni . Widziałem pewne wzrosty wydajności ponad 50-krotnie podczas konwertowania niektórych zadań z niektórych popularnych bibliotek C o wysokiej wydajności w celu użycia odpowiedników Boost.
Gerald
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.