なぜC ++ライブラリの使用がそれほど複雑なのですか?


14

まず第一に、私はC ++が大好きで、JavaよりもC ++でコーディングする方が簡単だと思う人の1人です。1つの小さなことを除いて:ライブラリ。

Javaでは、ビルドパスにjarを追加するだけで完了です。

C ++では、通常、ヘッダーファイルとライブラリ自体に複数のパスを設定する必要があります。場合によっては、特別なビルドフラグを使用する必要さえあります。私は主にVisual Studio、コードブロックを使用しましたが、IDEはまったく使用していません。外部ライブラリの使用について話すとき、3つのオプションすべてに大きな違いはありません。

なぜこれに代わるシンプルな代替手段がなかったのだろうか?IDEがビルドフラグを設定するためのすべての作業を行うことができるように、必要なものがすべて1か所にある特別な.zipファイルがあるように。これには技術的な障壁はありますか?

回答:


15

C ++は、オブジェクト指向プログラミングをサポートする、より簡単で自動化された言語を作成することにより、C言語を改善するために設計されました。ただし、Cが外部ライブラリとヘッダーファイルを処理する方法を変更または改善することはしませんでした。C ++には、最新の言語のようなモジュールシステムはありません。Cプリプロセッサとリンカーシステムを引き続き使用します。C ++の記載された目標の1つはCコードとの後方互換性であったため、これは驚くことではありません。C ++モジュールシステムは、古いCヘッダーファイル/リンカーシステムと一緒に動作する必要があります。C ++標準委員会は、単に最新のモジュールシステムの設計に取り掛かっていません。(彼らはそれに取り組んでいますが、以下のKlaimのコメントを参照してください。)


8
最後の行は完全に正しいわけではありません:モジュールシステムは2004年(最初のドキュメント)から機能していますが、実装が不足しているため、最後の標準では実際には想定できないほどの作業を暗示しています提案をサポートします。その実装は、次のC ++標準を廃止するために(他のドラフトとともに)wortkで行われています。C ++デザイナーの優先事項ではないということではなく、間違いを犯さないこれらの機能の1つにすぎず、レトロ互換性(ほとんどのCコードとC ++ 11)を維持する必要があり、正しく取得するのは非常に困難です。そのため、多くの時間がかかります。
クライム

驚くばかり。情報をありがとう、クライム。間違いなくチェックしてください。それは非常にエキサイティングです:)
Pijusn

メカニズムはオペレーティングシステムによって異なる可能性があるため、ほとんどの言語はリンケージを標準化するビジネスから除外されています。Javaの「どこでも実行」という性質は、特定のリンケージとライブラリ形式を義務付けることを必要とします。それには何の問題もありませんが、すべての場合に望ましくないオーバーヘッドをもたらします。
Blrfl

率直に言って、私はC ++標準委員会が言語自体のモジュールシステムで作業していることを読んで非常に恐れています。C ++はすでに巨大で複雑な言語であり、そのような繊細な機能をC ++に追加しようとすることは非常に危険です。以下のKarl Bielefeldtが述べたように、この問題はすでにプラットフォームレベル(Linuxパッケージシステム)で適切な解決策を見つけており、ほとんどのIDEで簡単に対処できる可能性があります。たとえば、Qt LibraryとQt Creatorがこの問題をどのように処理するかをご覧ください。
AlexBottoni

1
@AlexBottoni、私は彼らが今世紀中にいつでも標準化されたモジュールシステムを思い付くことを本当に疑います。正確な実装に同意できなかったため、C ++ 11には概念さえ含まれていませんでした。ヘッダー/リンカーシステムと連携して機能するモジュールシステムはさらにトリッキーであり、おそらく非常に長い間見られないでしょう。
チャールズサルビア

2

これは技術的な障壁ではありません。Linuxでは、「特別なzipファイル」はパッケージマネージャーを使用してインストールするlibrary-devパッケージであり、インクルードフラグとリンカーフラグの設定configure.acは、pkg-configを使用してセットアップするために数行を追加するだけです。

Pkg-configはWindowsでも使用できますが、文化的な障壁によりその普及は妨げられています。Unixには、ソースコードを配布することで移植性を実現した強力な歴史があるため、開発ツールが無料で含まれています。Windowsには、バイナリ配布のみを奨励し、開発者にツールを請求するという強力な歴史があります。ライブラリを売ってお金を稼ぐとき、サードパーティがライブラリを提供しやすくすることは意味がありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.