ACE बनाम बूस्ट बनाम POCO [बंद]


96

मैं काफी समय से बूस्ट सी ++ लाइब्रेरी के साथ काम कर रहा हूं । मुझे नेटवर्क प्रोग्रामिंग के लिए बूस्ट एसियो सी ++ लाइब्रेरी बहुत पसंद है । हालाँकि मुझे दो अन्य पुस्तकालयों से परिचित कराया गया था: POCO और अनुकूली संचार पर्यावरण (ACE) ढांचा । मैं प्रत्येक के अच्छे और बुरे को जानना चाहूंगा।


3
ACE C ++ प्रोग्रामिंग के लिए "अंतिम नेटवर्क प्रोग्रामिंग स्विस आर्मी नाइफ" है, लेकिन अंतिम बार मैंने जांच की कि यह भी अपने आप में एक बहुत बड़ी राक्षस निर्भरता थी।
कोई नहीं

जवाबों:


90

जैसा कि रबडाउन ने कहा, बूस्ट में "एसटीएल के पास" स्थिति है। इसलिए यदि आपको किसी अन्य पुस्तकालय की आवश्यकता नहीं है , तो बूस्ट से चिपके रहें। हालांकि, मैं POCO का उपयोग करता हूं क्योंकि इसमें मेरी स्थिति के लिए कुछ फायदे हैं। POCO IMO के बारे में अच्छी बातें:

  • बेहतर धागा पुस्तकालय, विशेष रूप से एक सक्रिय विधि कार्यान्वयन। मुझे यह तथ्य भी पसंद है कि आप थ्रेड प्राथमिकता निर्धारित कर सकते हैं।

  • से अधिक व्यापक नेटवर्क लाइब्रेरी है boost::asio। हालाँकि boost::asioयह एक बहुत अच्छी लाइब्रेरी भी है।

  • कार्यक्षमता है कि बूस्ट में नहीं है, XML और डेटाबेस इंटरफ़ेस की तरह कुछ नाम करने के लिए।

  • यह बूस्ट की तुलना में एक पुस्तकालय के रूप में अधिक एकीकृत है।

  • इसमें स्वच्छ, आधुनिक और समझने योग्य C ++ कोड है। मुझे अधिकांश बूस्ट पुस्तकालयों की तुलना में समझना बहुत आसान लगता है (लेकिन मैं टेम्पलेट प्रोग्रामिंग विशेषज्ञ नहीं हूं :))।

  • इसका इस्तेमाल बहुत सारे प्लेटफॉर्म पर किया जा सकता है।

POCO के कुछ नुकसान हैं:

  • इसके सीमित दस्तावेज हैं। यह कुछ हद तक इस तथ्य से ऑफसेट है कि स्रोत को समझना आसान है।

  • बूस्ट कहते हैं कि इसकी तुलना में एक छोटा समुदाय और उपयोगकर्ता आधार है। इसलिए यदि आप उदाहरण के लिए स्टैक ओवरफ्लो पर एक प्रश्न रखते हैं, तो उत्तर पाने की आपकी संभावना बूस्ट से कम है

  • यह देखा जाना बाकी है कि नए C ++ मानक के साथ इसे कितना एकीकृत किया जाएगा। आप यह सुनिश्चित करने के लिए जानते हैं कि यह बूस्ट के लिए कोई समस्या नहीं होगी।

मैंने कभी ACE का उपयोग नहीं किया, इसलिए मैं वास्तव में इस पर टिप्पणी नहीं कर सकता। मैंने जो सुना है, उससे लोग ACCO की तुलना में POCO को अधिक आधुनिक और उपयोग में आसान पाते हैं।

राहुल की टिप्पणियों के कुछ जवाब:

  1. मैं बहुमुखी और उन्नत के बारे में नहीं जानता। POCO थ्रेड लाइब्रेरी कुछ कार्यक्षमता प्रदान करती है जो बूस्ट में नहीं है: ActiveMethodऔर Activity, और ThreadPool। IMO POCO थ्रेड्स का उपयोग करना और समझना भी आसान है, लेकिन यह एक व्यक्तिपरक मामला है।

  2. POCO नेटवर्क लाइब्रेरी भी HTTP और SSL जैसे उच्च स्तर के प्रोटोकॉल के लिए सहायता प्रदान करती है (संभवतः इसमें भी boost::asio, लेकिन मुझे यकीन नहीं है?)।

  3. काफी उचित।

  4. एकीकृत पुस्तकालय में लगातार कोडिंग, प्रलेखन और सामान्य "लुक एंड फील" होने का लाभ है।

  5. क्रॉस-प्लेटफ़ॉर्म होना पीओसीओ की एक महत्वपूर्ण विशेषता है, यह बूस्ट के संबंध में एक फायदा नहीं है।

