web-dev-qa-db-ja.com

CおよびC ++のパッケージ管理システムがないのはなぜですか?

パッケージ管理システムが存在するプログラミング言語がいくつかあります。

そのようなシステムで他の言語はありますか? CとC++についてはどうですか?(それが主な質問です!)それらにそのようなシステムがないのはなぜですか?そして、yumapt-get、またはその他の一般的なパッケージ管理システム用のパッケージを作成した方がいいのではないですか?

82
m0nhawk

実際、(名声が目立つ)人々の中には、そのようなシステム Ryppl を作成して確立するために懸命に取り組んでいる人もいます。そのようなC++用のシステムを確立することは困難です。それを指示できる単一のプレーヤーがないためです。 --UPDATE:残念ながらそれは放棄されました。

2番目の質問では、通常のパッケージマネージャー(クロスプラットフォームではない)は、開発者の特定のニーズを処理しません。

31
Fabio Fracassi

Cの問題、さらにはC++の問題は、それらがより異種の言語であることだと思います。これらの言語は標準化されていますが、オプションやサポートされる機能のセットが異なるコンパイラが存在します。たとえば、スタックオーバーフローに関するC++に関する質問をGCC/Linuxで完全に機能する例とともに投稿したのを覚えており、誰かが私のコードが非標準であるとすぐに回答を投稿しました。

質問で述べたようなパッケージシステムを使用することは、すべての一般的なオペレーティングシステム上のすべての主要なコンパイラによって均一にサポートされる共通の言語とライブラリを使用することを意味します。たとえば、C++パッケージをダウンロードしたくないが、別のオペレーティングシステムのコンパイラYで開発されたため、コンパイラXのバージョンでコンパイルできないことに気付いたとします。

Makeおよびconfigureスクリプト(Linux、cygwin、その他のUnixフレーバーで一般的に見られる)に基づくシステムが機能することを想像できます。しかし、なぜVisual Studioユーザーはそれを採用する必要があるのでしょうか。 Microsoftコンパイラ(およびライブラリ)に基づくパッケージシステムを起動した場合も同様です。

C++は高速に進化する言語であり、その標準がすべてのコンパイラーによって完全にサポートされるまでには常に時間がかかるという事実は、問題を軽減しません。

17
Giorgio

あなたの質問に答えるために私たちが尋ねる必要がある質問は、「他の言語/エコシステムが独自の集中パッケージリポジトリを持っていることから何を得るのですか?」 「これはC/C++にも当てはまりますか?」

最初の質問への回答は、新しい言語の最初のプロモーションに関係していると思います。アーリーアダプターは、初心者ができるだけ簡単にエコシステムに入り、有用なテスト済みコードを取得し、独自のコードに貢献できるようにしたいと考えています。明らかな理由により、「使用状況グラフ」には常に単一のルート、つまり言語の作成者がいます。通常、少なくとも1つの参照実装が存在するため、共有する可能性のあるすべてのコードはそれに準拠する必要があります。

これにより、ダウンロードしてコンパイルするだけのパッケージを簡単に作成できます。確かに、CまたはC++が2013年に導入された場合、彼らのコミュニティは同様の進化の道をたどることができましたが、彼らは従わなかったし、パッケージマネージャーを適用するための単一の一般的なツールチェーンはありません。これは、そのようなプログラムの実装を面倒にして、面倒なことに値することができません。 (ユーザーにlibfoo-gccとlibfoo-vsのどちらかを選択させる必要がありますか?解決するのはパッケージャーに任せますか?またはビルドプロセスですか?そうであれば、パッケージは通常のtarballとどのように異なりますか?)

したがって、最初の質問に対する私の回答を要約すると、パッケージマネージャーを作成するパターンは、主にadoptionを促進するのに役立つと思います。

そのことを念頭に置くと、CとC++のプログラマーにはニーズが存在しないため、このニーズを満たすために単一のシステムが立ち上がっていない理由を理解するのはかなり簡単だと思います。 CおよびC++コミュニティ(または実際のプログラマコミュニティ)にとって問題となるのは、最初に暗示されている必要性です。つまり、配布し、最新の状態に保ち、コードを提供する必要があります。これは、成功の度合いが異なるさまざまな人々によって何度も解決されており、実際に1つのシステムが大きな市場シェアを獲得しています:git(およびそれ以前のいくつかの他のシステム)。

基本的に問題が異なる場合、解決策も異なって見えますが、入力の違いgem installおよびgit cloneは無意味です。

4
idoby

この質問には少し混乱があります。上記のソフトウェアは、特定のプログラミング言語の拡張機能を管理します。これらは、選択したプログラミング言語でプログラムで使用できるライブラリとソースコードを提供します。

一般的なシステムレベルのパッケージマネージャーは通常、アプリケーションに関係なく使用できるバイナリパッケージを提供します。彼らは、システムとユーザーに向けられています。もちろん、Aptitude、rpm、Entropyのようなシステムレベルのパッケージ管理システムは、バイナリまたはソースコードであるanyパッケージを提供できます。そのため、たとえば...Gemを使用してインストールする拡張機能のほとんどが見つかります。

YumおよびApt-getまたはRigoとして言及したものは、その下のパッケージ管理システムのユーザーインターフェイスだけです。

プログラミング言語のリストのもう1つ:

  • PHP用のComposerとPear
3
Patkos Csaba

これはクロスプラットフォームのソリューションではありませんが、ミックスに追加する必要があります。

CoAppは最近、NuGetを使用したC++パッケージ管理のサポートを発表しました: http://blog.nuget.org/20130426/native-support.html

現在、これはVisual Studioコンパイラーでのみ機能しますが、他のプラットフォームで機能させるための多くの要求がありました。

0
Joe