क्या मुझे सी ++ से पायथन तक जाना चाहिए? ... या एक और भाषा?

जिस कंपनी में मैं काम करता हूं, हम बहुत सारी फाइल-आधारित लेनदेन प्रसंस्करण करते हैं। कई कंपनियों में कई प्रणालियों के अनुरूप कई प्रारूपों के बीच फ़ाइलों के रूपांतरण के आसपास प्रसंस्करण केंद्र।

प्रसंस्करण में लगभग हमेशा xml चरण शामिल होता है और इसमें बहुत से टेक्स्ट पार्सिंग, डेटाबेस लुकअप, डेटा रूपांतरण और डेटा सत्यापन शामिल हो सकते हैं।

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

प्रदान की गई संक्षिप्त जानकारी के आधार पर, क्या पाइथन जैसी भाषा आवश्यक कार्यक्षमता और प्रदर्शन प्रदान करेगी, साथ ही मेमोरी आवंटन (और कई अन्य <�कोड> सी ++ </कोड> संबंधित) समस्याओं को संबोधित करेगी जो उत्पन्न होती हैं?

मुझे हर बार जब हम बदलाव करते हैं तो कार्यक्रमों को संकलित करने की आवश्यकता नहीं है। मैं समझता हूं कि व्याख्या की गई भाषाएं संभवतः उसी प्रदर्शन को प्रभावित नहीं करतीं जिसे हम वर्तमान में प्राप्त करते हैं।

हमारे सिस्टम Linux आधारित हैं जो कुछ विकल्पों को प्रतिबंधित भी करते हैं।

पायथन या वैकल्पिक भाषाओं के सुझावों के साथ उपलब्ध कार्यक्षमता और प्रदर्शन पर कोई भी टिप्पणी बहुत सराहना की जाएगी।

0
ro fr bn

12 उत्तर

या अपने कोडिंग नियमों को अपने कोड के अंदर हार्ड-कोडित छोड़ने के बजाय डेटाबेस पर स्टोर करने का प्रयास करना चाहिए। केन डाउन के रूप में सही उद्धृत किया गया है, कोड को छोटा करें, डेटा को अधिकतम करें । इस तरह आपको हर बार एक छोटे नियम में परिवर्तनों को फिर से सम्मिलित करने की आवश्यकता नहीं होगी।

0
जोड़ा

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

मैं आपको प्रोग्रामिंग भाषाओं को जानने के लिए कुछ हफ्तों लेने की सलाह दूंगा जो आप विचार कर रहे हैं। मैं रूबी भी देखता हूं। होस्केल के साथ शायद खिलौना थोड़ा सा?

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

0
जोड़ा

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

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

मुझे यह चिंताजनक लगता है कि आपके पास ऐसे डेवलपर हैं जो स्मृति प्रबंधन के साथ इतने खराब हैं कि आप भाषाएं स्विच करना चाहते हैं। यह एक संकेत है जो एक समस्या का संकेत है, लेकिन मुझे यकीन नहीं है कि समस्या भाषा के साथ है।

0
जोड़ा
-1 जावा के लिए (वास्तव में ओपी को बहुत मदद नहीं करता है), लेकिन "जो लोग स्मृति प्रबंधन के साथ बुरे हैं, वे सभी भाषाओं के साथ खराब होते हैं" के लिए +1।
जोड़ा लेखक gbjbaanb, स्रोत

पायथन में प्रदर्शन एक बहुत बड़ा मुद्दा हो सकता है। एक बार मुझे कार्यों की सूची पर अनुकूलन एल्गोरिदम शामिल प्रोग्राम बनाना पड़ा। मैंने पायथन के साथ शुरुआत की, इसे सुपर-फास्ट एंड क्लीन बनाया, फिर देखा कि परिणाम देने में उम्र लग जाएगी। सी ++ की रेखा से लाइन को फिर से लिखने के परिणामस्वरूप 100x गति सुधार हुआ ...

तो कभी-कभी यह 5-10% प्रदर्शन हानि का मामला नहीं है जैसा आप देख सकते हैं। आपको अपने मामले में इसकी जांच करनी चाहिए (शायद थोड़ा परीक्षण?)।

0
जोड़ा
अधिकांशतः क्योंकि पाइथन एक स्क्रिप्ट भाषा है, जो मुझे लगता है कि संकलित एक की तुलना में परिभाषा से धीमी है। मेरे विशेष मामले में मुझे पूर्णांक की सूचियों पर लाखों परिचालनों की गणना करना पड़ा। पाइथन की उन्नत सूचियां सी ++ में निश्चित लंबाई के साथ बस सरल सरणी का उपयोग करने से बहुत धीमी हैं (मुझे इन सूचियों की किसी भी उन्नत विशेषताओं की आवश्यकता नहीं है)। और आखिरी लेकिन कम से कम नहीं, जहां तक ​​मुझे पता है कि सी ++ (या सी) असेंबलर के बाद अगली शीर्ष गति भाषा है;)।
जोड़ा लेखक Episodex, स्रोत
एपिसोडिक्स: कृपया बताएं, क्यों पाइथन परिणाम उत्पन्न करते हैं "हाल ही में" और सी ++ परिणाम क्यों उत्पन्न करते हैं "इतनी जल्दी ??"
जोड़ा लेखक cupcake, स्रोत
धन्यवाद, लेकिन मैंने उपयोगकर्ता टिप्पणी में से एक में स्टैकओवरफ्लो में पढ़ा है कि यदि पाइथन धीमा है, तो चिंता न करें, क्योंकि CPU समय डेवलपर समय से अधिक सस्ता है।
जोड़ा लेखक cupcake, स्रोत

