Warum verwenden C ++ - Spieleentwickler die Boost-Bibliothek nicht? [geschlossen]

81

Wenn Sie also Zeit damit verbringen, Fragen zu Stack Overflow unter dem C ++ - Tag anzuzeigen / zu beantworten , werden Sie schnell feststellen, dass fast jeder die Boost- Bibliothek verwendet. Einige würden sogar sagen, dass Sie nicht "echtes" C ++ schreiben, wenn Sie es nicht verwenden (ich bin anderer Meinung, aber das ist nicht der Punkt).

Aber es gibt auch die Spielebranche, die dafür bekannt ist, C ++ und nicht Boost zu verwenden. Ich frage mich, warum das so ist. Ich möchte Boost nicht verwenden, weil ich Spiele (jetzt) ​​als Hobby schreibe. Ein Teil dieses Hobbys besteht darin, das zu implementieren, was ich brauche, wenn ich in der Lage bin und handelsübliche Bibliotheken zu verwenden, wenn ich nicht kann. Aber das bin nur ich.

Warum nutzen Spieleentwickler die Boost-Bibliothek im Allgemeinen nicht? Ist es Leistung oder Gedächtnisbedenken? Stil? Etwas anderes?

Ich wollte dies beim Stapelüberlauf fragen, aber ich dachte, die Frage ist hier besser gestellt.

EDIT:

Mir ist klar, dass ich nicht für alle Spieleprogrammierer sprechen kann und nicht alle Spieleprojekte gesehen habe. Daher kann ich nicht sagen, dass Spieleentwickler niemals Boost verwenden. Das ist einfach meine Erfahrung.

Gestatten Sie mir, meine Frage zu bearbeiten und zu fragen, warum Sie Boost gewählt haben, wenn Sie Boost verwenden?

James
quelle
2
Wäre es fair zu sagen, dass "Boost" eine viel zu große Sammlung von Bibliotheken ist, um "use boost" oder "don't use boost" zu einer fairen Wahl zu machen? Selbst Google beschränkt sich meiner Meinung nach auf eine kleine Untergruppe von "Boost" -Standards.
Dan Olson
Spiel-Binärdateien sind bereits massiv genug.
Legion
3
@Tetrad STL ist kein Boost, und STL wird in Gamedev häufig verwendet.
Rootlocus
7
Ich sehe wirklich nicht, wo die Frage "nicht konstruktiv" ist, das müsste erklärt werden.
v.oddou

Antworten:

42

Einige Entwickler tun dies, andere nicht (in Spielen und anderswo). Dies hängt davon ab, welche Bedürfnisse / Anforderungen diese Entwickler haben und welche vorhandene Technologie sie nutzen müssen.

C ++ 's - Standardbibliothek ist oft die gleiche Behandlung gegeben, und die Leute fragen sich oft die gleiche Sache , die Sie sich fragen , es auch. Die meisten Gründe sind ähnlich, zum Beispiel:

  • Ein Entwickler verfügt möglicherweise bereits über eine interne Funktionsbibliothek, die dieselben Dienste bereitstellt wie die Standardbibliothek oder Boost. Solche in-house - Bibliotheken wurden oft schon vor langer Zeit geschrieben, als für die Standard - Bibliothek Unterstützung bei der Umsetzung war schwach und Boost - war im Grunde nicht existent, so dass sie mehr oder weniger hatten geschrieben werden. In diesem Szenario lohnt es sich normalerweise nicht, von der internen Funktionalität abzuweichen. Dies wäre ein erheblicher Portierungsaufwand, der viel Code destabilisiert und fast keinen Nutzen bringt.

  • Ein Entwickler arbeitet möglicherweise auf Plattformen, auf denen die Compilerunterstützung für die von Boost genutzten fortgeschrittenen C ++ - Techniken nicht gut unterstützt wird, sodass der Boost-Code überhaupt nicht kompiliert wird oder nur eine geringe Leistung erbringt. Dies gilt auch für die Standardbibliothek, wenngleich dies heutzutage noch viel weniger der Fall ist.

  • Boost und die Standardbibliothek der Sprache dienen allgemeinen Zwecken, und obwohl dies für die meisten Anwendungen in Ordnung und gut ist, hat ein Entwickler manchmal spezielle Anforderungen, die von spezielleren Containern besser erfüllt werden können.

