質問

と協力してきました。 C++ ライブラリを強化する かなり長い間。私はブーストが大好きです Asio C++ ライブラリ ネットワークプログラミング用。ただし、他の 2 つのライブラリを紹介しました。 ポコ そして 適応型通信環境 (ACE) フレームワーク. 。それぞれの良い点、悪い点を知りたいです。

役に立ちましたか?

解決

rdbound が述べたように、Boost は「STL に近い」ステータスを持っています。そうしないと 必要 別のライブラリを使用する場合は、Boost を使用してください。ただし、私が使用するのは、 ポコ それは私の状況にとっていくつかの利点があるからです。POCO IMO の良い点:

  • スレッド ライブラリ、特にアクティブ メソッドの実装が改善されました。スレッドの優先順位を設定できるのも気に入っています。

  • より包括的なネットワーク ライブラリ boost::asio. 。しかし boost::asio もとても良い図書館です。

  • XML やデータベース インターフェイスなど、Boost にはない機能が含まれています。

  • Boost よりも 1 つのライブラリとして統合されています。

  • クリーンでモダンでわかりやすい C++ コードが含まれています。ほとんどの Boost ライブラリよりもはるかに理解しやすいと思います (ただし、私はテンプレート プログラミングの専門家ではありません:))。

  • 多くのプラットフォームで使用できます。

POCO の欠点は次のとおりです。

  • ドキュメントが限られています。これは、ソースが理解しやすいという事実によって多少相殺されます。

  • たとえば Boost よりもはるかに小さいコミュニティとユーザー ベースを持っています。したがって、たとえば Stack Overflow に質問を投稿した場合、回答を得る可能性は Boost よりも低くなります。

  • 新しい C++ 標準とどの程度うまく統合されるかはまだわかりません。Boost にとっては問題にならないことは確かです。

私は ACE を使用したことがないので、実際にはコメントできません。私が聞いたところによると、人々は POCO が ACE よりも最新で使いやすいと感じています。

ラーフル氏のコメントに対するいくつかの回答:

  1. 汎用性や高度性についてはわかりません。POCO スレッド ライブラリは、Boost にはないいくつかの機能を提供します。 ActiveMethod そして Activity, 、 そして ThreadPool. 。IMO POCO スレッドも使いやすく理解しやすくなっていますが、これは主観的な問題です。

  2. POCO ネットワーク ライブラリは、HTTP や SSL などの高レベル プロトコルのサポートも提供します (おそらく、 boost::asio, 、でもよくわかりません?)。

  3. けっこうだ。

  4. 統合ライブラリには、一貫したコーディング、ドキュメント、および一般的な「ルック アンド フィール」があるという利点があります。

  5. クロスプラットフォームであることは POCO の重要な機能ですが、これは Boost に関連した利点ではありません。

繰り返しになりますが、POCO が必要な機能を提供し、それが Boost にない場合にのみ POCO を検討する必要があります。

他のヒント

私は3つのすべてがそうここに私の$ 0.02です使用しました。

私は本当にダグ・シュミットに投票し、彼が行うのすべての作業を尊重するが、私はACEが穏やかにバギーと使いにくい見つける正直にしたいと思います。私は、ライブラリが再起動を必要とすることだと思います。それはこのことを言うのは難しいですが、TAOを使用するには、説得力のある理由がない限り、私は今のところ離れACEから敬遠したい、またはあなたは、両方のUnixの変種およびWindows上でC ++を実行するための1つのコードベースを必要としています。 TAOは、困難な問題の数のために素晴らしいですが、学習曲線が強烈で、CORBAは、批評家の数を持っている理由があります。私はどちらかを使用する決定を下す前に、あなたの宿題をすると思います。

あなたがC ++でコーディングされている場合は、

、ブーストは私の心の中で非常に簡単ではありません。私は、低レベルのライブラリの数を使用し、それらが不可欠見つけます。私のコードの迅速なgrepがshared_ptrの、program_options、正規表現、バインド、シリアライズ、foreachの、property_tree、ファイルシステム、トークナイザ、様々なイテレータの拡張、alogrithm、およびmem_fnのを明らかにする。これらは主に本当にコンパイラであるべき低レベルの機能です。いくつかのBoostライブラリは非常に一般的なものです。それは彼らがあなたがやりたいことを得るために作業することができますが、それは価値がある。

ポコは、いくつかの非常に具体的な一般的なタスクのための機能を提供するユーティリティクラスのコレクションです。私は、ライブラリは、よく書かれており、直感的見つけます。私は、ドキュメントを勉強したり愚かなテストプログラムを書いて多くの時間を費やす必要はありません。私は現在ロガー、XML、郵便番号、及びネット/ SMTPを使用しています。 libxml2のは、最後の時間のために私をイライラするとき、私はポコを使い始めました。私が使用することができますが、試していない他のクラスは、例えば、ありますデータ:: MySQLの(私は、MySQLと嬉しい++)とネット:: HTTPを(私はlibcurlをして満足しています)。私は最終的にポコの残りの部分を試してみるだろうが、それはこの時点では優先事項ではないのです。

多くのPOCOユーザーがブーストと一緒にそれを使用して報告し、両方のプロジェクトにおける人々のためのインセンティブがあることは明らかです。ブーストは、高品質のライブラリのコレクションです。しかし、それは、フレームワークではありません。 ACEのためとして、私は過去にそれを使用しているとデザインが好きではありませんでした。また、古代の非準拠のコンパイラのサポートが醜い方法でコードベースを形作っています。

