2008-08-12 6 views
12

कंपनी में मैं काम करता हूं, हम बहुत सारी फाइल-आधारित लेनदेन प्रसंस्करण करते हैं। कई कंपनियों में कई प्रणालियों के अनुरूप कई प्रारूपों के बीच फ़ाइलों के रूपांतरण के आसपास प्रसंस्करण केंद्र।क्या मुझे सी ++ से पायथन तक जाना चाहिए? ... या एक और भाषा?

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

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

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

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

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

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

उत्तर

18

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

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

+2

खराब प्रोग्रामर सभी भाषाओं के साथ गरीब होते हैं, इसलिए अंकों के अनुरूप बस सब कुछ बदलना एक समाधान नहीं होगा। मैं उन्हें सलाह देना चाहूंगा कि इसके बजाय बेहतर कैसे हो, यह महत्वपूर्ण रूप से भुगतान करेगा। (और एसटीएल और एक अच्छा एक्सएमएल lib का उपयोग करें - tinyXML अच्छा है) – gbjbaanb

+1

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

+0

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

5

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

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

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

9

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

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

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

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

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

4

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

Python docs

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

0

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

2

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

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

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

+1

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

0

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

0

, अजगर कि नेटवर्किंग में सभी संभव बनाने के Languange पर जाना चाहिए अगर आप तेजी से ग में ले जाने की जरूरत है/C++

1

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

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

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

भी बढ़ावा पुस्तकालयों को देखकर सहायक हो सकता है।

1

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

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

+0

एपिसोडिक्स: कृपया बताएं, क्यों पाइथन परिणाम उत्पन्न करते हैं "हाल ही में" और सी ++ परिणाम क्यों उत्पन्न करते हैं "इतनी जल्दी ??" – cupcake

+0

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

+0

धन्यवाद, लेकिन मैंने उपयोगकर्ता टिप्पणी में से एक में स्टैक ओवरफ्लो में पढ़ा है कि यदि पाइथन धीमा है, तो चिंता न करें, क्योंकि CPU समय डेवलपर समय से अधिक सस्ता है। – cupcake

2

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

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

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

+1

ओह, अभी एहसास हुआ, यह सवाल 2 साल पुराना है। कोई बात नहीं। –

0

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

0

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

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

शुभकामनाएं!

+0

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

संबंधित मुद्दे