Ich denke, obiges sind zwei vernünftige Gründe, obwohl es sicherlich andere gibt. Sie müssen jedoch vorsichtig sein, da viele Gründe dafür sprechen, Boost, die Standardbibliotheken oder irgendetwas anderes zu vermeiden, was auf das "hier nicht erfundene" Syndrom hinausläuft, was ein Hinweis darauf sein kann , dass der Grund in der Praxis nicht sehr gut begründet ist.

Denken Sie auch daran, dass sich die Anforderungen eines großen Studios in der Regel stark von den Anforderungen eines einzelnen Entwicklers unterscheiden. Zum Beispiel hat ein einzelner Entwickler wahrscheinlich weniger Legacy-Code, der gewartet werden muss, und daher ist die Portierung von einer selbst erstellten Version von Boost oder der Standardbibliotheksfunktionalität möglicherweise nicht so zeitaufwändig und erspart diesem Entwickler die Wartung dieser Code wird in Zukunft so umfangreich sein - und damit meinen ersten Aufzählungspunkt ungültig machen.

Am Ende geht es darum, Ihre Anforderungen und Ihren Zeitaufwand anhand Ihres gewünschten Ziels zu bewerten und zu bestimmen, welche Option Ihren Anforderungen am besten entspricht. Entwickler, die Boost oder die Standardbibliothek nicht verwenden, haben dies normalerweise getan und sind zu diesem Schluss gekommen - vielleicht auch Sie und vielleicht nicht.

Josh
quelle
2
Ein weiterer Punkt: Einige Unternehmen verwenden Boost nicht, da sich dies negativ auf die Kompilierungsgeschwindigkeit in einer hochgradig interaktiven Entwicklungsumgebung auswirkt.
Steven
27

Bearbeiten Zurückkehren zu dieser Frage nach ein paar Jahren
Nachdem ich immer mehr Boost-Bibliotheken verwendet habe, dachte ich, ich würde diese Frage aktualisieren, um ein solides Argument dafür zu liefern, warum Sie Boost verwenden sollten, wenn die Beschreibung des Produkts mit Ihrer gewünschten Funktionalität übereinstimmt. Dies wird auch Neinsager überzeugen. Laden Sie openSSL herunter und versuchen Sie, damit eine Client- und eine Serveranwendung zu erstellen. Versuchen Sie nun, dies auf jeder Plattform zu ermöglichen. Laden Sie dann boost :: asio :: ssl herunter und verwenden Sie es, um dieselbe Anwendung zu erstellen. Wenn Sie nicht überzeugt sind, dass Boost der richtige Ort ist, um nach sauberem, gut optimiertem, von Fachleuten geprüften, plattformübergreifenden Code zu suchen, werden Sie in dieser einfachen Übung konvertiert.

Tl; dr version:

Meiner Meinung nach gibt es nicht viele kleine und mittelständische Entwicklungsunternehmen, die Boost einsetzen, da es sich um eine massive und mächtige wilde Bestie handelt, die nicht einfach zu zähmen ist und Sie im Grunde genommen auf sich allein gestellt sind, wenn Sie versuchen zu lernen, wie um es zu benutzen. Die Dokumentation fehlt in einigen Punkten (siehe lange Version) und "die Community" um das Projekt herum scheint entweder zu fehlen, verstreut oder inaktiv (im Vergleich zu anderen Projekten).

Sehr langwierige Version:

Mir ist klar, dass es bereits eine akzeptierte Antwort gibt, aber als jemand, der Boost in fast jedem Projekt verwendet, dachte ich, ich würde eine Antwort posten.

Ich erinnere mich, als ich zum ersten Mal in Boost herumstocherte und ehrlich gesagt keine Ahnung hatte, was los war. Boost ist überhaupt nicht gut dokumentiert. Die Leute sind sich vielleicht nicht einig darüber, dass ich mir sicher bin, dass es Unmengen von Codebeispielen und Kommentaren und dergleichen gibt, aber es ist alles sehr kalt und vage und auch schwierig zu navigieren.

