質問

ブーストの目的は すべての C++ ユーザーが使用できる、標準以外の C++ ライブラリ。オープンソース C++ プロジェクトで利用できると考えるのが妥当でしょうか、それとも依存関係が大きすぎますか?

役に立ちましたか?

解決

基本的にあなたの質問は、「[無料ライブラリ xyz] を C++ オープン ソース プロジェクトの依存関係として持つのは合理的か?」ということになります。

次に、Stroustrup 氏の次の引用を考えてみましょう。その答えは非常に簡単です。

良いライブラリがなければ、最も興味深いタスクはC ++で行うのが難しいです。しかし、優れたライブラリがあれば、ほぼすべてのタスクを簡単に行うことができます

これが正しいと仮定すると (私の経験では正しいです)、適度なサイズの C++ プロジェクトを作成します。 それなし 依存関係はまったく不合理です。

この議論をさらに発展させると、 1つ (開発者の) クライアント システムで合理的に予期される (システム ライブラリを除く) C++ 依存関係は、Boost ライブラリです。私 知る そうではないかもしれませんが、ソフトウェアがそれを行うのは不当な推定ではありません。

Boost にさえ依存できないソフトウェアは、Boost にも依存できません。 どれでも 図書館。

他のヒント

を見てみましょう http://www.boost.org/doc/tools.html. 。具体的には、 BCP このユーティリティは、プロジェクトにブースト依存関係を埋め込みたい場合に便利です。Web サイトからの抜粋:

「bcp ユーティリティは Boost のサブセットを抽出するためのツールで、ライブラリを Boost とは別に配布したい Boost 作成者や、アプリケーションと一緒に Boost のサブセットを配布したい Boost ユーザーにとって便利です。

bcp は、コードが Boost のどの部分に依存しているか、およびそれらの依存関係でどのライセンスが使用されているかについてもレポートできます。

もちろん、これにはいくつかの欠点がある可能性がありますが、少なくともその可能性があることを認識しておく必要があります。

以前はシステムに依存関係を持ち込むことに非常に慎重でしたが、今では依存関係は大したことではないことがわかりました。最近のオペレーティング システムには、依存関係を自動的に解決できるパッケージ マネージャーが付属しており、少なくとも、管理者が必要なものを非常に簡単にインストールできるようになります。たとえば、Boost は Gentoo-Postage では dev-libs/boost として、FreeBSD ポートでは devel/boost として利用できます。

最新のオープンソース ソフトウェアは、多くの部分を他のシステム上に構築しています。で 最近の研究, FreeBSD パッケージの依存関係を追跡することにより、FreeBSD 4.11 システムの 12,357 個のポート パッケージには合計 21,135 個のライブラリ依存関係があることが判明しました。つまり、コンパイルするには、基本システムの一部である 52 のライブラリ以外のライブラリが必要でした。ライブラリの依存関係は 688 の異なるライブラリで構成されていますが、単一のプロジェクトで使用される異なる外部ライブラリの数は 1 ~ 38 の間で変化し、モード値は 2 でした。さらに、5,117 プロジェクトが少なくとも 1 つの外部ライブラリを使用し、405 プロジェクトが 10 以上の外部ライブラリを使用しました。

最終的に、あなたの質問に対する答えは、コストと利益の分析から得られます。Boost のような成熟し、広く使用され、レビューされ、テストされているライブラリを再利用する利点は、依存関係の低コストと低下コストより大きいでしょうか?Boost の機能を重要な用途で使用する場合、その答えは、Boost を使用する必要があるということです。

場合によります。Boost でヘッダー ファイルのみが定義されたクラス テンプレートを使用している場合は、はい、そのまま使用してください。これは、すべてのコードが外部依存関係なしでコンパイル時に生成されるため、Boost 共有ライブラリを取り込まないためです。バージョン管理の問題は、共有 C++ ライブラリにとって厄介な問題であり、Boost もこの問題を免れないわけではないため、問題を完全に回避できればそれは良いことです。

KDE も Boost に依存します。

ただし、それは主にあなたの目標に依存し、プロジェクトの範囲ではなく、さらに対象となる聴衆に依存します。たとえば、TinyJSON (非常に小さなプロジェクト) はほぼ 100% Boost ですが、提供される API は Boost に似ており、JSON バインディングを必要とする Boost プログラマをターゲットとしているため、これで問題ありません。ただし、他の多くの JSON ライブラリは他のユーザーを対象としているため、Boost を使用しません。

一方で、私は仕事で Boost を使用できません。また、他の多くの開発者 (本業で) が同じ状況にあることも知っています。したがって、ターゲットがオープンソースで、Boost を使用するグループの場合は、先に進んでください、と言えると思います。エンタープライズをターゲットにしている場合は、よく考えて、プロジェクトが機能するために必要な部分だけを Boost からコピーして貼り付けて (そしてそのサポートにコミットして) ください。

  • 編集: 職場で使用できない理由は、ソフトウェアが約7つの異なるプラットフォームと4つのコンパイラにまたがる必要があるためです。そのため、すべてのターゲットと互換性があることが証明されていないため、Boostを使用できないため、その理由は技術的なものです。(OpenSourceとBoostライセンスの部分では問題ありません。

C++ コードを作成するときにブーストを使用する利点は、オープン ソース コードの配布による余分な複雑さを大幅に上回るということです。

私は取り組んでいます プログラマーのメモ帳 そして、コードはテスト用のブースト、スマート ポインター、Python 統合に依存します。この要件に起因する苦情がいくつかありましたが、ほとんどの場合、コードに取り組みたい場合はそのまま続行するでしょう。ブースト依存性を選択したことは、私にとって一度も後悔したことのない決断でした。

他の人にとって複雑さを少し軽減するために、boost Python 用のバージョン管理済みのビルド済みライブラリを含めています。これにより、他の人はインクルード ディレクトリに boost を提供するだけで済みます。

私ならそうだと思います。両方 マンドリバ (レッドハット ベース) および Ubuntu (デビアン ベース)には Boost ライブラリのパッケージがあります。

Boost が提供する広範な機能と、あなたが言うように、Boost は標準の非標準 C++ ライブラリであるため、依存関係として正当化されると思います。

残念ながら、はい、ubuntu では簡単に入手できますが、RHEL 4 と 5 では、ほとんどの場合、tarball から作成することになります。素晴らしい図書館です、本当に大きいです...本当に必要なのは画びょうだけの場合に、レールスパイクを使用するのと同じです。

それはすべて、Boost をどのように使用するかによって異なります。Diomidis が言ったように、Boost の重要な施設を使用する場合は、そのまま使用してください。図書館の利用は犯罪ではありません。

もちろん、新しい依存関係の導入には常に何らかの欠点や余分な心配があるため、Boost を使用したくない人もたくさんいますが、オープンソース プロジェクトでは...私の意見では、単に学びたい、またはスキルを向上させたいだけであれば、それらを使用しても問題ありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top