本当にPOCOを区別することはスケールし、それらの1を彷彿とさせる豊富なライブラリの可用性とのインターフェースは、JavaやC#となるデザインです。このとき、POCOから最も急激に欠けているものは、非同期IOです。

私は、リアルタイム制約を持つ非常に高性能なデータ集録アプリケーション用のACEを使用しています。単一のスレッドは30を超えるTCP / ICソケット接続とシリアルポートからのI / Oを処理します。コードは、両方の32ビットおよび64ビットのLinux上で実行されます。私が使用している多くのACEクラスのいくつかはACE_Reactor、ACE_Time_Value、ACE_Svc_Handler、ACE_Message_Queue、ACE_Connectorです。 ACEは、私たちのプロジェクトの成功の鍵要因でした。これは、ACEクラスを使用する方法を理解するために多大な労力がかかります。私はACEについて書かれたすべての書籍を持っています。私は機能を拡張するために、当社のシステムがあったときはいつでも、それは一般的に何をすべきかを学ぶためにいくつかの時間がかかり、その後、必要なコードの量が非常に少ないです。私は非常に信頼にACEを発見しました。私はまた、ブーストからコードを少し使用しています。私はブーストで同じ機能が表示されません。私はどちらか、または両方のライブラリを使用することになります。

私は最近新しい仕事に就き、ACE と TAO を使用するプロジェクトに取り組んでいます。さて、私に言えることは、ACE と TAO が機能し、そのタスクを完全に達成しているということです。しかし、図書館の全体的な構成と設計は非常に困難です...

たとえば、ACE の主要部分は、「ACE_」で始まる数百のクラスで構成されています。彼らは何十年も名前空間を無視していたようです。

さらに、ACE のクラス名の多くも有用な情報を提供しません。または、クラスがどのようなものかを推測できますか ACE_Dev_Poll_Reactor_Notify または ACE_Proactor_Handle_Timeout_Upcall に使用できますか?

さらに、ACE のドキュメントは非常に不足しているため、ACE を一生懸命学習したい場合を除き (適切なドキュメントがないと本当に難しいです。)、本当に必要な場合を除き、ACE を使用することはお勧めしません。 タオ のために コルバ, CORBA が必要ない場合は、最新のライブラリを使用してください。

ACEソケットライブラリは固体です。あなたがポートにソケットの標準的な実装をしようとしている場合、あなたは間違って行くことはできません。 ACEコードは、剛性の開発パラダイムにこだわっ。より高いレベルのコンストラクトは、使用には少し混乱しています。剛性のパラダイムは、例外処理といくつかのかの異常が発生します。あるか、ペアの一方がnullであることを例外に渡される文字列値のペアがあなたを尻込みされます例外で例外スローの原因となるような状況にするために使用。デバッグ時にクラスのレイヤーの深さは退屈です。私は、インテリジェントなコメントをすることはできませんので、他のライブラリを試したことがありません。

ブーストは、開発者を後押ししているC ++標準化委員会の人の数による「STL近い」状態を楽しんでいます。ポコとACEはその恩恵を享受していない、と私の逸話経験からブーストがより普及してます。

しかし、全体としてPOCOは、複数のネットワーク型のものを中心とします。私はので、私はそこにあなたを助けることはできません後押しするために固執するが、ブーストのためのプラスは、その(比較的)広く使用されています。

ブーストは素晴らしいですが、私は唯一のPOCO程度の良いものを聞いた(ただし、使用されることはありません)しましたが、私はACEを好きではないし、将来的には、それを避けるだろう。あなたはACEのファンがいますが、あなたはまた、あなたはそれが言っているんがACEは最適なツール(ではないことを明確なシグナルを送るように私には、ブーストまたはPOCO(IME)を取得する傾向がない多くの中傷を見つけるだろう)スズでます。

私は今まで本当にACEを使用していた者のうち。 ACEは、クロスプラットフォームのエンタープライズ・ネットワーキング・アプリケーションのための優れたフレームワークです。それは非常に汎用性と拡張性だとORBおよび/またはWebベース・アプリケーションの迅速、強力な開発のためのTAOとJAWSが付属しています。

これはやや困難なことができて高速化するために起床、それに関する文献の多くは、および商用サポート利用可能があります。

これは、しかし多少重いので、小規模のアプリケーションのためには、過剰のビットであってもよいです。彼らは、私はそれがはるかに軽い方法で使用することができると仮定していますので、組み込みシステム上で実行することができるシステムを目指しているようPOCOの要約を読んでそれが聞こえます。私は今、それを旋回を与える可能性がありますP

私はそれが本当に問題で意見の、正しい答えはほとんどないと思います。

ポータブルのWin32 / Linuxサーバコード(15+年)を書き込むと私の経験では、私は個人的には不必要に肥大化したブースト/ ACEを見つけ、彼らが与える少し利点のために(そうでない場合は、「DLL地獄」として知られている)メンテナンス危険性を紹介します。

ACEはまた、90-Sで「Cプログラマ」によって書かれた「C ++ライブラリ」で、恐ろしく時代遅れのようです、それは本当に私の意見で示しています。それはとてもピコと書かれた今、私はリエンジニアリングしていたプロジェクト、たまたま、完全にACEの考え方に従うが、その時でも非常に優れた、より現代的な観点から、ではないに私には思える。

高性能、効率的、エレガントなサーバ間の通信のためにどのような場合でも、あなたはそれらのいずれかを使用しないほうが良いかもしれません。

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