Außerdem scheint es schwierig zu sein, einen Ort zu finden, an dem Sie das Gefühl haben, die "Community" rund um das Projekt gefunden zu haben. Tatsächlich scheint die Gemeinschaft nicht existent oder nomadisch zu sein. Leider wurde sogar ihre Mailingliste von so vielen Blutegelstellen durchsucht, dass Sie dieses Kaninchenloch hinunterfahren und immer wieder dorthin zurückkehren können, wo Sie angefangen haben.

Diese beiden Faktoren machen das Erlernen der Verwendung von Boost-Bibliotheken zu einer ziemlich entmutigenden Aufgabe. Auch wenn die technischen Details für die Verwendung von boost nicht allzu komplex sind, handelt es sich um eine riesige Sammlung von Bibliotheken, mit denen Sie nur ein paar Codefragmente und verstreute Teile der Mailingliste aus den dunkelsten Ecken des Internets anzeigen können ... Nun, Sie haben die Idee.

Ich fing an, Boost um Version 1.45 herum zu basteln, und erst in Version 1.52 / 1.53 fühle ich mich wohl genug, um es in der Produktion zu verwenden. Es gibt so viele Dinge, an die Sie sich gewöhnen und die Sie sich merken müssen, auch einfache Dinge wie das Konfigurieren von boost und das Speichern dieser Konfiguration, da die Art und Weise, wie die Bibliotheken erstellt werden und funktionieren, je nach Ihren Vorlieben während der Kompilierung aufgrund der anpassbaren Dinge stark variieren kann sind.

Allerdings , keinen Fehler machen , wenn Sie Schub ausüben können, haben Sie eine mächtige Waffe gewonnen zum schnellen Aufbau solide, plattformübergreifende Programme. Nehmen Sie boost::asiozum Beispiel. Sie können einen immens leistungsstarken, skalierbaren und plattformübergreifenden asynchronen Webserver in nur ein paar hundert Zeilen schreiben. Ich habe im Laufe der Jahre mehrere Clients, Server, Proxys usw. mit jeweils nur ein paar hundert Codezeilen geschrieben, die mir bisher nicht gelungen sind, und kann sie innerhalb von Minuten von Plattform zu Plattform portieren.

Wie andere bereits betont haben, sind größere Unternehmen in der Regel mit Legacy-Dingen beschäftigt oder rollen gerne ihre eigenen, was ich völlig verstehe. Es gibt auch dieses wirklich dumme Ding, von dem ich gehört habe und auf das ich gestoßen bin, wo Entwickler und / oder Projektmanager die Verwendung von Boost verbieten, weil es "zu groß" ist. Ich vermute, dass sie glauben, dass Boost eine einzige Bibliothek ist, oder sie haben noch nie von BCP gehört .

Was das WARUM betrifft, wähle ich Boost

Ich würde sagen, ich benutze es, weil es, wie Sie in Ihrer Frage implizieren, "die" C ++ - Bibliothek ist. Boost wird in der C ++ - Welt als das Schweizer Taschenmesser für Dinge angesehen, die Sie irgendwann brauchen werden. Die Idee ist also, dass es bei Bedarf eine leistungsstarke und tragbare Version von Boost geben sollte. Große Unternehmen tragen dazu bei , sehr gut ausgebildete Menschen mit beeindruckenden Lebensläufen beizutragen und sie zu pflegen , und wenn ein neuer Standard für C ++ entwickelt wird, versuchen die Menschen in der Regel zu fördern, welche Teile davon ISO-standardisiertes C ++ werden sollten.

Wenn ich also Funktionen hinzufügen möchte, für die es wahrscheinlich eine vorhandene Bibliothek gibt, werde ich zunächst nach Boost suchen, nur weil ich ziemlich sicher bin, dass sie optimiert und portabel sind und für die sie unterstützt und gewartet werden Eine sehr lange Zeit und Fehler werden gefunden und behoben. In der Open-Source-Welt können diese Qualitäten sehr schwer zu bekommen sein.


quelle
Sehr richtig was die Dokumentation angeht. In den Dokumenten zu Boost.asio wird beispielsweise in überraschend wenigen Zeilen erklärt, wie man einen HTTP-Server schreibt. Das ist großartig, wenn Ihr Spiel http (oder ein anderes Vanilla-TCP-Protokoll) verwendet, aber es wird viel schwieriger, wenn Sie es verwenden möchten ein benutzerdefiniertes Protokoll oder eine proprietäre Netzwerkbibliothek. Ich brauchte 20 Minuten, um zu verstehen, wie ein Websocket-Server mit boost.asio erstellt wird, aber Wochen, um zu verstehen, wie ENet ( enet.bespin.org ) über einen benutzerdefinierten boost.asio io_service verwendet wird.
ClosetGeek
21

Wir haben ein bisschen Boost an unserem alten Arbeitsplatz verwendet. Die Hauptgründe dafür, es größtenteils zu vermeiden und seine Verwendung einzuschränken, waren:

  • Kompilierzeiten - einige davon sind sehr langsam zu kompilieren, und Sie zögern am Ende, boost #includes in einem Ihrer Header zu haben
  • Komplexität - es ist den meisten Spielentwicklern nicht bekannt und führt daher zu unlesbarem Code
  • Leistung - einige der Konzepte arbeiten standardmäßig langsam, z. shared_ptr
Kylotan
quelle
1
boost :: shared_ptr? Wie das?
Tili
6
Wenn ich mich richtig erinnere, wird der Referenzzähler auf dem Heap irgendwo zugewiesen. Dies ist sehr schlecht für die Cache-Kohärenz während der Verwendung und bedeutet auch, dass die Zuweisungs- und Freigabezeit zu Beginn und am Ende verdoppelt wird.
Kylotan
10
(Es lohnt sich hinzuzufügen, dass die Verwendung von make_shared das Problem lindern kann.)
Kylotan
Ich denke, diese Antwort ist ziemlich klar, dass es mehr Gründe gibt, die die Leute vermeiden, als nur ein oder zwei schlechten Klassen auszuweichen.
Kylotan
16

Dasselbe wird (wurde?) Für die STL "Standard" gesagt. Dieser Artikel befasst sich mit EASTL, einer internen Neufassung von (Teilen von) STL von Electronic Arts, um den Anforderungen der Spieleentwicklung gerecht zu werden, die sich von denen der "allgemeineren" Anwendungsentwicklung unterscheiden.

Vielleicht schreibt jemand irgendwo (Teile von) boost neu, um seinen Bedürfnissen bei der Spieleentwicklung gerecht zu werden!

Herr Shunz
quelle
+1 für den Artikel. Ich denke, das beantwortet die Frage wunderbar.
Egarcia
9
Meine Erfahrung ist, dass je portabler Ihre Codebasis wird, desto mehr Sie "Standard" -Komponenten wie STL umschreiben.
Jari Komppa
6

Wer sagt, dass sie Boost nicht verwenden? Ich kenne ein oder zwei C ++ - Engines, die Boost verwendet haben. Ich habe noch nie direkt mit ihnen gearbeitet. Aber das liegt hauptsächlich daran, dass meine Erfahrung in Unreal liegt.

Ich habe festgestellt, dass Boost aus folgenden Gründen nicht verwendet wird:

  • Wir rollen gerne unsere eigenen Datenstrukturen, die für die Plattformen spezifisch sind, auf denen wir bereitstellen
  • Wir begrenzen gerne die Menge an nicht intern entwickeltem Code, die wir in unseren Projekten verwenden müssen, insbesondere wenn dieser externe Code von anderen extern entwickelten Bibliotheken abhängt.

Im Grunde läuft es darauf hinaus: Eine allgemeine Lösung ist nicht immer die "richtige Lösung".

Ich bin mir sicher, dass jemand, der tatsächlich mit der Bibliothek gearbeitet hat, einen besseren Kommentar abgeben könnte.

AA Grapsas
quelle
Stimmt, meine Frage wurde bearbeitet, um dies zu berücksichtigen.
James
5

