आप मेरा मन पढ़ रहे हैं।
जब मैंने कुछ साल पहले कंपाइलर्स का कोर्स किया, तो मुझे पता चला कि यदि आप एएसटी लेते हैं और इसे क्रमबद्ध करते हैं, तो सामान्य इन्फिक्स नोटेशन के बजाय उपसर्ग संकेतन के साथ, और पूरे विवरणों को परिसीमन करने के लिए कोष्ठक का उपयोग करते हैं, तो आपको लिस्प मिलता है। जबकि मैंने अपने अंडरग्रेजुएट अध्ययनों में स्कीम (लिस्प की एक बोली) के बारे में सीखा है, मैं वास्तव में इसके लिए प्रशंसा प्राप्त नहीं कर पाया। मुझे निश्चित रूप से उस पाठ्यक्रम के परिणामस्वरूप, लिस्प और इसकी बोलियों के लिए सराहना मिली।
समस्याएँ जो आप प्रस्तावित करते हैं:
एक ग्राफिकल वातावरण में एएसटी की रचना करना कठिन / धीमा है। आखिरकार, हम में से अधिकांश तेजी से टाइप कर सकते हैं जैसे हम एक माउस को स्थानांतरित कर सकते हैं। और फिर भी, एक उभरता हुआ सवाल है "आप टैबलेट के साथ प्रोग्राम कोड कैसे लिखते हैं?" हार्डवेयर कीबोर्ड वाले लैपटॉप / लैपटॉप की तुलना में टैबलेट पर टाइप करना धीमा / बोझिल होता है। यदि आप एक पैलेट से घटकों को बड़े पैमाने पर कैनवास पर खींचकर और ड्रॉप करके एएसटी बना सकते हैं, तो टैबलेट पर टचस्क्रीन डिवाइस प्रोग्रामिंग एक वास्तविक चीज बन सकती है।
हमारे कुछ मौजूदा उपकरणों में से कुछ भी इसका समर्थन नहीं करते हैं। हमारे पास विकास के दशकों में तेजी से जटिल आईडीई और तेजी से बुद्धिमान संपादकों को बनाने में लिपटा हुआ है। हमारे पास पाठ को सुधारने, पाठ की तुलना करने, पाठ की खोज करने के लिए ये सभी उपकरण हैं। वे उपकरण कहां हैं जो एक पेड़ के पार एक नियमित अभिव्यक्ति खोज के बराबर कर सकते हैं? या दो पेड़ों का एक अंतर? ये सभी चीजें आसानी से पाठ के साथ की जाती हैं। लेकिन वे केवल शब्दों की तुलना कर सकते हैं। एक चर नाम बदलें, जैसे कि शब्द अलग हैं लेकिन अर्थ अर्थ समान है, और वे अलग-अलग उपकरण मुसीबत में चलाते हैं। ऐसे उपकरण, जिन्हें पाठ के बजाय एएसटीएस पर संचालित करने के लिए विकसित किया गया है, आपको अर्थ अर्थ की तुलना करने के करीब लाने की अनुमति देगा। यह एक अच्छी बात होगी।
एएसटी में प्रोग्राम सोर्स कोड को बदलते समय अपेक्षाकृत अच्छी तरह से समझा जाता है (हमारे पास कंपाइलर और दुभाषिए हैं, हम नहीं?), प्रोग्राम कोड में एएसटी को बदलना इतना-ठीक नहीं है। एक बड़ी, समग्र संख्या प्राप्त करने के लिए दो अभाज्य संख्याओं को गुणा करना अपेक्षाकृत सरल है, लेकिन एक बड़ी, समग्र संख्या को वापस अपराधों में विभाजित करना अधिक कठिन है; जहां हम एएसटी को विघटित बनाम पार्सिंग के साथ हैं। यहीं से भाषाओं के बीच मतभेद एक मुद्दा बन जाता है। यहां तक कि एक विशेष भाषा के भीतर, एएसटी को विघटित करने के कई तरीके हैं। उदाहरण के लिए वस्तुओं के संग्रह के माध्यम से परिवर्तन करना और किसी प्रकार का परिणाम प्राप्त करना। एक सरणी के माध्यम से पुनरावृत्ति करते हुए, लूप के लिए उपयोग करें? यह कॉम्पैक्ट और तेज होगा, लेकिन सीमाएं हैं। किसी प्रकार के एक Iterator का उपयोग करें, एक संग्रह पर काम कर रहा है? वह संग्रह परिवर्तनशील आकार का हो सकता है, जो गति के (संभव) खर्च पर लचीलापन जोड़ता है। मानचित्र छोटा करना? अधिक जटिल, लेकिन अंतर्निहित समानांतर। और यह सिर्फ आपकी प्राथमिकताओं के आधार पर जावा के लिए है।
समय के साथ, विकास के प्रयास को बढ़ाया जाएगा और हम टचस्क्रीन और एएसटी का उपयोग करके विकसित होंगे। टंकण एक आवश्यकता से कम हो जाएगा। मैं देख रहा हूं कि हम जहां हैं, वहां से तार्किक प्रगति के रूप में, हम कंप्यूटर का उपयोग कैसे करते हैं, यह देखते हुए कि आज # 1 हल होगा।
हम पहले से ही पेड़ों के साथ काम कर रहे हैं। लिस्प महज क्रमबद्ध एएसटीएस है। XML (और HTML, विस्तार से) सिर्फ एक क्रमबद्ध पेड़ है। खोज करने के लिए, हमारे पास पहले से ही कुछ प्रोटोटाइप हैं: एक्सपीथ और सीएसएस (क्रमशः एक्सएमएल और एचटीएमएल के लिए)। जब चित्रमय उपकरण बनाए जाते हैं जो हमें CSS-शैली के चयनकर्ताओं और संशोधक बनाने की अनुमति देते हैं, तो हम # 2 के भाग को हल करेंगे। जब उन चयनकर्ताओं को रेगेक्स का समर्थन करने के लिए बढ़ाया जा सकता है, तो हम करीब होंगे। अभी भी दो एक्सएमएल या एचटीएमएल डॉक्स की तुलना करने के लिए एक अच्छा ग्राफिकल डिफरेंशियल टूल की तलाश है। जैसे ही लोग उन उपकरणों को विकसित करते हैं, # 2 हल हो जाएगा। लोग पहले से ही ऐसी चीजों पर काम कर रहे हैं; वे अभी वहाँ नहीं हैं, फिर भी।
जिस तरह से मैं उन एएसटी को प्रोग्रामिंग लैंग्वेज टेक्स्ट को डिकम्पोज करने में सक्षम होने के लिए देख सकता हूं वह कुछ लक्ष्य-प्राप्ति होगी। यदि मैं मौजूदा कोड को संशोधित कर रहा हूं, तो लक्ष्य को एक एल्गोरिथ्म द्वारा प्राप्त किया जा सकता है जो मेरे संशोधित कोड को शुरुआती कोड (न्यूनतम पाठ्य क्रम) के समान संभव बनाता है। अगर मैं स्क्रैच से कोड लिख रहा हूं, तो लक्ष्य सबसे छोटा, सबसे कठोर कोड (संभवतः लूप के लिए) हो सकता है। या यह कोड हो सकता है जो कुशलता से संभव के रूप में समानांतर होता है (संभवतः एक नक्शा / कम करें या सीएसपी को शामिल करने वाला कुछ)। इसलिए, एक ही एएसटी काफी भिन्न कोड में परिणाम कर सकता है, यहां तक कि एक ही भाषा में भी, इस आधार पर कि लक्ष्य कैसे निर्धारित किए गए थे। ऐसी प्रणाली विकसित करने से # 3 का समाधान होगा। यह कम्प्यूटेशनल रूप से जटिल होगा, जिसका अर्थ है कि हमें किसी प्रकार के क्लाइंट-सर्वर की व्यवस्था की आवश्यकता होगी,