30 Stimmen

Boost-Abhängigkeit für ein C++-Open-Source-Projekt?

Boost soll sein die nicht standardisierte C++-Bibliothek, die jeder C++-Benutzer verwenden kann. Ist es vernünftig anzunehmen, dass sie für ein Open-Source-C++-Projekt zur Verfügung steht, oder ist die Abhängigkeit zu groß?

45voto

Konrad Rudolph Punkte 503837

Im Grunde läuft Ihre Frage darauf hinaus: "Ist es sinnvoll, [freie Bibliothek xyz] als Abhängigkeit für ein C++ Open-Source-Projekt zu haben?".

Betrachtet man nun das folgende Zitat von Stroustrup, so ist die Antwort eigentlich klar und eindeutig:

Ohne eine gute Bibliothek sind die meisten interessanten Aufgaben nur schwer in C++ schwer zu lösen; aber mit einer guten Bibliothek kann fast jede Aufgabe leicht gemacht werden

Unter der Annahme, dass dies korrekt ist (und meiner Erfahrung nach ist es das), dann ist das Schreiben eines vernünftig großen C++-Projekts ohne Abhängigkeiten ist schlichtweg unvernünftig.

Dieses Argument weiterführend, hat die eine C++-Abhängigkeit (abgesehen von den Systembibliotheken), die vernünftigerweise auf einem Client-System (des Entwicklers) erwartet werden kann, sind die Boost-Bibliotheken. I wissen dass sie es nicht sind, aber es ist keine unvernünftige Vermutung, die eine Software aufstellen sollte.

Wenn sich eine Software nicht einmal auf Boost verlassen kann, kann sie sich auch nicht auf tout Bibliothek.

28voto

Anders Hansson Punkte 3708

Werfen Sie einen Blick auf http://www.boost.org/doc/tools.html . Insbesondere die bcp ist nützlich, wenn Sie Ihre Boost-Abhängigkeiten in Ihr Projekt einbetten möchten. Ein Auszug aus der Website:

"Das Dienstprogramm bcp ist ein Werkzeug zum Extrahieren von Teilmengen von Boost. Es ist nützlich für Boost-Autoren, die ihre Bibliothek getrennt von Boost verteilen möchten, und für Boost-Benutzer, die eine Teilmenge von Boost mit ihrer Anwendung verteilen möchten.

bcp kann auch melden, von welchen Teilen von Boost Ihr Code abhängig ist und welche Lizenzen von diesen Abhängigkeiten verwendet werden."

Das kann natürlich auch Nachteile haben - aber zumindest sollten Sie sich dieser Möglichkeit bewusst sein.

13voto

Diomidis Spinellis Punkte 18162

Früher war ich extrem vorsichtig, wenn es darum ging, Abhängigkeiten in Systeme einzuführen, aber jetzt finde ich, dass Abhängigkeiten keine große Sache sind. Moderne Betriebssysteme verfügen über Paketmanager, die Abhängigkeiten oft automatisch auflösen können oder es zumindest den Administratoren sehr leicht machen, das zu installieren, was benötigt wird. Zum Beispiel ist Boost unter Gentoo-Postage als dev-libs/boost und unter FreeBSD ports als devel/boost verfügbar.

Moderne Open-Source-Software baut in hohem Maße auf anderen Systemen auf. In einer aktuelle Studie Indem wir die Abhängigkeiten der FreeBSD-Pakete verfolgten, stellten wir fest, dass die 12.357 Ports-Pakete in unserem FreeBSD 4.11-System insgesamt 21.135 Bibliotheksabhängigkeiten hatten, d.h. sie benötigten eine andere Bibliothek als die 52 Bibliotheken, die Teil des Basissystems sind, um kompiliert werden zu können. Die Bibliotheksabhängigkeiten umfassten 688 verschiedene Bibliotheken, während die Anzahl der verschiedenen externen Bibliotheken, die von einem einzelnen Projekt verwendet wurden, zwischen 1 und 38 schwankte, mit einem Durchschnittswert von 2. 5.117 Projekte verwendeten mindestens eine externe Bibliothek und 405 Projekte verwendeten 10 oder mehr.

Letztendlich wird die Antwort auf Ihre Frage aus einer Kosten-Nutzen-Analyse hervorgehen. Ist der Nutzen der Wiederverwendung einer ausgereiften, weit verbreiteten, überprüften und getesteten Bibliothek wie Boost größer als die geringen und sinkenden Kosten einer Abhängigkeit? Für jede nicht-triviale Nutzung der Boost-Funktionen lautet die Antwort, dass Sie Boost verwenden sollten.

4voto

Robert Gould Punkte 66858

KDE hängt auch von Boost ab.

Es hängt jedoch hauptsächlich von Ihren Zielen ab und noch mehr von Ihrer Zielgruppe und nicht vom Umfang Ihres Projekts. TinyJSON (ein sehr kleines Projekt) ist zum Beispiel fast 100% Boost, aber das ist in Ordnung, weil die API, die es bietet, Boost-ähnlich ist und auf Boost-Programmierer abzielt, die JSON-Bindungen benötigen. Allerdings verwenden viele andere JSON-Bibliotheken nicht Boost, weil sie andere Zielgruppen ansprechen.

Andererseits kann ich Boost bei der Arbeit nicht verwenden, und ich weiß, dass es vielen anderen Entwicklern (bei ihrer täglichen Arbeit) genauso geht. Man könnte also sagen, wenn Ihr Ziel OpenSource ist und eine Gruppe, die Boost verwendet, dann machen Sie weiter. Wenn Sie auf Unternehmen abzielen, sollten Sie vielleicht darüber nachdenken und nur die notwendigen Teile von Boost kopieren (und deren Unterstützung zusagen), damit Ihr Projekt funktioniert.

  • Edit : Der Grund, warum wir es nicht bei der Arbeit verwenden können, ist, dass unsere Software auf etwa 7 verschiedene Plattformen und Plattformen und 4 Compilern portabel sein muss. Also können wir Boost nicht verwenden, weil es nicht bewiesen hat, dass es mit all unseren all unseren Zielen kompatibel ist, der Grund ist also ein ein technischer Grund. (Wir haben kein Problem mit dem OpenSource- und Boost-Lizenz-Teil, da wir Boost gelegentlich für andere Dinge verwenden manchmal)

4voto

Das kommt darauf an. Wenn Sie eine Header-Datei nur definierte Klasse Vorlage in Boost - dann ja gehen Sie vor und verwenden Sie es, weil es nicht in jedem Boost Shared Library saugen, da der gesamte Code zur Kompilierzeit ohne externe Abhängigkeiten generiert wird. Versionierung Probleme sind ein Schmerz für jede freigegebene C++-Bibliothek, und Boost ist nicht immun gegen diese, so dass, wenn Sie das Problem ganz vermeiden können, es ist eine gute Sache.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X