Ich bleibe bei StackOverflow und verwende keinen Boost. Ich werde meinen Grund hinzufügen, weil es einer ist, der noch nicht erwähnt wird.

Boost hat wirklich viele großartige Ideen. Ich schaue mir gerne an, was sie getan haben und probiere neue Dinge und Ideen aus. Sie sind großartig, weil sie den Nährboden für viele C ++ - Verbesserungen bilden.

Aber der Schub ist aus vielen Gründen ein sehr unhandliches Tier. Einer der Gründe ist, dass sie auf praktisch jedem Compiler mit allen Macken kompatibel sein müssen (wollen). Infolgedessen müssen sie viele Tricks anwenden, wie z. B. MPL, um dies zu erreichen. Zum Beispiel wollte ich (vor langer Zeit) das shared_ptr verwenden, um es zum Laufen zu bringen, brauche ich die Quellen und Bibliotheken, die sich wie 90% von boost anfühlten. Am Ende schrieb ich meine eigenen; 50 lesbare Codezeilen. (Meine Anforderungen waren strenger, wie z. B. kein weak_ptr oder Thread-Sicherheit.)

Oft braucht man eine wirklich kleine Teilmenge an Boost, aber die Integration der gesamten Boost-Funktion lohnt sich einfach nicht.

Bearbeiten :

Nur zu machen ist klar, da es offenbar nicht klar rübergekommen ist (dh downvote). Ich benutze keine Drittanbieter - Bibliotheken verwenden. In den meisten Fällen ist die andere Drittanbieterbibliothek schneller und sauberer, wenn alle Dinge gleich sind und eine Drittanbieterbibliothek oder einen Boost integriert wird. Der Rest wird in "2h" Fingerübung gemacht. Ich sehe mir die Frage zum Bauen oder Kaufen sehr genau an.

Rioki
quelle
1
Es gibt Tools wie BCP, weißt du?
Bartek Banachewicz
2
Wollen Sie damit andeuten, dass Sie keinen eigenen Code pflegen müssen? Außerdem wünschte ich mir, ich wäre so gut, wenn ich in der Lage wäre, alle Teile des Boosts, den ich verwende, in 2 Stunden zu schreiben. Sie müssen ein sehr schneller Programmierer sein. Oh, und auch "die meisten nützlichen Bits" sind hier ziemlich gleich "Ich kann nicht C ++", weil es dem Standard immer noch an viel fehlt .
Bartek Banachewicz
2
Für den Anfang ein paar Features von Boost, fand ich an anderer Stelle in kleinen, gut definierten Paketen, zum Beispiel sigc ++. In vielen Fällen eleganter und / oder effizienter. Was ich für die meisten Funktionen wie Threads, intelligente Zeiger und reguläre Ausdrücke verbessert habe, haben es in den Standard geschafft. Im Laufe der Jahre habe ich eine Sammlung von Bibliotheken von Drittanbietern und eigenen Code erworben. "Ich kann C ++" seit über 15 Jahren, vielen Dank.
Rioki
3
@ SeanFarrell Sie sollten nicht herablassend sein. Sie sagen, Sie machen C ++ seit 15 Jahren und in einem kurzen sarkastischen Kommentar zu Bartek scheinen Sie nicht zu verstehen, was Bartek bedeutet, wenn er in Verbindung mit "Paketen" "pflegen" sagt. Wartung bedeutet nicht, sie zu reparieren. Das einfache Aktualisieren auf eine neue Version oder das Speichern von Versionen für mehrere Ziele ist normalerweise das, was dies bedeutet. Nur zu deiner Information.
3
Sigh Boost funktioniert auch sofort, aber Sie haben immer noch erwähnt, dass Sie es beibehalten. Ich verstehe deine Logik hier nicht.
Bartek Banachewicz
4

In unserem Fall (keine Spiele) gibt es einen guten Grund, warum wir weder Boost (noch Standard) verwenden: Wir haben eine Menge Code, der ein Jahrzehnt zurückliegt. Laut den Senioren waren Standard und Boost entweder unvollständig, voller Fehler oder einfach zu langsam für die von uns benötigten Hochleistungs-Dinge. Daher wurden einige Basisklassen mit denselben Konzepten (z. B. Iteratoren) implementiert und häufig für unsere Algorithmen optimiert. Heutzutage sind sich alle drei Bibliotheken (unsere, std und boost) sehr ähnlich.

