2009-06-14 9 views
85

मैं कुछ समय के लिए Boost C++ Libraries के साथ काम कर रहा हूं। मुझे नेटवर्क प्रोग्रामिंग के लिए बूस्ट Asio C++ library से बिल्कुल प्यार है। हालांकि मुझे दो अन्य पुस्तकालयों में पेश किया गया था: POCO और Adaptive Communication Environment (ACE) framework। मैं प्रत्येक के अच्छे और बुरे को जानना चाहता हूं।एसीई बनाम बूस्ट बनाम पीओसीओ

+3

एसीई सी ++ प्रोग्रामिंग के लिए "परम नेटवर्क प्रोग्रामिंग स्विस आर्मी चाकू" है, लेकिन आखिर में मैंने जांच की कि यह भी एक विशाल राक्षस निर्भरता है। – none

उत्तर

74

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

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

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

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

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

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

  • इसका उपयोग कई प्लेटफ़ॉर्म पर किया जा सकता है।

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

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

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

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

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

राहुल द्वारा टिप्पणी करने के लिए कुछ उत्तर:

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

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

  3. पर्याप्त मेला।

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

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

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

+0

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

+0

@Rahul मैंने जवाब में आपके कुछ बिंदुओं का उत्तर देने का प्रयास किया। –

+0

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

3

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

इसके साथ गति प्राप्त करना कुछ हद तक चुनौतीपूर्ण हो सकता है, लेकिन इसमें बहुत सारे साहित्य हैं, और वाणिज्यिक सहायता उपलब्ध है।

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

5

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

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

4

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

+9

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

+5

एसीई एक समय में शुरू किया गया था जब संकलक बहुत असंगत थे (अभी तक कोई मानक अस्तित्व में नहीं था), और टेम्पलेट्स एक पूर्ण दुःस्वप्न (1 99 6/19 9 7) थे और वहां एक सौ यूनिक्स जैसी प्लेटफॉर्म थीं। मैंने एक परियोजना के लिए एसीई + टीएओ का मूल्यांकन किया - हम अंततः ओमनीओआरबी पर बस गए, टीएओ इतनी अपरिपक्व थी कि यह हर नई रिलीज के साथ टूट गई। दूसरी ओर एसीई एक चट्टान था। यह लाइब्रेरी सेटअप के मामले में उम्र दिखाता है, लेकिन यह ठोस है, और इसका एक बड़ा अनुसरण है। मुझे थोड़ी सी दयालु तानाशाह से डर था - अगर श्मिट कभी भी बूट हो गया, तो एसीई परेशानी हो सकती है। मुझे बूस्ट के साथ यह महसूस नहीं होता है। –

18

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

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

10

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

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

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

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

7

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

10

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

22

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

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

आप सी ++ में कोडिंग रहे हैं, तो बढ़ावा एक नहीं brainer मेरे मन में है। मैं निम्न स्तर की पुस्तकालयों का उपयोग करता हूं और उन्हें आवश्यक खोजता हूं। मेरे कोड का एक त्वरित ग्रेप shared_ptr, program_options, regex, बाँध, क्रमबद्धता, foreach, property_tree, फाइल सिस्टम, tokenizer, विभिन्न इटरेटर एक्सटेंशन, alogrithm, और mem_fn पता चलता है। ये अधिकतर निम्न-स्तरीय कार्यक्षमता हैं जो वास्तव में संकलक में होना चाहिए। कुछ बढ़ावा पुस्तकालय बहुत सामान्य हैं; यह आपको वह काम करने के लिए काम कर सकता है जो आप चाहते हैं, लेकिन यह सार्थक है।

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

+0

अच्छा विवरण, धन्यवाद। –

1

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

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

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

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