कौन सा महत्वपूर्ण है, कार्यक्रमों को जल्दी से काम करने के लिए, या कार्यक्रमों को जल्दी से काम कर रहा है?

यदि आप बड़ी संख्या में बड़ी फाइलों से निपट रहे हैं तो आप सी ++ में रहने से बेहतर हो सकते हैं और अपने स्नातक प्रोग्रामर को पढ़ सकते हैं कि एक पॉइंटर क्या है (!)

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

यदि प्रति-रिकॉर्ड प्रोसेसिंग लोड अधिक नहीं है, तो आप आश्चर्यचकित हो सकते हैं कि आप कितना कम प्रदर्शन खो देते हैं: फ़ाइल IO लगभग निश्चित रूप से संकलित (सी) लाइब्रेरी में संभाला जाएगा, इसलिए दुभाषिया ओवरहेड अपेक्षाकृत कम हो सकता है। कोशिश करने लायक है, मैं सुझाव दूंगा।

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

0
जोड़ा

यदि आप एक संकलित भाषा के साथ रहने के साथ ठीक हैं, तो मैं सी ++ के साथ रहूंगा और पुस्तकालयों का एक अच्छा सेट चुनने का सुझाव दूंगा और सही उपयोग और ठोस पैटर्न के अनुपालन पर नए शौक सिखाऊंगा।

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

मेरे लिए, यह सादा सी ++, एसडीडी लाइब्रेरी और एसटीएल के साथ काम करने और क्यूटी जैसे शक्तिशाली पुस्तकालय के साथ काम करने के बीच एक बड़ा अंतर है। शायद, बूस्ट गुड्स में देखकर भी बहुत मूल्यवान है।

0
जोड़ा
ओह, अभी अभी एहसास हुआ, यह सवाल 2 साल पुराना है। कोई बात नहीं।
जोड़ा लेखक Tilman Vogel, स्रोत

मैं ग्रोवी कोशिश करने का सुझाव दूंगा। एक्सएमएल समर्थन ठीक है और पार्सिंग के साथ ही डेटा सत्यापन मुश्किल नहीं होना चाहिए।

हालांकि कुछ लोगों ने बताया कि माइग्रेटिंग सबसे उज्ज्वल विचार नहीं हो सकता है। क्या आप "मैकर ऑब्जेक्ट्स" और "ऑब्जेक्ट्स को मान्य करने" में सामान्य सामान को कारक करने की कोशिश नहीं कर सकते हैं ताकि नए प्रोग्रामर त्रुटि प्रवण नया कोड लिखने की बजाय अपने सी ++ लाइब्रेरी का उपयोग कर सकें जो केवल मौजूदा टुकड़ों को डुप्लिकेट करता है?

यह भी सुनिश्चित करें कि आधुनिक फ़ाइल IO (iostreams) का उपयोग करना और सी ++ में सीओ की तरह सी नहीं है, जो स्मृति समस्याओं के साथ बहुत मदद करनी चाहिए।

बूस्ट लाइब्रेरी को भी मददगार हो सकता है।

0
जोड़ा

मुझे हर बार जब हम बदलाव करते हैं तो प्रोग्राम को संकलित करने की आवश्यकता नहीं है। मैं समझता हूं कि व्याख्या की गई भाषाएं संभवतः उसी प्रदर्शन को प्रभावित नहीं करतीं जो हमें वर्तमान में मिलती है।

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