Aber wollen wir all unseren Code portieren? Nicht wirklich. Ich gehe davon aus, dass viele andere Unternehmen vor dem gleichen Dilemma stehen. Schreiben Sie entweder viel getesteten und funktionierenden Code um oder verwenden Sie nicht std / boost.

Kdansky
quelle
5
Dies ist wahr und etwas, woran ich nicht gedacht habe, aber ich habe bemerkt, dass es vielen Leuten, die mit der Spieleentwicklung in C ++ beginnen, egal ist, boost / std zu verwenden. Manchmal habe ich das Gefühl, dass es so ist, als würde man eine ganz neue Sprache lernen.
James
1
@ James Dies ist so ziemlich einer der größten Gründe. Ich habe eine Antwort gepostet, obwohl Sie bereits eine angenommen haben, um meine Sichtweise als jemand darzustellen, der beharrlich gelernt hat, wie man mit Boost umgeht, aber nicht, nachdem er versucht war, davonzulaufen.
1

Ich persönlich benutze Boost oder keinen anderen Allzweckcode, wenn ich Spiele mache, da Spiele nicht allgemeiner Natur sind. Die Art von Code, die Sie möglicherweise benötigen, um ein Spiel zu implementieren, ist normalerweise spezifisch für die Spieleentwicklung, nicht immer, aber wie 98% (zufällige Zahl) der Zeit. Sie können die letzten paar Codebits von boost oder einer anderen Bibliothek anheften, aber es ist wahrscheinlich besser, nur den kleinen Teil aufzuschreiben, den Sie hier und da benötigen.

Ich halte es für ziemlich lustig, eigenen Code in c ++ zu schreiben, weshalb ich Boost oder ähnliches noch nie verwendet habe.