फिर, आपको शायद केवल पीओसीओ पर विचार करना चाहिए यदि यह आपको आवश्यक कुछ कार्यक्षमता प्रदान करता है और जो कि बूस्ट में नहीं है।


1
POCO के बारे में मैंने जो कुछ सीखा है, उससे चीजें नहीं जुड़ती हैं: 1. बूस्ट थ्रेड बहुत अधिक बहुमुखी और उन्नत लगता है। 2. POCO किन तरीकों से अधिक बहुमुखी है? 3. मुझे केवल नेटवर्किंग में दिलचस्पी है। XML और डेटाबेस मेरी चिंता नहीं करते। 4. एक पुस्तकालय के रूप में एकीकृत? मुझे यकीन नहीं है कि अगर एक अच्छी या बुरी चीज है? 5. बूस्ट मुझे विश्वास है (और जो बढ़ावा देने के लिए जाता है :: asio भी) भी काफी क्रॉसप्लेट रिकॉर्डर है।
राहुल

@ राहुल मैंने जवाब में आपकी कुछ बातों का जवाब देने की कोशिश की।
दानी वैन डेर मीर

मैंने हाल ही में पीओसीओ को नहीं देखा है, लेकिन जब मैंने कुछ साल पहले इसे देखा था तो मुझे इस तथ्य से दूर कर दिया गया था कि घटक लाइसेंस के मिश्रण का उपयोग कर रहे थे। कुछ ने बूस्ट लाइसेंस का इस्तेमाल किया, अन्य ने जी.पी.एल. एन्क्रिप्शन सामग्री में से कुछ को व्यावसायिक उपयोग के लिए लाइसेंस की आवश्यकता होती है। मुझे नहीं पता कि मौजूदा लाइसेंसिंग स्थिति POCO के साथ क्या है, लेकिन मैं इसे इस्तेमाल करने से पहले ध्यान से देखूंगा।
फेरुशियो

10
POCO को पूरी तरह से बूस्ट लाइसेंस (भविष्य में संदर्भ के लिए) के तहत लाइसेंस प्राप्त है
ब्रेंडन लॉन्ग

1
पोको का एक फायदा यह है कि यह बहुत तेजी से संकलित होता है। क्योंकि बूस्ट आम तौर पर हेडर में बहुत सारे और बहुत सारे कोड पर निर्भर करता है, संकलन समय धीमा हो सकता है। पोको के साथ अधिक गतिशील लिंकिंग है जो संकलन समय को कम करता है। एक सुरक्षा लाभ भी है, क्योंकि उपयोगकर्ता सब कुछ recompile किए बिना .so / .dll को अपडेट कर सकता है।
एरिकसर्टिन

27

मैंने तीनों का उपयोग किया है इसलिए यहां मेरी $ 0.02 है।

मैं वास्तव में डौग श्मिट के लिए मतदान करना चाहता हूं और उनके द्वारा किए गए सभी कार्यों का सम्मान करता हूं, लेकिन ईमानदार होने के लिए मैं एसीई को मामूली रूप से छोटी गाड़ी और उपयोग करने में कठिन लगता हूं। मुझे लगता है कि लाइब्रेरी को रिबूट की जरूरत है। यह कहना मुश्किल है, लेकिन मैं अभी के लिए ACE से दूर भागूँगा, जब तक कि TAO का उपयोग करने के लिए कोई सम्मोहक कारण नहीं है, या आपको यूनिक्स वेरिएंट और विंडोज दोनों पर C ++ चलाने के लिए एकल कोड बेस की आवश्यकता होगी। टीएओ कई कठिन समस्याओं के लिए शानदार है, लेकिन सीखने की अवस्था तीव्र है, और एक कारण है कि कोर्बा के पास आलोचकों की संख्या है। मुझे लगता है कि बस या तो उपयोग करने का निर्णय लेने से पहले अपना होमवर्क करें।

