سؤال

لقد كنت أعمل مع تعزيز مكتبات C ++ لبعض الوقت. أنا أحب دفعة تماما مكتبة آسيو C ++ لبرمجة الشبكة. ومع ذلك، أدخلت على مكتبتين أخريين: بوكو و إطار بيئة الاتصالات التكيفية (ACE). وبعد أود أن أعرف الجيدة والسيئة من كل منها.

هل كانت مفيدة؟

المحلول

كما قال Rdbound، فإن دفعة لديها حالة "قريبة من STL". لذلك إذا كنت لا بحاجة إلى مكتبة أخرى، عصا لتعزيز. ومع ذلك، أنا استخدم بوكو لأنه يحتوي على بعض المزايا لوضعي. الأشياء الجيدة عن Poco IMO:

  • مكتبة موضوع أفضل، وخاصة تنفيذ الطريقة النشطة. أنا أيضا أحب حقيقة أنه يمكنك تعيين أولوية مؤشر الترابط.

  • مكتبة شبكة أكثر شمولا من boost::asio. وبعد لكن boost::asio هي أيضا مكتبة جيدة جدا.

  • يشمل الوظيفة التي ليست في دفعة، مثل XML واجهة قاعدة البيانات لتسمية عدد قليل.

  • إنه أكثر دمجا كمكتبة واحدة من التعزيز.

  • لديها رمز C ++ نظيف وحديث ومفهوم. أجد أنه من الأسهل بكثير فهم أكثر من معظم مكتبات دفعة (لكنني لست خبير برمجة قالب :)).

  • يمكن استخدامه على الكثير من المنصات.

بعض عيوب بوكو هي:

  • لديها وثائق محدودة. هذا تعويض إلى حد ما بحقيقة أن المصدر سهل الفهم.

  • لديها مجتمع أصغر بكثير وقاعدة مستخدم من، على سبيل المثال، تعزيز. لذلك إذا وضعت سؤالا على تجاوز سعة المكدس على سبيل المثال، فرصك في الحصول على إجابة أقل من التعزيز

  • يبقى أن نرى مدى دمجها مع معيار C ++ الجديد. أنت تعرف بالتأكيد أن الأمر لن يكون مشكلة في التعزيز.

لم أستخدم Ace أبدا، لذلك لا أستطيع التعليق عليه حقا. من ما سمعته، يجد الناس Poco أكثر حداثة وسهولة الاستخدام من الآس.

بعض الإجابات على التعليقات التي كتبها راهول:

  1. أنا لا أعرف عن تنوعا ومتقدمة. توفر مكتبة موضوع Poco بعض الوظائف غير الموجودة في Boost: ActiveMethod و Activity, ، و ThreadPool. وبعد مؤشرات الترابط IMO POCO هي أيضا أسهل في الاستخدام والفهم، ولكن هذه مسألة ذاتية.

  2. توفر مكتبة شبكة Poco أيضا الدعم لبروتوكولات أعلى مستوى مثل HTTP و SSL (ربما في boost::asio, ، لكنني لست متأكدا؟).

  3. عادل بما يكفي.

  4. تحتوي المكتبة المتكاملة على ميزة وجود ترميز متسقة والوثائق والعامة "تبدو وشعورا".

  5. كونك عبر منصة هو ميزة مهمة في Poco، فهذه ليست ميزة فيما يتعلق بالزيادة.

مرة أخرى، ربما يجب عليك النظر في بوكو فقط إذا كان يوفر بعض الوظائف التي تحتاجها وهذا ليس في دفعة.

نصائح أخرى

لقد استخدمت كل ثلاثة حتى هنا 0.02 دولار.

أريد حقا التصويت ل Doug Schmidt واحترام كل العمل الذي فعله، ولكن أن نكون صادقين أجد الآس عربات التي تجرها الدواب المعتدل ويصعب استخدامها. أعتقد أن هذه المكتبة تحتاج إلى إعادة التشغيل. من الصعب قول ذلك، لكنني سأخجل من الآس الآن ما لم يكن هناك سبب مقنع لاستخدام TAO، أو تحتاج إلى قاعدة رمز واحدة لتشغيل C ++ على كل من Unix Powerts و Windows. تاو رائع لعدد من المشاكل الصعبة، لكن منحنى التعلم مكثف، وهناك سبب له كوربا لديه عدد من النقاد. أعتقد أن الواجبات المنزلية الخاصة بك فقط قبل اتخاذ قرار باستخدام إما.