Haywire Spark
quelle
3
Es macht Spaß, aber Boost ist für Leute gedacht, die es nicht nur neu erfinden, sondern auch tun wollen.
Bartek Banachewicz
3
Dies ist meine Meinung, aber es ist ein Trugschluss zu sagen, dass "Spiele etwas Besonderes sind". Ja, die Automatisierung der Echtzeitbranche ist auch etwas Besonderes. Ich mache beides und kann bestätigen, dass die Bits, bei denen Boost angewendet werden würde, sehr deutlich ähnlich sind. Zu sagen, dass sie unterschiedlich sind, ist Unwissenheit, denn am Rande sind sie sehr unterschiedlich, aber die Kernsprache ist dieselbe. Eine Sortierfunktion ist im Grunde die gleiche, egal was Sie sortieren. (
Andererseits
2
Mit boost :: asio können Sie Ihrem Spiel die gesamte Netzwerk- / Multiplayer-Ebene hinzufügen und Ihr eigenes Kommunikationsprotokoll dafür erfinden. Dies ist ein zu 100% gültiger Grund, warum Sie Boost verwenden sollten. Dies ist jedes Spiel, das Sie jemals geschrieben haben und das jede Art von Netzwerkfunktion benötigt. "Rolling your own" kann großartig sein, wenn Sie neu sind und lernen müssen. Daran ist nichts auszusetzen. Aber am Ende des Tages werde ich keine Zeit damit verschwenden, meine eigene plattformübergreifende asynchrone Kommunikationsschicht zu schreiben, wenn dies bereits geschehen ist.
2
@ HaywireSpark Es besteht keine Notwendigkeit, Menschen zu beleidigen. Ich habe Ihren Beitrag gelesen und bin immer noch nicht einverstanden mit Ihnen. Auch wenn Sie mit "normalerweise spezifisch" gehen, ist das völlig irrelevant. Fast alles in Boost ist so tragbar und wandelbar wie möglich. boost :: asio ist eine sehr generische Implementierung und nicht auf eine bestimmte Art der Netzwerkkommunikation ausgerichtet. Ich kann mir kein Szenario vorstellen, in dem ich sagen müsste "gee, boost :: asio passt einfach nicht zu meinem Netzwerk-Schichtenmodell, ich erfinde das Rad besser neu". Ich sage es nur.
2
@ HaywireSpark seufzen. Ich wünsche dir einen schönen Tag, Kumpel. Sie sollten versuchen, offener für Kritik zu sein. Kritik akzeptieren zu können, gehört dazu, belehrbar zu sein, und wenn man nicht belehrbar ist, lernt man nie etwas. Ich picke nicht auf dich. Jede Person, die in Ihrem Kommentar gepostet hat, ist mit Ihnen nicht einverstanden. Das ist normalerweise ein guter Hinweis darauf, dass Sie etwas Unangenehmes gesagt haben.
0

Vermächtnis in Hausbibliotheken ist kein Faktor ... der Hauptgrund, warum jemand Boost nicht verwenden sollte, ist, dass sie nicht für Geschwindigkeit und Speicher optimiert sind, obwohl Cryengine die STL verwendet, aber sie kompilieren Es handelt sich um eine Open-Source-Version mit dem Namen STLPort. Haben Sie also keine Angst vor der Verwendung der STL. Implementieren Sie einfach Ihre benutzerdefinierten Allokatoren, und Sie werden in Ordnung sein. benutze keinen Boost tho.

Piporron
quelle
5
-1: Für Ihre Überzeugung, dass "Boost" "nicht für Geschwindigkeit und Speicher optimiert" ist, wenn es buchstäblich Dutzende von Boost-Bibliotheken gibt, die alle unterschiedliche Grade an Geschwindigkeit und Speichereffizienz aufweisen.
Nicol Bolas
2
... Das ist der Grund, warum einige Spieleentwickler Boost vermeiden und sogar ihre eigene STL rollen, zusammen mit der Tatsache, dass die starke Template-Nutzung die Kompilierzeiten durch das Dach treibt. Beachten Sie insbesondere, dass Debug-Builds auf MSVC basieren, bei denen Sie ein Minimum an Abstraktion, Wrapper und Generizität benötigen, die Boost entgegenstehen. Das Problem ist nicht algorithmisch, sondern einfach, dass Boost nie für den bloßen Zehnten der Metal-Geschwindigkeit gedacht war. Niemand außer den Spielentwicklern möchte die Kompromisse, die sowieso erforderlich sind.
Sean Middleditch
2
@seanmiddleditch: Mein Punkt ist, dass es in Boost viele Bibliotheken gibt . Einige von ihnen sind schneller und speichereffizienter als alles, was Sie für die gleiche Aufgabe programmieren können, andere nicht. Den gesamten Bibliotheksbestand dafür zu verunglimpfen, ist einfach unwissend.
Nicol Bolas
2
Es gibt nicht viele Spieleentwickler, die einen Parser schreiben können, der schneller ist als Boost.Spirit. Während es viele bessere (einfacher zu verwendende) Optionen zum Parsen vollständiger Sprachen gibt, kann Spirit sehr schnell gut strukturierte Zeichenfolgen analysieren, selbst wenn es nur darum geht, Zeichenfolgen in Datentypen zu konvertieren. Die Boost.Xpressive-Bibliothek ist auch für reguläre Ausdrücke sehr schnell. Bedenken Sie, dass viele der an Boost arbeitenden Personen auch im C ++ - Standardkomitee arbeiten und wissen, wie Sie plattformübergreifend eine optimale Leistung von C ++ erzielen.
Gerald
5
Sie verwenden häufig Template-Metaprogramme, die es ermöglichen, einen Großteil der Arbeit zur Kompilierungszeit zu erledigen, anstatt zur Laufzeit. Das ist der Hammer unter den Laufzeitoptimierungen auf niedriger Ebene, auf die Spieleentwickler so stolz sind . Beim Konvertieren bestimmter Aufgaben aus einigen gängigen Hochleistungs-C-Bibliotheken zur Verwendung der Boost-Entsprechungen wurden einige Leistungssteigerungen von über dem 50-fachen festgestellt.
Gerald