यदि आप C ++ में कोडिंग कर रहे हैं, तो बूस्ट मेरे दिमाग में एक नो-ब्रेनर है। मैं निम्न स्तर के कई पुस्तकालयों का उपयोग करता हूं और उन्हें आवश्यक पाता हूं। मेरे कोड का एक त्वरित grep साझा share_ptr, program_options, regex, bind, serialization, foreach, property_tree, filesystem, tokenizer, विभिन्न itरेटर एक्सटेंशन, alogrithm, और mem_fn को प्रकट करता है। ये ज्यादातर निम्न-स्तर की कार्यक्षमता हैं जो वास्तव में संकलक में होनी चाहिए। कुछ बूस्ट लाइब्रेरी बहुत ही सामान्य हैं; यह उन्हें पाने के लिए काम आ सकता है जो आप चाहते हैं, लेकिन यह सार्थक है।

पोको उपयोगिता कक्षाओं का एक संग्रह है जो कुछ बहुत ही सामान्य सामान्य कार्यों के लिए कार्यक्षमता प्रदान करता है। मुझे लगता है कि पुस्तकालय अच्छी तरह से लिखित और सहज हैं। मुझे प्रलेखन का अध्ययन करने या मूर्खतापूर्ण परीक्षण कार्यक्रम लिखने में अधिक समय नहीं लगाना पड़ता है। मैं वर्तमान में लकड़हारा, एक्सएमएल, जिप और नेट / एसएमटीपी का उपयोग कर रहा हूं। मैंने पोको का उपयोग तब शुरू किया जब libxml2 ने मुझे आखिरी बार परेशान किया। ऐसी अन्य कक्षाएं हैं जिनका मैं उपयोग कर सकता था, लेकिन कोशिश नहीं की, जैसे डेटा :: MySQL (मैं mysql ++ से खुश हूं) और नेट :: HTTP (मैं libCURL से खुश हूं)। मैं पोको के बाकी हिस्सों को अंततः कोशिश करूँगा, लेकिन इस बिंदु पर प्राथमिकता नहीं है।


अच्छा वर्णन, धन्यवाद।
आमिर नागहिजाडेह

21

कई POCO उपयोगकर्ता बूस्ट के साथ इसका उपयोग करते हुए रिपोर्ट करते हैं, इसलिए यह स्पष्ट है कि दोनों परियोजनाओं में लोगों के लिए प्रोत्साहन हैं। बूस्ट उच्च गुणवत्ता वाले पुस्तकालयों का एक संग्रह है। लेकिन यह कोई ढांचा नहीं है। ऐस के लिए, मैंने अतीत में इसका उपयोग किया है और डिजाइन पसंद नहीं किया है। इसके अतिरिक्त, प्राचीन गैर-अनुरूप संकलक के लिए इसके समर्थन ने एक कुरूप तरीके से कोड आधार को आकार दिया है।

पीओसीओ वास्तव में अलग है जो एक डिज़ाइन है जो तराजू और समृद्ध पुस्तकालय उपलब्धता के साथ एक इंटरफ़ेस है जो जावा या सी # के साथ मिलता है। इस समय, POCO की सबसे तीखी कमी अतुल्यकालिक IO है।


11

मैं वास्तविक समय की कमी के साथ एक बहुत ही उच्च प्रदर्शन डेटा अधिग्रहण आवेदन के लिए ACE का उपयोग किया है। एक एकल धागा तीस टीसीपी / आईसी सॉकेट कनेक्शन और एक सीरियल पोर्ट से I / O को संभालता है। कोड 32 और 64 बिट लिनक्स दोनों पर चलता है। ACE_Reactor, ACE_Time_Value, ACE_Svc_Handler, ACE_Message_Queue, ACE_Connector कई एसीई कक्षाएं मैंने इस्तेमाल की हैं। एसीई हमारी परियोजना की सफलता का एक महत्वपूर्ण कारक था। यह समझने का एक महत्वपूर्ण प्रयास करता है कि एसीई कक्षाओं का उपयोग कैसे किया जाए। मेरे पास एसीई के बारे में लिखी गई सभी किताबें हैं। जब भी मुझे हमारे सिस्टम को कार्यक्षमता का विस्तार करना पड़ा है तो आमतौर पर यह अध्ययन करने में कुछ समय लगता है कि क्या करना है और फिर आवश्यक कोड की मात्रा बहुत कम है। मैंने ACE को बहुत विश्वसनीय पाया है। मैं Boost से थोड़े बहुत कोड का भी उपयोग करता हूँ। मैं बूस्ट में समान कार्यक्षमता नहीं देखता हूं।


10