0
जोड़ा
गरीब प्रोग्रामर सभी भाषाओं के साथ गरीब होते हैं, इसलिए अंकों के अनुरूप सब कुछ बदलना एक समाधान नहीं होगा। मैं उन्हें सलाह देना चाहूंगा कि इसके बजाय बेहतर कैसे हो, यह महत्वपूर्ण रूप से भुगतान करेगा। (और एसटीएल और एक अच्छा एक्सएमएल lib का उपयोग करें - tinyXML अच्छा है)
जोड़ा लेखक gbjbaanb, स्रोत
@gbjbaanb फ्लिप पक्ष पर, मैं बल्कि खराब प्रोग्रामर सी ++ की तुलना में पाइथन का उपयोग करेंगे। उदाहरण, एक पायथन डेवलपर इंटर-मॉड्यूल ग्लोबल्स नहीं बना सकता है। वह ग्लोबल्स के प्रारंभिक क्रम के साथ परेशानी में नहीं आ सकता है, वह कुछ हद तक मॉड्यूलर तरीके से चीजों को डिजाइन करने के लिए मजबूर है और पाइथन में उन विनाशकारी रूप से खराब डिजाइनों को प्राप्त करना थोड़ा कठिन है जो पूरे सिस्टम में विनाश को खत्म कर सकते हैं। उस ने कहा, मैं मुख्य रूप से एक सी ++ उत्साही हूं (मेरी प्रोफ़ाइल जांचें), लेकिन मैंने पहली बार सी ++ कोडिंग के विनाशकारी प्रकार को देखा है और लगता है कि पाइथन जैसी भाषा वास्तव में कम अनुभ
जोड़ा लेखक stinky472, स्रोत
ऐसे डेवलपर के लिए पाइथन में प्रोग्राम को क्रैश करने के कम तरीके हैं। 'कोई नहीं' वाले चर को एक्सेस करना अपरिभाषित व्यवहार (उदा: एक्सेस उल्लंघन या segfault) के बजाय अपवाद का कारण बनता है। कोई सी-आईएसएच प्रकार कास्टिंग/बिटवाई प्रकार का तर्क नहीं है (एक्स-रेइंग/बायपासिंग प्रकार) कि सी ++ डेवलपर्स कभी-कभी खराब आदत से बाहर होते हैं। सेंट्रल हेडर के लिए पिंपल जैसी महत्वपूर्ण मुहावरे को अनदेखा करके निर्माण प्रणाली को धीमा करने का कोई तरीका नहीं है। तो, इस तरह के कोड बंदरों को अपना कोड या डिजाइन सही करने में मुश्किल हो रही है [...]
जोड़ा लेखक stinky472, स्रोत
[...] मैं खराब कोडिंग के परिणामस्वरूप विनाशकारी के रूप में सी ++ की तुलना में पाइथन के साथ उन पर भरोसा नहीं करता हूं। बेशक, मैं बहुत कुछ समझता हूं कि वे क्या कर रहे थे, और यदि इस मंच पर कोई बेरोजगार डेवलपर्स हैं, तो इन इंजीनियरिंग उपयोगकर्ताओं में से कुछ में सामान्य इंजीनियरिंग अवधारणाओं और सी ++ उपयोग की बात आती है।
जोड़ा लेखक stinky472, स्रोत

एक और विकल्प आपके सी ++ प्रोग्राम में पायथन को एम्बेड करना है। आप अपना अधिकांश एप्लिकेशन वही रख सकते हैं, और पाइथन को अक्सर बदलते टुकड़ों के लिए कॉल कर सकते हैं, या एक स्क्रिप्टिंग भाषा प्रदान करने वाली लचीलापन की आवश्यकता होती है।

पायथन डॉक्स

पिछले अध्यायों ने चर्चा की कि कैसे करें   पायथन का विस्तार करें, यानी, विस्तार कैसे करें   पाइथन की कार्यक्षमता द्वारा   सी कार्यों की एक पुस्तकालय संलग्न करने के लिए   यह। यह करना भी संभव है   अन्य तरीकों से: अपने सी/सी ++ को समृद्ध करें   इसमें पायथन एम्बेड करके आवेदन।   एम्बेडिंग आपके आवेदन प्रदान करता है   कुछ को लागू करने की क्षमता के साथ   आपके आवेदन की कार्यक्षमता   सी या सी ++ के बजाय पायथन में। इस   कई उद्देश्यों के लिए इस्तेमाल किया जा सकता है; एक   उदाहरण उपयोगकर्ताओं को अनुमति देना होगा   आवेदन की जरूरतों को पूरा करने के लिए   पायथन में कुछ स्क्रिप्ट लिखकर। आप   अगर इनमें से कुछ भी इसका इस्तेमाल कर सकते हैं   कार्यक्षमता में लिखा जा सकता है   पाइथन अधिक आसानी से।

0
जोड़ा

यदि आपको सी/सी ++ में तेजी से कदम की आवश्यकता है, तो नेटवर्किंग में सभी संभव बनाने के लिए पाइथन पर जाना चाहिए

0
जोड़ा

यदि आप जिस परियोजना की प्रकृति कर रहे हैं उसकी प्रकृति आपको इस तरह के कदम पर भी विचार करने की अनुमति देती है, तो आगे बढ़ें (मान लीजिए कि आपके पास कुछ सुराग है)। हालांकि कई सी ++ परियोजनाओं में, आपकी एकमात्र पसंद नीचे एक या दो अमूर्त स्तरों (जैसे, सी या असेंबली) पर जा रही है।

0
जोड़ा

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

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

शुभ लाभ!

0
जोड़ा
मुझे यकीन है कि आपकी सलाह बहुत अच्छी है, लेकिन मुझे अब यह प्रासंगिक नहीं लगता है, आप 4 साल पहले पूछे गए प्रश्न पर क्यों पोस्ट कर रहे हैं?
जोड़ा लेखक Inbar Rose, स्रोत