अगर कुछ उत्पन्न किया जा सकता है, तो वह चीज डेटा है, कोड नहीं।
जब आप उस कोड पर बाद में डेटा डालते हैं, तो आपका प्रस्ताव "यदि कुछ उत्पन्न हो सकता है, तो वह कोड नहीं है।" क्या आप कहेंगे कि, सी कंपाइलर द्वारा उत्पन्न असेंबली कोड कोड नहीं है? क्या होगा अगर यह विधानसभा कोड के साथ मेल खाता है जो मैं हाथ से लिखता हूं? यदि आप चाहें तो वहां जाने के लिए आपका स्वागत है, लेकिन मैं आपके साथ नहीं आऊंगा।
इसके बजाय "कोड" की परिभाषा के साथ शुरू करें। बहुत तकनीकी होने के बिना, इस चर्चा के प्रयोजनों के लिए एक बहुत अच्छी परिभाषा "अभिकलन प्रदर्शन के लिए मशीन-कार्रवाई योग्य निर्देश" होगी।
यह देखते हुए कि, स्रोत कोड पीढ़ी का यह पूरा विचार गलतफहमी नहीं है?
ठीक है, आपका प्रारंभिक प्रस्ताव यह है कि कोड उत्पन्न नहीं किया जा सकता है, लेकिन मैं उस प्रस्ताव को अस्वीकार करता हूं। यदि आप "कोड" की मेरी परिभाषा को स्वीकार करते हैं, तो सामान्य रूप से कोड पीढ़ी के साथ कोई वैचारिक समस्या नहीं होनी चाहिए।
यही है, अगर किसी चीज़ के लिए एक कोड जनरेटर है, तो क्यों नहीं उस चीज़ को एक उचित फ़ंक्शन बनाते हैं जो आवश्यक पैरामीटर प्राप्त कर सकता है और सही क्रिया करता है जो "उत्पन्न" कोड होगा?
खैर यह एक पूरी तरह से अलग सवाल है, इसकी प्रकृति के बारे में कोड पीढ़ी को नियोजित करने के कारण के बारे में। आप विकल्प का प्रस्ताव कर रहे हैं कि कोड जनरेटर को लिखने या उपयोग करने के बजाय, एक फ़ंक्शन लिखता है जो सीधे परिणाम की गणना करता है। लेकिन किस भाषा में? वे दिन होते हैं जब कोई भी सीधे मशीन कोड में लिखा होता है, और यदि आप अपना कोड किसी अन्य भाषा में लिखते हैं, तो आप एक प्रोग्राम बनाने के लिए एक कोड जनरेटर पर निर्भर करते हैं और / या कोडांतरक एक प्रोग्राम बनाते हैं जो वास्तव में चलता है।
फिर, आप जावा या सी या लिस्प में लिखना पसंद करते हैं या जो भी हो? यहां तक कि कोडांतरक? मैं दावा करता हूं कि यह कम से कम भाग में है क्योंकि वे भाषाएं डेटा और संचालन के लिए सार प्रदान करती हैं जो आपके द्वारा किए जाने वाले संगणना के विवरण को व्यक्त करना आसान बनाती हैं।
अधिकांश उच्च-स्तरीय कोड जनरेटर का भी यही हाल है। प्रोटोटाइप मामले शायद स्कैनर और पार्सर जनरेटर जैसे हैं lex
और yacc
। हां, आप C या सीधे अपनी पसंद की किसी अन्य प्रोग्रामिंग भाषा (यहां तक कि कच्चे मशीन कोड) में एक स्कैनर और एक पार्सर लिख सकते हैं, और कभी-कभी एक करता है। लेकिन किसी भी महत्वपूर्ण जटिलता की समस्या के लिए, उच्च-स्तरीय, विशेष प्रयोजन की भाषा जैसे कि lex या yacc का उपयोग करना हाथ से लिखे गए कोड को लिखने, पढ़ने और बनाए रखने में आसान बनाता है। आमतौर पर बहुत छोटा है, भी।
आपको यह भी विचार करना चाहिए कि "कोड जनरेटर" से आपका वास्तव में क्या मतलब है। मैं सी प्रीप्रोसेसिंग और कोड पीढ़ी में अभ्यास करने के लिए सी ++ टेम्पलेट्स की तात्कालिकता पर विचार करूंगा; क्या आपको इन पर आपत्ति है? यदि नहीं, तो मुझे लगता है कि आपको कुछ मानसिक जिम्नास्टिक प्रदर्शन करने की आवश्यकता होगी ताकि उन्हें स्वीकार किया जा सके लेकिन कोड पीढ़ी के अन्य स्वादों को खारिज कर दिया।
यदि यह प्रदर्शन कारणों से किया जा रहा है, तो यह संकलक की कमी की तरह लगता है।
क्यों? आप मूल रूप से यह स्वीकार कर रहे हैं कि किसी के पास एक सार्वभौमिक कार्यक्रम होना चाहिए जिसमें उपयोगकर्ता डेटा फ़ीड करता है, कुछ को "निर्देश" और अन्य को "इनपुट" के रूप में वर्गीकृत किया जाता है, और जो गणना करने के लिए आगे बढ़ता है और अधिक डेटा उत्सर्जित करता है जिसे हम "आउटपुट" कहते हैं। (एक निश्चित दृष्टिकोण से, कोई भी इस तरह के एक सार्वभौमिक कार्यक्रम को "ऑपरेटिंग सिस्टम" कह सकता है।) लेकिन आप यह क्यों मानते हैं कि इस तरह के सामान्य प्रयोजन कार्यक्रम को अनुकूलित करने में एक कंपाइलर उतना ही प्रभावी होना चाहिए जितना कि यह एक अधिक विशिष्ट को अनुकूलित करने में है। कार्यक्रम? दोनों कार्यक्रमों की अलग-अलग विशेषताएं और अलग-अलग क्षमताएं हैं।
यदि इसे दो भाषाओं को जोड़ने के लिए किया जा रहा है, तो यह इंटरफ़ेस लाइब्रेरी की कमी की तरह लगता है।
आप कहते हैं कि जैसे कि यूनिवर्सल-टू-कुछ-डिग्री इंटरफ़ेस लाइब्रेरी होना आवश्यक रूप से एक अच्छी बात होगी। शायद यह होगा, लेकिन कई मामलों में ऐसा पुस्तकालय बड़ा और लिखना और बनाए रखना मुश्किल होगा, और शायद धीमा भी। और अगर वास्तव में ऐसा जानवर हाथ में मौजूद किसी विशेष समस्या को पूरा करने के लिए मौजूद नहीं है, तो आप कौन हैं जो इस बात पर जोर देते हैं कि जब एक कोड जनरेशन दृष्टिकोण समस्या को और अधिक तेजी से और आसानी से हल कर सकता है?
क्या मुझसे कोई चूक हो रही है?
कई बातें, मुझे लगता है।
मुझे पता है कि कोड डेटा भी है। जो मुझे समझ नहीं आ रहा है, वह स्रोत कोड क्यों है? क्यों इसे एक समारोह में नहीं बनाया जाए जो मापदंडों को स्वीकार कर सके और उन पर कार्रवाई कर सके?
कोड जनरेटर एक भाषा में लिखे गए कोड को एक अलग, आमतौर पर निचले स्तर की भाषा में कोड में बदल देते हैं। आप पूछ रहे हैं, फिर, लोग कई भाषाओं का उपयोग करके कार्यक्रम क्यों लिखना चाहते हैं, और विशेष रूप से क्यों वे विषयगत विभिन्न स्तरों की भाषाओं को मिलाना चाहते हैं।
लेकिन मैं उस पर पहले से ही छुआ। कोई उस कार्य के लिए अपनी स्पष्टता और अभिव्यक्ति के आधार पर किसी विशेष कार्य के लिए एक भाषा चुनता है। छोटे कोड के रूप में Inasmuch में औसतन कम कीड़े होते हैं और इसे बनाए रखना आसान होता है, उच्च स्तर की भाषाओं की ओर भी पूर्वाग्रह होता है, कम से कम बड़े पैमाने पर काम के लिए। लेकिन एक जटिल कार्यक्रम में कई कार्य शामिल होते हैं, और अक्सर उनमें से कुछ को एक भाषा में अधिक प्रभावी ढंग से संबोधित किया जा सकता है, जबकि अन्य अधिक प्रभावी ढंग से या अधिक संक्षिप्त रूप से दूसरे में संबोधित किए जाते हैं। कभी-कभी नौकरी के लिए सही उपकरण का उपयोग करने का मतलब कोड पीढ़ी को नियोजित करना है।