मुझे हाल ही में एक नई नौकरी मिली और एसीई और टीएओ का उपयोग करने वाली परियोजना पर काम किया गया। खैर, मैं जो बता सकता हूं वह यह है कि एसीई और टीएओ काम करते हैं और अपने कार्यों को पूरी तरह से पूरा करते हैं। लेकिन पुस्तकालयों के समग्र संगठन और डिजाइन काफी चुनौतीपूर्ण हैं ...

उदाहरण के लिए, ACE के मुख्य भाग में "ACE_" से शुरू होने वाली सैकड़ों कक्षाएं शामिल हैं। ऐसा लगता है जैसे उन्होंने दशकों से नाम स्थान की अनदेखी की है।

इसके अतिरिक्त, ACE के कई वर्ग नाम उपयोगी जानकारी भी उपलब्ध नहीं कराते हैं। या आप अनुमान लगा सकते हैं कि किस वर्ग को पसंद किया जा सकता है ACE_Dev_Poll_Reactor_Notifyया ACE_Proactor_Handle_Timeout_Upcallइसके लिए इस्तेमाल किया जा सकता है?

Additonally में, ACE के दस्तावेज़ीकरण में वास्तव में कमी है, इसलिए जब तक आप ACE को कठिन तरीके से नहीं सीखना चाहते हैं (यह वास्तव में किसी भी अच्छे प्रलेखन के बिना कठिन है ..), मैं ACE का उपयोग करने की अनुशंसा नहीं करूंगा, जब तक कि आपको वास्तव में CORBA के लिए TAO की आवश्यकता नहीं है , यदि आप CORBA की जरूरत नहीं है, आगे बढ़ो और कुछ आधुनिक पुस्तकालयों का उपयोग करें ।।


7

ACE सॉकेट लाइब्रेरीज़ ठोस हैं। यदि आप सॉकेट के मानक कार्यान्वयन को पोर्ट करने की कोशिश कर रहे हैं तो आप गलत नहीं हो सकते ACE कोड एक कठोर विकास प्रतिमान से चिपक जाता है। उच्च स्तर के संदूषण उपयोग करने के लिए थोड़ा भ्रमित हैं। कठोर प्रतिमान अपवाद हैंडलिंग के साथ कुछ विसंगतियों का कारण बनता है। ऐसी स्थितियाँ या आदतें होती हैं जहाँ स्ट्रिंग वैल्यू जोड़े एक अपवाद के रूप में पारित हो जाते हैं, जिसमें से एक जोड़ा शून्य होता है, अपवाद अपवाद का कारण बनता है जो आपको चकमा देगा। डिबगिंग करते समय क्लास लेयरिंग की गहराई थकाऊ होती है। मैंने कभी भी अन्य पुस्तकालयों की कोशिश नहीं की है इसलिए मैं एक बुद्धिमान टिप्पणी नहीं कर सकता।


6

बूस्ट को C ++ मानक समिति के लोगों की संख्या के कारण "STL के निकट" स्थिति प्राप्त है, जो बूस्ट डेवलपर्स भी हैं। पोको और एसीई उस लाभ का आनंद नहीं लेते हैं, और मेरे वास्तविक अनुभव से बूस्ट अधिक व्यापक है।

हालाँकि, POCO एक पूरे के रूप में नेटवर्क-टाइप सामान के आसपास केंद्रित है। मैं बूस्ट से चिपकता हूं इसलिए मैं वहां आपकी मदद नहीं कर सकता, लेकिन बूस्ट का प्लस इसका (अपेक्षाकृत) व्यापक उपयोग है।


4

बूस्ट महान है, मैंने केवल POCO के बारे में अच्छी बातें सुनी हैं (लेकिन कभी इस्तेमाल नहीं की गई) लेकिन मुझे ACE पसंद नहीं है और भविष्य में इससे बचना चाहिए। हालाँकि आपको ACE के प्रशंसक मिलेंगे, लेकिन आपको ऐसे कई अवरोधक भी मिलेंगे, जिन्हें आप बूस्ट या पोको (IME) के साथ नहीं लेते हैं, मेरे लिए यह स्पष्ट संकेत देता है कि ACE सबसे अच्छा उपकरण नहीं है (हालाँकि यह वही करता है जो यह कहता है टिन पर)।


