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?
Antworten:
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.
quelle
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::asio
zum 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
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:
quelle
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!
quelle
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:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle