2009-07-27 7 views
5

मैंने कुछ कंप्यूटर्स के बारे में सुना है जो कोड को एक उच्च स्तरीय भाषा में दूसरे
उदाहरण Shedskin में परिवर्तित करता है जो पाइथन कोड को अनुकूलित C++ में परिवर्तित करता है।
मैं सोच रहा था कि कोई ऐसा करने का प्रयास क्यों करेगा। क्यों वांछित भाषा में सीधे लिखना नहीं है?कोड को एक भाषा में दूसरे में क्यों परिवर्तित करें?

एकमात्र कारण जो मैं सोच सकता था, संकलित भाषाओं जैसे सी/सी ++ संकलित किए गए भाषाओं की तुलना में बेहतर हो सकता है।

कोई और अंतर्दृष्टि का स्वागत है।

उत्तर

3

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

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

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

+0

हाँ ..यह समझ में आता है :) – sud03r

2

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

0

उच्च स्तरीय भाषाओं को लिखना आसान होना चाहिए। यहां तक ​​कि एक सी ++ कंपाइलर एक भाषा (सी ++) को दूसरे (ऑब्जेक्ट कोड) में बदलने के लिए एक उपकरण है (ऑब्जेक्ट कोड)

+0

"भाषाओं" से मेरा मतलब था "उच्च स्तरीय भाषाएं" – sud03r

0

ऐसा इसलिए है क्योंकि "व्याख्या" भाषा उच्च स्तर है। आम तौर पर इसका मतलब है कि आपको लिखने के लिए कठिन या बॉयलरप्लेट कोड का अधिक ध्यान रखा जाता है, जिससे आप समस्या पर अधिक ध्यान केंद्रित कर सकते हैं और भाषा या कंपाइलर के वास्तविक कार्यों पर कम ध्यान दे सकते हैं।

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

13

ठीक है अगर आप इसके बारे में सोचते हैं, तो कोई भी कंपाइलर दूसरी भाषा में परिवर्तित होता है: मशीन कोड।

यदि आप उस तर्क के साथ जाते हैं, तो असेंबली के अलावा कुछ भी व्यर्थ है। (असल में असेंबली भी होगी। वास्तविक पुरुष हाथ से हेक्स ऑपकोड टाइप करते हैं।)

यदि आप उच्च स्तर के परिप्रेक्ष्य से लिखना चाहते हैं या आप एक भाषा में एक से अधिक आरामदायक हैं तो आप एक भाषा का उपयोग दूसरे भाषा में परिवर्तित करने के लिए करेंगे ।

उदाहरण के लिए, क्या आप एक भाषा में नेटवर्क कोड की कुछ सौ लाइनें लिख और डिबग करेंगे या किसी अन्य भाषा में 5-10 लाइनों का उपयोग करेंगे?

+1

+1: सी एक प्रभावी, पोर्टेबल असेंबलर भाषा है (प्रभावी रूप से)। सी के लिए संकलित करें और फिर सी संकलक बाकी को संभालने दें। एफिल ने शुरुआत से ऐसा किया था। –

+5

आपने हेक्स का इस्तेमाल किया? असली पुरुष इच्छाशक्ति द्वारा इलेक्ट्रॉनों को निर्देशित करते हैं। –

+0

एफिल की लोकप्रियता की कमी, आईएमएचओ के मुख्य कारणों में से एक है। यह एक ठीक दृष्टिकोण था जब आजकल नहीं, लेकिन आजकल नहीं - प्रदर्शन हिट बहुत बढ़िया है। –

0

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

आपको यह समझने की बात यह है कि भाषा की विशेषताएं पूरी तरह से ओवरलैप नहीं होती हैं। तो कुछ रिकोडिंग होने जा रहा है। यह काम है।

आपको प्रयास के लॉट का निवेश करना होगा, शायद स्क्रैच से पुनः लिखने के प्रयास के% 50-% 75 के बराबर। इस सब के अंत में आपके पास कुछ ऐसा होगा जो केवल काम करता है और साथ ही साथ जिस चीज को आप पहले से ही काम कर रहे थे, वह ठीक है। इसके अलावा आपके द्वारा पेश की गई कोई भी नई बग।

2

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

3

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

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

+0

हाँ, लेकिन मैं तर्क दूंगा कि f2c फोरट्रान कंपाइलर का हिस्सा है । मैंने सी आउटपुट को देखा, और यह निश्चित रूप से एक फोरट्रान प्रोग्राम का अनुवाद एक समझदार सी प्रोग्राम में नहीं किया। –

+0

@ डेविड - यह सामान्य रूप से संकलन के साथ एक समस्या है। आप लगभग किसी भी दो भाषाओं के बीच संकलित कर सकते हैं, लेकिन इस बात की कोई गारंटी नहीं है कि संकलन कुशल या पठनीय कोड उत्पन्न करेगा। –

2

हालांकि यह आपकी प्राथमिकता सूची के शीर्ष पर नहीं हो सकता है, लेकिन मैं व्यक्तिगत रूप से एक नई भाषा से परिचित होने के लिए ऐसा करने पर विचार करता हूं (चाहे वह उच्च स्तर पर था या स्रोत भाषा से नहीं)।

पढ़ना 'व्यावहारिक प्रोग्रामर' इस के पीछे एक अच्छा तर्क देता है। थोड़ी देर में हर बार एक नई भाषा सीखना आपको हमारे क्षेत्र के अन्य पहलुओं की अच्छी समझ देता है।

बहुत उपयोगी!

0

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

वीएम भाषाएं जैसे .NET/C# अधिक सामान्य उद्देश्य भाषाएं हैं, और प्रोग्रामर के लिए उपयुक्त हैं जो सिर्फ काम पूरा करना चाहते हैं। अंतर्निहित सुरक्षा-जाल सामान्य समस्याओं से बचाने में मदद करते हैं। बफर ओवरफ्लो हमलों जैसी चीजों के बारे में चिंता करने की आवश्यकता नहीं है, क्योंकि इस तरह के सुरक्षा मुद्दों को आम तौर पर वीएम द्वारा ख्याल रखा जाता है।

सी ++ तेज है, लेकिन अधिक काम की आवश्यकता है।

0

एक भाषा से दूसरे भाषा में जाने का एक कारण (पायथन -> सी ++) एक अनुकूलन मुद्दा है। देशी कोड को संकलित करके आप किसी भी इंटरप्रिटेशन या जेटिंग चरण से छुटकारा पा सकते हैं। यह आमतौर पर पाइथन के साथ हो सकता है; आप पाइथन को मशीन पर स्थानीय रूप से स्थापित करने पर किसी भी निर्भरता को भी हटा देंगे।

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

और आखिरकार, जैसा कि अन्य ने कहा है, सी ++ पर पायथन का उपयोग करने का कारण यह है क्योंकि इसे काम करना आसान होना चाहिए; Epigrams in Programming से, "एक प्रोग्रामिंग भाषा निम्न स्तर है जब उसके कार्यक्रमों को अप्रासंगिक पर ध्यान देने की आवश्यकता होती है।"