10
ACE बहुत लंबे समय से आसपास है, और पिछले कुछ वर्षों में कई विरासत प्लेटफार्मों का समर्थन करना पड़ा है। यह एक कारण है कि यह आधुनिक बूस्ट के रूप में क्यों नहीं है, उदाहरण के लिए। अत्यंत उपयोगी शोध और साहित्य का एक बड़ा हिस्सा ACE से निकला (देखें डग श्मिट का CV) जो दूसरों को लाभ उठाने और बनाने में सक्षम है। स्वाभाविक रूप से, अन्य पुराने पुस्तकालयों में की गई गलतियों से सीखेंगे और उन पर सुधार करेंगे। दूसरों को भी पूरी तरह से नए तरीके के रूप में अच्छी तरह से करने के साथ आएंगे। ACE पर बहुत मुश्किल मत बनो। मैं बूस्ट का भी बड़ा प्रशंसक हूं। बेशक, मैंने POCO का उपयोग कभी नहीं किया है।
शून्य

6
ACE ऐसे समय में शुरू किया गया था जब कंपाइलर बहुत असंगत थे (अभी तक कोई मानक मौजूद नहीं था), और टेम्प्लेट एक पूर्ण दुःस्वप्न (1996/1997) थे और इसमें सौ यूनिक्स जैसे प्लेटफॉर्म थे। मैंने एक परियोजना के लिए ACE + TAO का मूल्यांकन किया - हम अंततः OmniORB पर बस गए, TAO इतनी अपरिपक्व थी कि यह नई रिलीज के साथ टूट गई। दूसरी ओर ACE एक चट्टान थी। यह लाइब्रेरी सेटअप के संदर्भ में इसे दिखाता है, लेकिन यह ठोस है, और इसका एक बड़ा अनुसरण है। मैं थोड़ा उदार तानाशाह का डर था - हालांकि अगर श्मिट कभी बूट ऊपर चला गया, ACE मुसीबत हो सकती है। मुझे बूस्ट के साथ वह एहसास नहीं है।
क्रिस के

3

उनमें से मैंने केवल एसीई का उपयोग किया है। ACE क्रॉस-प्लेटफ़ॉर्म एंटरप्राइज़ नेटवर्किंग अनुप्रयोगों के लिए एक महान ढांचा है। यह अत्यंत बहुमुखी और स्केलेबल है और ORB और / या वेब आधारित अनुप्रयोगों के त्वरित, शक्तिशाली विकास के लिए TAO और JAWS के साथ आता है।

इसके साथ गति प्राप्त करना कुछ हद तक कठिन हो सकता है, लेकिन इस पर बहुत सारा साहित्य है, और व्यावसायिक सहायता उपलब्ध है।

हालांकि यह कुछ हद तक भारी है, इसलिए छोटे पैमाने के ऐप्स के लिए यह थोड़ा अधिक हो सकता है। POCO के लिए सारांश पढ़ना ऐसा लगता है जैसे वे एक प्रणाली के लिए लक्ष्य कर रहे हैं जो कि एम्बेडेड सिस्टम पर चलाया जा सकता है इसलिए मैं यह मान रहा हूं कि इसे बहुत हल्के तरीके से उपयोग किया जा सकता है। मैं अब इसे एक चक्कर दे सकता हूं: पी


0

मुझे लगता है कि यह वास्तव में एक राय की बात है, शायद ही कोई सही उत्तर हो।

पोर्टेबल Win32 / लिनक्स सर्वर कोड (15+ वर्ष) लिखने के साथ अपने अनुभव में, मैं व्यक्तिगत रूप से बढ़ावा / एसीई अनावश्यक रूप से फूला हुआ पाता हूं और वे जो भी छोटे लाभ देते हैं, उन्हें रखरखाव के खतरों (अन्यथा "dll नरक" के रूप में जाना जाता है) का परिचय देता है।

ACE भी बुरी तरह से पुराना लगता है, यह 90 सी में "c प्रोग्रामर" द्वारा लिखित "c ++ लाइब्रेरी" है और यह वास्तव में मेरी राय में दिखाता है। ऐसा होता है, अभी मैं पिको के साथ लिखे गए प्रोजेक्ट को फिर से इंजीनियरिंग कर रहा हूं, ऐसा लगता है कि यह पूरी तरह से एसीई विचार का अनुसरण करता है, लेकिन अधिक समकालीन शब्दों में, उस पर ज्यादा बेहतर नहीं है।

उच्च प्रदर्शन, कुशल, सुरुचिपूर्ण सर्वर संचार के लिए किसी भी मामले में आप उनमें से किसी का उपयोग नहीं करने से बेहतर हो सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.