إذا كنت ترميز في C ++، فإن دفعة في ذهني لا عقلاني. يمكنني استخدام عدد من المكتبات ذات المستوى المنخفض والعثور عليها ضرورية. يكشف GREP السريع من التعليمات البرمجية عن Shared_PTR، Program_Options، Regex، Binde، التسلسل، Foreach، Vestuction_Tree، نظام الملفات، Tokenizer، ملحقات ITERION المختلفة، Alogrithm، و Mem_FN. هذه هي في الغالب وظائف منخفضة المستوى التي يجب أن تكون حقا في المترجم. بعض المكتبات دفعة عامة جدا؛ يمكن أن يكون العمل للحصول عليها للقيام بما تريد، ولكن من المفيد.

Poco عبارة عن مجموعة من فصول المرافق توفر وظائف لبعض المهام المشتركة ملموسة للغاية. أجد المكتبات مكتوبة جيدا وبديهية. ليس علي أن أقضي الكثير من الوقت في دراسة وثائق أو كتابة برامج اختبار سخيفة. أنا أستخدم حاليا مسجل، XML، ZIP، وصافي / SMTP. بدأت باستخدام Poco عندما غضب Libxml2 لي في المرة الأخيرة. هناك فصول أخرى يمكنني استخدامها ولكن لم أحاول ذلك، مثل البيانات :: MySQL (أنا سعيد باستخدام MySQL ++) والصافي :: HTTP (أنا سعيد مع Libcurl). سأحاول ببقية Poco في نهاية المطاف، لكن هذه ليست أولوية في هذه المرحلة.

يقوم العديد من مستخدمي Poco بتقرير استخدامه إلى جانب دفعة، لذلك من الواضح أن هناك حوافز للأشخاص في كلا المشروعين. Boost عبارة عن مجموعة من المكتبات عالية الجودة. لكنه ليس إطارا. أما بالنسبة للآس، فقد استخدمتها في الماضي ولم أحب التصميم. بالإضافة إلى ذلك، شكل دعمه للمجمعات التجارية غير المتوافقة القديمة قاعدة التعليمات البرمجية بطريقة قبيحة.

ما يميزه حقا بوكو هو تصميم أن المقاييس وواجهة مع توفر مكتبة غنية تذكرنا تلك التي يحصل على جافا أو C #. في هذا الوقت، أكثر شيء يفتقر كثيرا من بوكو هو غير متزامن IO.

لقد استخدمت ACE لتطبيق استحواذ بيانات عالية الأداء للغاية مع قيود زمنية حقيقية. مؤشر ترابط واحد مقابض I / O من أكثر من ثلاثين اتصالات مقبس TCP / IC ومنفذ تسلسلي. الرمز يعمل على كل من لينكس 32 و 64 بت. عدد قليل من العديد من فصول ACE التي استخدمتها هي ACE_REACTOR، ACE_TIME_VALUE، ACE_SVC_HANDLER، ACE_MESSAGE_QUEUE، ACE_CONNECTOR. كان الآس عامل رئيسي لنجاح مشروعنا. يتخذ جهدا كبيرا لفهم كيفية استخدام فصول ACE. لدي كل الكتب المكتوبة حول الآس. كلما اضطررت إلى تمديد وظائف نظامنا، عادة ما يستغرق الأمر بعض الوقت لدراسة ما يجب القيام به ومن ثم مقدار الكود المطلوب صغير جدا. لقد وجدت الآس موثوقة للغاية. أنا أيضا استخدام القليل من التعليمات البرمجية من دفعة. أنا لا أرى نفس الوظيفة في دفعة. أود استخدام أي المكتبات أو كلا المكتبات.

حصلت مؤخرا على وظيفة جديدة وعمل في مشروع يستخدم ACE و TAO. حسنا، ما يمكنني أن أقوله هو أن ACE و Tao يعمل وينجز مهامهم بالكامل. لكن المنظمة العامة وتصميم المكتبات شاقة للغاية ...

على سبيل المثال، يتكون الجزء الرئيسي من ACE من مئات الطبقات بدءا من "ACE_". يبدو أنهم يجهلون أسماء الأسماء منذ عقود.

بالإضافة إلى ذلك، لا تقدم العديد من أسماء فئات ACE معلومات مفيدة أيضا. أو يمكنك تخمين ما فصوله ACE_Dev_Poll_Reactor_Notify أو ACE_Proactor_Handle_Timeout_Upcall قابل للاستخدام ل؟

