क्या यह सी ++ में स्क्रिप्ट लिखने के लिए समझ में आता है?


15

मैं अपनी परियोजनाओं के लिए आईडीई / मेकफाइल्स उत्पन्न करने के लिए सीएमके का उपयोग कर रहा हूं, लेकिन मुझे अभी भी अपने संकलित फाइलों को हेरफेर करने या यहां तक ​​कि कोड उत्पन्न करने के लिए कस्टम "स्क्रिप्ट" को कॉल करने की आवश्यकता है।

पिछली परियोजनाओं में मैं पायथन का उपयोग कर रहा हूं और यह ठीक था, लेकिन अब मुझे दो बहुत बड़ी परियोजनाओं में बहुत अधिक निर्भरता के प्रबंधन में गंभीर समस्या हो रही है, इसलिए मैं हर जगह निर्भरता को कम करना चाहता हूं।

किसी ने मुझे सुझाव दिया कि मैं अपनी बिल्ड स्क्रिप्ट लिखने के लिए C ++ का उपयोग करूं, इसके लिए केवल भाषा निर्भरता जोड़ने के बजाय। परियोजनाएं पहले से ही सी ++ का उपयोग करती हैं, इसलिए कई फायदे हैं जो मैं देख सकता हूं:

  • पूरे प्रोजेक्ट का निर्माण करने के लिए, केवल एक C ++ कंपाइलर और CMake आवश्यक होगा, बाकी कुछ नहीं (सभी अन्य निर्भरता C या ++ ++ हैं);
  • सी ++ प्रकार की सुरक्षा (आधुनिक सी ++ का उपयोग करते समय) "सही" प्राप्त करने के लिए सब कुछ आसान बनाता है;
  • यह वह भाषा भी है जिसे मैं बेहतर जानता हूं, इसलिए मैं इसके साथ सहजता से अधिक हूं, भले ही मैं कुछ अच्छा पायथन कोड लिखने में सक्षम हूं;
  • निष्पादन गति में संभावित लाभ (लेकिन मुझे नहीं लगता कि यह वास्तव में बोधगम्य होगा);

