2012-09-08 9 views
7

मेरा एक ग्राहक चाहता है कि मैं उच्च प्रदर्शन, विश्वसनीय सर्वर बनाना चाहता हूं जो सॉकेट के माध्यम से डेटास्ट्रीम प्राप्त करता है। वह उम्मीद करता है कि यह सी ++क्या एएसओ और सी ++ 11 एक अच्छा मैच है?

यह थोड़ी देर हो गया है कि मैं सी ++ पूर्णकालिक कर रहा था इसलिए मैं थोड़ा सा पढ़ रहा हूं। एएसओ सी ++ में नेटवर्किंग के लिए एक अच्छी शर्त प्रतीत होता है, और सी ++ 11 कई नई सुविधाओं के साथ सी ++ के एक नए नए संस्करण की तरह दिखता है।

मेरा प्रश्न: क्या दोनों विश्वसनीय रूप से उपयोग करना संभव है? क्या इस का कोई मतलब निकलता है? क्या मुझे कुछ सी ++ 11 फीचर्स जैसे लैम्बडास से बचना चाहिए?

उत्तर

6

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

दूसरी तरफ, आप जिस कंपाइलर की परवाह करते हैं उसके आधार पर, आप विविधता वाले टेम्पलेट्स और/या ब्रेस्ड प्रारंभकर्ता सूचियों जैसी चीज़ों से बचने की आवश्यकता हो सकती है।

+0

रेगेक्स के लिए समर्थन करने के लिए एक और चीज है, लाइब्रेरी प्रदान की गई है। जीसीसी 4.7 पूरा होने लगता है, लेकिन कुछ चीजें 'regex_search' जैसी काम नहीं करती हैं। –

+0

@ जेरीकॉफिन जीसीसी कंपाइलर मेरा सबसे अच्छा शर्त सही होगा? (मैं मैक पर विकसित करूंगा और अनिश्चित (अभी तक) यूनिक्स बॉक्स को लक्षित करूंगा)। या अभी तक एक व्यवहार्य विकल्प है? मैंने इसे एक्सकोड आईफोन विकास में उपयोग किया है और अपने स्थिर विश्लेषक – Toad

+0

@Toad के साथ उत्साहित नहीं होना मुश्किल है: gcc निश्चित रूप से अधिक प्लेटफ़ॉर्म पर समर्थित है। फिलहाल, क्लेंग ओएस/एक्स पर ठीक है, लिनक्स पर अर्ध-उचित, विंडोज़ पर अनुपयोगी है, और इसे अन्य प्लेटफॉर्म पर पोर्ट नहीं किया गया है। –

6

आप इनमें से दो मुद्दों को बिना किसी समस्या के उपयोग कर सकते हैं। बूस्ट और सी ++ 11 एसटीएल दोनों में लागू चीजों के लिए, यह आपकी पसंद है जो उपयोग करना है। ज्यादातर मामलों में, यह बहुत कम अंतर बनाता है। यदि आप बूस्ट का उपयोग करते हैं, तो आप सी ++ 03 प्लेटफॉर्म पर भी पोर्टेबल होंगे (कम से कम, आपके कोड का वह हिस्सा होगा यदि यह सी ++ 11 सुविधाओं का सीधे उपयोग नहीं करता है)।

बूस्ट सावधानीपूर्वक सी ++ 11 सुविधाओं का लाभ लेने में सक्षम होने के लिए डिज़ाइन किया गया था, जहां वे "डंब डाउन" इंटरफ़ेस या खराब प्रदर्शन प्रदान किए बिना उपलब्ध हैं, जहां वे नहीं हैं।

और यदि आपको अच्छे एसिंक्रोनस I/O की आवश्यकता है, तो आपको इसे प्रदान करने के लिए कुछ लाइब्रेरी की आवश्यकता है। बूस्ट को हरा करने के लिए बहुत मुश्किल है, चाहे आप सी ++ 11 का उपयोग कर रहे हों या नहीं।

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

+0

महान अंतर्दृष्टि का उल्लेख होगा। आपका बहुत बहुत धन्यवाद! – Toad

5

देखें, boost.asio घटना संचालित प्रोग्रामिंग के लिए नेटवर्क लाइब्रेरी है - कई कॉलबैक, सी ++ 11 लैम्ब्डा कॉलबैक लिखना बहुत आसान बनाता है।

मूल रूप से

की सी ++ 11 संयोजन और एसियो यह बहुत विकसित करने के लिए आसान बना देता है और अपने कोड और अधिक स्वच्छ और पठनीय

+2

लैम्बडास बाध्य के माध्यम से कॉलबैक करने से भी तेज़ हैं और – ltjax

2

asio documentation विशेष रूप से C++ 11 समर्थन

+0

अच्छी बात के लिए कस्टम मज़ेदार लिखने से निश्चित रूप से आसान हैं। मैं अब तक दस्तावेज़ों को अभी तक नहीं पढ़ रहा था। – Toad