Additonally، فإن وثائق الآس تفتقر حقا، لذلك ما لم تكن ترغب في تعلم الآس بالطريقة الصعبة (من الصعب حقا دون أي وثائق جيدة ..)، لن أوصي باستخدام ACE، إلا إذا كنت بحاجة حقا تاو ل كوربا, ، إذا كنت لا تحتاج إلى Corba، فانتقل واستخدم بعض المكتبات الحديثة ..

مكتبات المقبس الآس صلبة. إذا كنت تحاول ميناء التنفيذ القياسي للمقابس، فلن تستطع الخطأ. العصي رمز ACE إلى نموذج تطوير جامد. تعزز المستوى الأعلى مربكا قليلا للاستخدام. يسبب النموذج الصلب بعض الذكرية مع معالجة الاستثناءات. هناك أو تستخدم في المواقف التي يتم فيها تمرير أزواج قيمة السلسلة إلى استثناء مع أحد الزوجين أن تكون فارغة يؤدي إلى إلقاء استثناء في الاستثناء الذي سيقوم بتشغيلك. عمق الطبقات الفئة مملة عند تصحيح الأخطاء. لم أحاول أبدا المكتبات الأخرى، لذلك لا يمكن إجراء تعليق ذكي.

تتمتع Boost بوضع "بالقرب من STL" بسبب عدد الأشخاص في لجنة المعايير C ++ الذين يعززون المطورين أيضا. لا تتمتع Poco and Ace بالنفعية، ومن تجربتي القصصية دفعة أكثر انتشارا.

ومع ذلك، فإن Poco ككل هو أكثر تركز حول الأشياء من نوع الشبكة. أنا لا ألتصق بزيادة لذلك لا أستطيع مساعدتك هناك، ولكن بالإضافة إلى التعزيز هو استخدام واسع النطاق (نسبيا).

دفعة رائعة، لقد سمعت أشياء جيدة فقط عن poco (ولكن لم تستخدم قط) لكنني لا أحب الآس وسوف تجنبها في المستقبل. على الرغم من أنك ستجد عشاق Ace، ستجد أيضا العديد من المنتقدات التي لا تميل إلى الحصول عليها مع زيادة أو بوكو (IME)، لي أن ترسل إشارة واضحة إلى أن ACE ليست أفضل أداة (على الرغم من أنها تفعل ما تقوله على القصدير).

من بين هؤلاء الذين استخدموا فقط ACE فقط. يعد ACE إطارا رائعا لتطبيقات شبكات المؤسسات عبر النظام الأساسي. إنها متعددة الاستخدامات للغاية وقابلة للتطوير وتأتي مع تاو وفكي لتطوير سريع وقوي للتطبيقات القائمة على الجرم السماوي و / أو الويب.

الحصول على ما يصل إلى السرعة مع أنه قد يشعر بشق الأنفس، ولكن هناك الكثير من الأدب على ذلك، والدعم التجاري المتاح.

إنها ثقيلة إلى حد ما، لذا لأن التطبيقات الصغيرة النطاق قد تكون قليلا من المبالغة. قراءة ملخص Poco يبدو وكأنه يهدف إلى وجود نظام يمكن تشغيله على أنظمة مضمنة، لذلك أفترض أنه يمكن استخدامه بطريقة أخف وزنا. قد أعطيه الآن دوامة: ص

أعتقد أنه يهم حقا رأي، فهناك الجواب الصحيح.

في تجربتي مع كتابة رمز خادم Win32 / Linux المحمولة (15+ سنة)، أنا شخصيا أجد دفعة / آس انتفاخا بشكل غير ضروري وتقديم مخاطر الصيانة (المعروفة بخلاف ذلك باسم "جحيم DLL") للحصول على الميزة الصغيرة التي يقدمونها.

يبدو أن ACE أيضا قد عفا عليها الزمن بشكل فظيع، بل هو "مكتبة C ++" كتبها "C مبربرين" في 90-S وتظهر حقا في رأيي. يحدث ذلك، الآن، أنا الآن أعد هندسة المشروع الذي كتبه بيكو، يبدو لي ذلك يتبع تماما فكرة الآس، ولكن في شروط أكثر معاصرة، ليس أفضل بكثير في ذلك.

في أي حال للحصول على اتصالات عالية الأداء والكفاءة والأنيقة، قد تكون أفضل حالا في عدم استخدام أي منها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top