हालांकि, मुझे लगता है कि कुछ कमियां हो सकती हैं और मैं वास्तविक प्रभाव के बारे में निश्चित नहीं हूं क्योंकि मैंने अभी तक कोशिश नहीं की है:

  • कोड लिखने के लिए लंबा हो सकता है (यह कहा कि मुझे यकीन नहीं है क्योंकि मैं सी + + में कुशल हूं जो कुछ काम करने के लिए जल्दी से लिखता है, इसलिए शायद इस प्रणाली के लिए यह लिखने में इतना लंबा नहीं होगा) (संकलन समय चाहिए ' टी इस मामले के लिए एक समस्या हो);
  • मुझे यह मान लेना चाहिए कि इनपुट के रूप में पढ़ी गई सभी टेक्स्ट फाइलें UTF-8 में होंगी, मुझे यकीन नहीं है कि इसे C ++ में रनटाइम पर चेक किया जा सकता है और भाषा आपकी जांच नहीं करेगी;
  • C ++ में पुस्तकालयों को स्क्रिप्टिंग भाषाओं की तुलना में प्रबंधित करना कठिन है;

मेरे पास अनुभव और दूरदर्शिता की कमी है इसलिए शायद मुझे फायदे और कमियां याद आ रही हैं। तो सवाल यह है कि क्या इसके लिए C ++ का उपयोग करना समझ में आता है? क्या आपके पास रिपोर्ट करने के लिए अनुभव हैं और क्या आप फायदे और नुकसान देखते हैं जो महत्वपूर्ण हो सकते हैं?


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

आप पाठ की एन्कोडिंग को काफी अच्छी विश्वसनीयता के साथ निर्देशित कर सकते हैं।
डेडएमजी

@ डीडीएमजी हाँ, लेकिन अगर ऐसा है तो बहुत अधिक काम (यदि आप एक अच्छा अनुमान चाहते हैं और अपने आप को "इस एससीआई या यूनिकोड के लिए सीमित नहीं है, और यदि यह यूनिकोड है, तो कितने बिट्स और क्या बाइट आदेश?) और" एक और निर्भरता को जोड़ना (यदि इसके लिए एक नि: शुल्क और मुक्त पुस्तकालय है) पायथन के आधार पर रोकने के लिए C ++ को छोड़ने की बात को पराजित करता है।

@delnan हाँ, लेकिन यह अभी भी अधिक भाषा पर स्थापित है। आपके वर्णन से, कोई भी अतिरिक्त निर्भरता "बहुत खराब" नहीं होगी, लेकिन मैं इस पर विचार कर रहा हूं क्योंकि पहले से ही बहुत कुछ प्रबंधित करना है, इसलिए शायद यह इस्तेमाल की जाने वाली भाषाओं को भी सीमित करने में मदद कर सकता है। मैं एक एम्बेडेड स्क्रिप्टिंग भाषा (परियोजना में सीधे C ++ में कार्यान्वित), जावास्क्रिप्ट / HTML / CSS, XML और अन्य प्रारूपों का उपयोग करता हूं जो पहले से ही बहुत कुछ ध्यान में रखते हैं।
केलेम

2
आप अपनी c ++ बिल्ड स्क्रिप्ट बनाने के लिए क्या उपयोग करेंगे?
जे.के.

जवाबों:


24

बस पायथन का उपयोग करें।

मैं C ++ में विकसित होता हूं और पायथन में अपनी स्क्रिप्ट का निर्माण करता हूं, और मुझे C ++ में स्क्रिप्ट बनाने में दर्द होता है:

  • पायथन ने शब्दकोशों, सूचियों, सूचियों के शब्दकोशों के नेस्टेड शब्दकोश, आदि में हेरफेर करने के लिए इसे तुच्छ बनाता है। उदाहरण के लिए, मेरी स्क्रिप्ट में से एक मेरे सभी टूल्स, टूल्स के संस्करणों और टूल्स के संस्करणों के पथों की बहु-स्तरीय पदानुक्रम का उपयोग करता है। ) C ++ टेम्प्लेट और कस्टम क्लास के साथ भी ऐसा कर सकता है, लेकिन यह बहुत अधिक क्रिया है (जो कोड की अधिक लाइनों में अनुवाद करता है, जो आमतौर पर कम उत्पादकता में बदल जाता है)।
  • अजगर उच्च स्तरीय पुस्तकालयों और अपने XML और JSON हैंडलिंग, जैसे दिनचर्या प्रदान करता है उपप्रक्रिया , और os.walk । फिर से, C ++ ऐसा कर सकता है, लेकिन यह पुस्तकालयों को खोजने, उनके एपीआई सीखने, कॉल को सही तरीके से इकट्ठा करने (जो अक्सर निचले स्तर के होते हैं), आदि के लिए बहुत अधिक काम है।
  • बिल्ड स्क्रिप्ट एक गैर-मूल्य वर्धित गतिविधि है (दुबला से एक शब्द उधार लेने के लिए)। जितना संभव हो उतनी उच्च स्तरीय भाषा का उपयोग करना बेहतर है, उन्हें जल्दी से जल्दी पूरा करने के लिए, काम पर वापस जाने के लिए जो आपके उपयोगकर्ताओं को लाभ पहुंचाता है।
  • मेरे अनुभव में, स्क्रिप्ट का निर्माण अप्रत्याशित तरीकों से बढ़ रहा है। यहां तक ​​कि अगर कोई कार्य शुरू में सी ++ के लिए सरल लगता है, तो यह जल्दी में जटिल हो सकता है। जब कोई नई आवश्यकता सामने आती है, तो अक्सर पायथन लिपि में निपटने की तुलना में यह बहुत आसान होता है, क्योंकि इसे सी ++ में करना होता है (जिसे नई लाइब्रेरी एपीआई पर ढूंढने या पढ़ने की आवश्यकता हो सकती है)।

उन लाभों के बारे में जिन्हें आप C ++ के लिए सूचीबद्ध करते हैं:

  • एक एकल निर्भरता (पायथन) जोड़ना आपके निर्माण को महत्वपूर्ण रूप से जटिल नहीं करना चाहिए। यह पहले से ही अधिकांश लिनक्स इंस्टॉलेशन पर मानक है, उदाहरण के लिए। पाइथन की "बैटरियों में शामिल" लाइब्रेरी के लिए धन्यवाद, सी ++ लाइब्रेरी की तुलना में इसे प्रबंधित करना और भी आसान हो सकता है जो आपकी बिल्ड स्क्रिप्ट पर निर्भर करेगा।
  • जिस प्रकार की सुरक्षा C ++ देती है वह बड़ी परियोजनाओं के लिए सबसे उपयोगी है, न कि छोटी लिपियों के लिए।
  • पायथन के पूरक सी ++ बहुत अच्छी तरह से (उच्च-स्तर बनाम निचले-स्तर, गतिशील रूप से टाइप किए गए बनाम स्टेटिक रूप से टाइप किए गए आदि) और यहां तक ​​कि सी ++ के साथ भी एकीकृत कर सकते हैं (धन्यवाद SWIG और Boost.Python के लिए) यदि आप बाद में ऐसा करना चाहते हैं, तो यह है। C ++ प्रोग्रामर के लिए सीखने लायक।
  • जैसा कि आपने कहा, निष्पादन की गति एक गैर होना चाहिए।

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

1

मेरा मानना ​​है कि यह मामला-विशिष्ट प्रश्न है। मुझे लगता है कि इसका कोई सही जवाब नहीं है कि यह स्क्रिप्ट बनाने के लिए C ++ का उपयोग करता है या नहीं, इसका पता लगाने का एकमात्र तरीका इसे अभ्यास में आज़माना है।

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


1

अपने आप को स्क्रिप्ट न लिखें, आप प्रयास और फिर से आविष्कार पहियों को दोहरा रहे हैं।

SCONS या यहां तक ​​कि Maven 3 का उपयोग करें, जिसमें C ++ बिल्ड सिस्टम के लिए समर्थन है

एक अच्छी बिल्ड सिस्टम, भाषा की परवाह किए बिना एक कार्यशील निष्पादन योग्य कलाकृतियों के निर्माण के लिए स्क्रिप्ट के रूप में कस्टम तर्क की आवश्यकता नहीं होनी चाहिए।

यदि आपको इसे कस्टमाइज़ करने के लिए बिल्ड सिस्टम की स्क्रिप्ट लिखनी है, तो यह एक अच्छा बिल्ड सिस्टम नहीं है। एक बिल्ड सिस्टम के लिए एक प्लगइन लिखना एक अलग कहानी है, लेकिन फिर भी यह एक पर्यावरण / हार्डवेयर के लिए बहुत विशेष होना चाहिए, और कुछ ऐसा होना चाहिए जिसका शायद ही कभी सहारा लिया जाए।


1
जैसा कि मैंने समझाया, मैं पहले से ही cmake का उपयोग कर रहा हूं लेकिन मुझे अभी भी कस्टम स्क्रिप्ट की आवश्यकता है। मैं उन कस्टम स्क्रिप्ट के बारे में बात कर रहा हूं, न कि खुद बिल्ड प्रोसेस।
केएल

1
मुझे मावेन से प्यार है - "हेल वर्ल्ड" सी प्रोग्राम बनाने के लिए आवश्यक स्क्रिप्ट प्रोग्राम से अधिक लंबी है!
quant_dev

@quant_dev, मुझे याद है कि पहली बार मैंने मावेन का उपयोग किया था, अपने स्वयं के वेब पेज पर, वे किसी ऐसे व्यक्ति के साथ शुरुआत करने की सलाह देते हैं जो पहले से ही मावेन को जानता है, क्योंकि पहली बार इसकी स्थापना मुश्किल है। यह पहला संकेत था कि मैं इसके साथ कुछ भी नहीं करना चाहता था!
ब्रैडी

मुझे SCons पसंद है, यह थोड़ा धीमा है लेकिन उपयोग करने में बहुत आसान है।
मात्रा_देव २ quant

1
@JarrodRoberson मैंने "लिपियों" का भी उदारतापूर्वक उपयोग किया। मेरा मतलब है इसकी विन्यास फाइल। मुझे यकीन नहीं है कि अगर घोषणात्मक होने से मावेन को स्वचालित रूप से अधिक पोर्टेबल और बनाए रखने में आसान हो जाता है। यह हालांकि इसे कम लचीला बनाता है, जो बड़ी परियोजनाओं में एक दर्द हो सकता है।
मात्रा_देव २ quant

0

प्रश्न पर ध्यान केंद्रित करने के लिए:

क्या यह सी ++ में स्क्रिप्ट लिखने के लिए समझ में आता है?

उत्तर एक सरल नहीं है

अजगर में वर्तमान में स्वीकृत उत्तर जोम्स, और मान्य चिंताओं की एक पूरी सूची को सूचीबद्ध करता है, लेकिन मैं एक भाषा-स्वतंत्र कारण जोड़ना चाहूंगा:

आप वास्तव में किसी भी संकलित भाषा में कुछ भी स्क्रिप्ट नहीं करना चाहते हैं यदि आप इसे मदद कर सकते हैं:

  • आपको स्क्रिप्ट को बूटस्ट्रैप करने के लिए एक स्क्रिप्ट की आवश्यकता होगी!
  • या आपको संकलित स्क्रिप्ट को स्रोत नियंत्रण में देखने की आवश्यकता होगी (और इसे स्रोतों में जाँच के साथ सिंक में रखें!)
  • लिपि में अचानक लिपि का एक विन्यास भी जुड़ा हुआ है। (जिसे बनाए रखने की आवश्यकता है!)

इसके अलावा, अन्य जवाब के साथ जा रहा है:

संभवतः आप अपनी बिल्ड स्क्रिप्ट लिखने के लिए "कच्ची" स्क्रिप्टिंग भाषा का उपयोग नहीं करना चाहते हैं (मुझे लगता है कि सी ++ पेचीदगियों को सीएमके द्वारा संभाला जाएगा)।

आपको शायद जो करना चाहिए, वह बिल्ड में से एक चुनें । सिस्टमबाहरवहाँ । और देखें कि क्या कोई आपके बिल की योग्यता पर फिट बैठता है। स्क्रिप्टिबिलिटी / एक्सपेंडेबिलिटी / प्ले-गुड-विद-सीएमके / क्रॉसप्लाकैरेंस।

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