Intentional programming
कंप्यूटर प्रोग्रामिंग में, इरादतन प्रोग्रामिंग चार्ल्स सिमोनी द्वारा विकसित एक प्रोग्रामिंग प्रतिमान है जो सॉफ्टवेयर स्रोत कोड में उस सटीक इरादे को कूटबद्ध करता है जिसे प्रोग्रामर (या उपयोगकर्ता) अपने काम की कल्पना करते समय ध्यान में रखते हैं। एब्स्ट्रैक्शन के उचित स्तर का उपयोग करने से, जिस पर प्रोग्रामर सोच रहा है, कंप्यूटर प्रोग्राम बनाना और उनका रखरखाव करना आसान हो जाता है। इरादों के लिए चिंताओं को अलग करके और उन्हें कैसे संचालित किया जा रहा है, सॉफ्टवेयर अधिक मॉड्यूलर हो जाता है और अधिक पुनः प्रयोज्य सॉफ्टवेयर कोड की अनुमति देता है। इरादतन प्रोग्रामिंग को माइक्रोसॉफ्ट के पूर्व मुख्य वास्तुकार चार्ल्स सिमोनी द्वारा विकसित किया गया था, जिन्होंने माइक्रोसॉफ्ट रिसर्च में एक टीम का नेतृत्व किया, जिसने प्रतिमान विकसित किया और आईपी (इरादतन प्रोग्रामिंग के लिए) नामक एक एकीकृत विकास वातावरण (आईडीई) का निर्माण किया जो प्रतिमान का प्रदर्शन करता है। माइक्रोसॉफ्ट ने इरादतन प्रोग्रामिंग प्रतिमान को उत्पाद नहीं बनाने का फैसला किया, क्योंकि 2000 के दशक की शुरुआत में माइक्रोसॉफ्ट जावा को अपनाने का मुकाबला करने के लिए सी #और. नेट को जारी कर रहा था। चार्ल्स सिमोनी ने माइक्रोसॉफ्ट की मंजूरी के साथ, अपने विचार को माइक्रोसॉफ्ट से बाहर निकालने और खुद इसका व्यावसायीकरण करने का फैसला किया। उन्होंने इसे आगे बढ़ाने के लिए इंटेंशनल सॉफ्टवेयर कंपनी की स्थापना की। माइक्रोसॉफ्ट ने इंटेंशनल प्रोग्रामिंग पेटेंट का लाइसेंस दिया था जिसे सिमोनी ने माइक्रोसॉफ्ट में रहते हुए हासिल किया था, लेकिन इंटेंशनल सॉफ्टवेयर के लिए कोई स्रोत कोड नहीं था। माइक्रोसॉफ्ट रिसर्च में विकसित किए गए इंटेंशनल प्रोग्रामिंग का एक अवलोकन पुस्तक जेनेरेटिव प्रोग्रामिंगः मेथड्स, टूल्स एंड एप्लीकेशन के अध्याय 11 में दिया गया है। विकास चक्र जैसा कि सिमोनी द्वारा कल्पना की गई है, इंटेंशनल प्रोग्रामिंग प्रतिमान के माध्यम से एक नया अनुप्रयोग विकसित करना निम्नानुसार आगे बढ़ता है। एक प्रोग्रामर एक डब्ल्यू. वाई. एस. आई. डब्ल्यू. वाई. वाई. जी. जैसा वातावरण बनाता है जो किसी दिए गए समस्या क्षेत्र (जैसे उत्पादकता अनुप्रयोग या जीवन बीमा) के लिए योजना और व्यावसायिक ज्ञान के संकेतन का समर्थन करता है। उपयोगकर्ता तब अपने इरादों को पकड़ने के लिए इस वातावरण का उपयोग करते हैं, जो अमूर्तता के उच्च स्तर पर दर्ज किए जाते हैं। पर्यावरण इन इरादों पर काम कर सकता है और उपयोगकर्ता को अर्थपूर्ण रूप से समृद्ध दस्तावेज़ बनाने में सहायता कर सकता है जिन्हें स्प्रेडशीट के समान संसाधित और निष्पादित किया जा सकता है। अभिलिखित ज्ञान एक मूल्यांकनकर्ता द्वारा निष्पादित किया जाता है या अंतिम कार्यक्रम उत्पन्न करने के लिए संकलित किया जाता है। क्रमिक परिवर्तन केवल डब्ल्यू. वाई. एस. आई. डब्ल्यू. वाई. जी. स्तर पर किए जाते हैं। वर्ड प्रोसेसर, स्प्रेडशीट या प्रेजेंटेशन सॉफ्टवेयर के विपरीत, एक इरादतन वातावरण में व्यक्त किए जाने वाले इरादों की संरचना और शब्दार्थ के लिए अधिक समर्थन होता है, और इंटरैक्टिव दस्तावेज़ बना सकते हैं जो उपयोगकर्ता जो हासिल करने की कोशिश कर रहा है उसे अधिक समृद्ध रूप से पकड़ते हैं। एक विशेष मामला तब होता है जब सामग्री प्रोग्राम कोड होती है, और पर्यावरण एक बुद्धिमान आई. डी. ई. बन जाता है। स्रोत कोड भंडारण और प्रस्तुति को अलग करना इरादतन प्रोग्रामिंग के लाभों की कुंजी वह डोमेन कोड है जो इरादों को पकड़ता है, स्रोत कोड पाठ फ़ाइलों में संग्रहीत नहीं किया जाता है, बल्कि एक वृक्ष-आधारित भंडारण (द्विआधारी या एक्स. एम. एल. हो सकता है) में संग्रहीत किया जाता है। भंडारण प्रारूप के साथ पर्यावरण का कड़ा एकीकरण डेटाबेस सामान्यीकरण की कुछ अच्छी विशेषताओं को स्रोत कोड में लाता है। प्रत्येक परिभाषा को एक अद्वितीय पहचान देकर और चर और प्रचालक के नाम को बिल्कुल एक स्थान पर संग्रहीत करके प्रचुरता को समाप्त कर दिया जाता है। इससे घोषणाओं को संदर्भों से आंतरिक रूप से अलग करना आसान हो जाता है, और पर्यावरण उन्हें अलग तरह से दिखा सकता है। एक प्रोग्राम में व्हाइटस्पेस को भी स्रोत कोड के हिस्से के रूप में संग्रहीत नहीं किया जाता है, और एक परियोजना पर काम करने वाला प्रत्येक प्रोग्रामर स्रोत का एक इंडेंटेशन प्रदर्शन चुन सकता है। अधिक मौलिक दृश्यों में कथन सूचियों को नेस्टेड बॉक्स के रूप में दिखाना, तर्क द्वार के रूप में सशर्त अभिव्यक्तियों को संपादित करना या चीनी में नामों को फिर से प्रस्तुत करना शामिल है। यह प्रणाली सी + + और जावा जैसी लोकप्रिय भाषाओं के लिए एक सामान्यीकृत भाषा का उपयोग करती है, जबकि पर्यावरण के उपयोगकर्ताओं को एफिल और अन्य भाषाओं के विचारों के साथ मिश्रण और मिलान करने देती है। अक्सर डोमेन-विशिष्ट भाषाओं के माध्यम से भाषा-उन्मुख प्रोग्रामिंग के समान संदर्भ में उल्लेख किया जाता है, और पहलू-उन्मुख प्रोग्रामिंग, आई. पी. उत्पादक प्रोग्रामिंग में कुछ सफलताएं प्रदान करने का उद्देश्य रखता है। ये तकनीकें डेवलपर्स को किसी भी नई भाषा के लिए एक पूर्ण संकलक और संपादक लिखने में निवेश किए बिना डोमेन-विशिष्ट संरचनाओं को पकड़ने के लिए भाषा वातावरण का विस्तार करने की अनुमति देती हैं। प्रोग्रामिंग उदाहरण एक जावा प्रोग्राम जो 1 से 10 तक की संख्याओं को एक घुंघराले कोष्ठक वाक्यविन्यास का उपयोग करके लिखता है, इस तरह दिख सकता हैः के लिए (पूर्णांक i = 1; i <= 10; i + +) {System.out.println ("संख्या है" + i);} उपरोक्त कोड में अधिकांश प्रोग्रामिंग भाषाओं का एक सामान्य निर्माण होता है, बाउंडेड लूप, इस मामले में निर्माण के लिए द्वारा दर्शाया जाता है। कोड, जब संकलित किया जाता है, लिंक किया जाता है और चलाया जाता है, तो 10 बार लूप होगा, इसे प्रिंट करने के बाद हर बार i के मूल्य में वृद्धि होगी। लेकिन यह कोड प्रोग्रामर के इरादों को नहीं पकड़ता है, अर्थात् "1 से 10 तक की संख्याओं को छापना"। इस सरल मामले में, एक प्रोग्रामर को कोड को बनाए रखने के लिए कहा जाता है, जो संभवतः यह पता लगा सकता है कि इसका उद्देश्य क्या है, लेकिन यह हमेशा इतना आसान नहीं होता है। लूप जो कई पंक्तियों या पृष्ठों में फैले हुए हैं, उन्हें समझना बहुत मुश्किल हो सकता है, विशेष रूप से यदि मूल प्रोग्रामर अस्पष्ट लेबल का उपयोग करता है। परंपरागत रूप से कोड के इरादे को इंगित करने का एकमात्र तरीका स्रोत कोड टिप्पणियों को जोड़ना था, लेकिन अक्सर टिप्पणियों को जोड़ा नहीं जाता है, या अस्पष्ट होते हैं, या मूल रूप से वर्णित स्रोत कोड के साथ समन्वय से बाहर हो जाते हैं। इरादतन प्रोग्रामिंग प्रणालियों में उपरोक्त लूप को कुछ स्तर पर दर्शाया जा सकता है, जैसा कि "1 से 10 तक की संख्याओं को प्रिंट करें"। सिस्टम तब स्रोत कोड उत्पन्न करने के लिए इरादों का उपयोग करेगा, संभवतः उपरोक्त कोड के समान कुछ। मुख्य अंतर यह है कि जानबूझकर प्रोग्रामिंग सिस्टम शब्दार्थ स्तर को बनाए रखते हैं, जिसका स्रोत कोड में अभाव है, और जो बड़े कार्यक्रमों में पठनीयता को नाटकीय रूप से आसान बना सकता है। यद्यपि अधिकांश भाषाओं में कुछ प्रकार के अमूर्तता को पकड़ने के लिए तंत्र होते हैं, आईपी, भाषाओं के लिस्प परिवार की तरह, पूरी तरह से नए तंत्र को जोड़ने की अनुमति देता है। इस प्रकार, यदि कोई विकासकर्ता सी जैसी भाषा के साथ शुरुआत करता है, तो वे संकलक विकासकर्ताओं द्वारा उन्हें जोड़ने की प्रतीक्षा किए बिना सी + + जैसी सुविधाओं के साथ भाषा का विस्तार करने में सक्षम होंगे। सादृश्य से, प्रोग्रामरों द्वारा केवल वर्गों और प्रक्रियाओं की तुलना में कई अधिक शक्तिशाली अभिव्यक्ति तंत्रों का उपयोग किया जा सकता है। आइडेंटिटी आईपी आइडेंटिटी की अवधारणा पर केंद्रित है। चूँकि अधिकांश प्रोग्रामिंग भाषाएँ स्रोत कोड को सादे पाठ के रूप में दर्शाती हैं, वस्तुओं को नामों द्वारा परिभाषित किया जाता है, और उनकी विशिष्टता का अनुमान संकलक द्वारा लगाया जाता है। उदाहरण के लिए, एक ही प्रतीकात्मक नाम का उपयोग विभिन्न चर, प्रक्रियाओं या यहाँ तक कि प्रकारों को भी नामित करने के लिए किया जा सकता है। कोड में जो कई पृष्ठों तक फैला हुआ है-या, विश्व स्तर पर दिखाई देने वाले नामों के लिए, कई फ़ाइलों के लिए-यह बताना बहुत मुश्किल हो सकता है कि कौन सा प्रतीक किस वास्तविक वस्तु को संदर्भित करता है। यदि कोई नाम बदला जाता है, तो जिस कोड में इसका उपयोग किया जाता है, उसकी सावधानीपूर्वक जांच की जानी चाहिए। इसके विपरीत, एक आई. पी. प्रणाली में, सभी परिभाषाएँ न केवल प्रतीकात्मक नाम निर्धारित करती हैं, बल्कि वस्तुओं को अद्वितीय निजी पहचानकर्ता भी प्रदान करती हैं। इसका मतलब है कि आईपी विकास वातावरण में, एक चर या प्रक्रिया का प्रत्येक संदर्भ केवल एक नाम नहीं है-यह मूल इकाई के लिए एक कड़ी है। इसका प्रमुख लाभ यह है कि यदि किसी इकाई का नाम बदल दिया जाता है, तो कार्यक्रम में इसके सभी संदर्भ मान्य रहते हैं (संदर्भित अखंडता के रूप में जाना जाता है)। इसका मतलब यह भी है कि यदि एक ही नाम का उपयोग अलग-अलग नेमस्पेसों में अद्वितीय परिभाषाओं के लिए किया जाता है (जैसे ". to _ स्ट्रिंग ()"), तो एक ही नाम लेकिन अलग-अलग पहचान वाले संदर्भों का नाम नहीं बदला जाएगा, जैसा कि कभी-कभी वर्तमान संपादकों में खोज/प्रतिस्थापन के साथ होता है। यह सुविधा कार्यक्रम के बहु-भाषा संस्करणों को भी आसान बनाती है; इसमें सभी परिभाषाओं के लिए अंग्रेजी भाषा के नामों का एक समूह हो सकता है और साथ ही जापानी भाषा के नामों का एक समूह हो सकता है जिन्हें अपनी इच्छानुसार बदला जा सकता है। कार्यक्रम में प्रत्येक परिभाषित वस्तु के लिए एक अद्वितीय पहचान होने से स्वचालित रीफैक्टरिंग कार्यों को करना भी आसान हो जाता है, साथ ही संस्करण प्रणालियों में कोड चेक-इन को सरल बनाया जाता है। उदाहरण के लिए, कई वर्तमान कोड सहयोग प्रणालियों में (जैसे। गिट), जब दो प्रोग्रामर उस संघर्ष में परिवर्तन करते हैं (अर्थात। यदि एक प्रोग्रामर किसी फ़ंक्शन का नाम बदलता है जबकि दूसरा उस फ़ंक्शन में एक पंक्ति को बदलता है), तो संस्करण प्रणाली सोचेगी कि एक प्रोग्रामर ने एक नया फ़ंक्शन बनाया है जबकि दूसरे ने एक पुराने फ़ंक्शन को संशोधित किया है। आई. पी. संस्करण प्रणाली में, यह पता चलेगा कि एक प्रोग्रामर ने केवल एक नाम बदला है जबकि दूसरे ने कोड बदला है। विस्तार आई. पी. प्रणालियों के स्तर भी विस्तार के कई स्तर प्रदान करते हैं, जिससे प्रोग्रामर को "ज़ूम इन" या आउट करने की अनुमति मिलती है। उपरोक्त उदाहरण में, प्रोग्रामर एक स्तर प्राप्त करने के लिए ज़ूम आउट कर सकता है जो कुछ इस तरह कहेगाः <<संख्याओं को 1 से 10 तक प्रिंट करें> इस प्रकार आईपी सिस्टम बड़ी मात्रा में स्व-प्रलेखन कर रहे हैं, जिससे प्रोग्रामर समग्र रूप से प्रोग्राम की एक अच्छी उच्च-स्तरीय तस्वीर रख सकता है। इसी तरह के काम ऐसी परियोजनाएं हैं जो उच्च स्तर के अमूर्तता के साथ कोड बनाने के लिए समान विचारों का फायदा उठाती हैं। उनमें से हैंः कॉन्सेप्ट प्रोग्रामिंग लैंग्वेज-ओरिएंटेड प्रोग्रामिंग (एल. ओ. पी.) डोमेन-स्पेसिफिक लैंग्वेज (डी. एस. एल.) प्रोग्राम ट्रांसफॉर्मेशन सिमेंटिक-ओरिएंटेड प्रोग्रामिंग (एस. ओ. पी.) साक्षर प्रोग्रामिंग मॉडल-संचालित वास्तुकला (एम. डी. ए.) सॉफ्टवेयर कारखाना मेटाप्रोग्रामिंग लिस्प (प्रोग्रामिंग भाषा) प्रदर्शन द्वारा स्वचालित प्रोग्रामिंग ऑब्जेक्ट डेटाबेस प्रोग्रामिंग भी देखें आर्टेफाकटुर सिमेंटिक रिज़ॉल्यूशन ट्री स्ट्रक्चर एडिटर संदर्भ बाहरी लिंक इंटेंशनल सॉफ्टवेयर-चार्ल्स सिमोनी की कंपनी द डेथ ऑफ कंप्यूटर लैंग्वेजेज, द बर्थ ऑफ इंटेंशनल प्रोग्रामिंग, चार्ल्स सिमोनी की एक तकनीकी रिपोर्ट (1995) इंटेंशनल प्रोग्रामिंग-इनोवेशन इन द लिगेसी एज, चार्ल्स सिमोनी की एक वार्ता (1996) चार्ल्स सिमोनी के साथ साक्षात्कार - मार्टिन फाउलर का सामान्य वर्ग के उपकरणों पर लेख जिसका एक उदाहरण इरादतन प्रोग्रामिंग है। "कुछ भी आप कर सकते हैं, मैं मेटा कर सकता हूं" मंगलवार, 9 जनवरी 2007, स्कॉट रोसेनबर्ग, प्रौद्योगिकी समीक्षा उस दिन की प्रतीक्षा कर रहा है जब हर कोई सॉफ्टवेयर लिखते हैं, द न्यूयॉर्क टाइम्स, 28 जनवरी 2007 क्या प्रोग्रामिंग एन्क्रिप्शन का एक रूप है?, चार्ल्स सिमोनी द्वारा (2005) चार्ल्स सिमोनी द्वारा उपयुक्त स्तर का सार (2005) कार्यक्रमों की सूचना सामग्री, चार्ल्स सिमोनी द्वारा (2005) फीचर एक्स को हानिकारक माना गया, चार्ल्स सिमोनी द्वारा (2005) नोट्स एंड प्रोग्रामिंग लैंग्वेजेज, चार्ल्स सिमोनी द्वारा (2005) मार्क एडल द्वारा (2005) एक डेवलपर से व्यक्तिगत अवलोकन (2005) माइक्रोसॉफ्ट रिसर्च का शैक्षिक वीडियो अपने इरादे प्रोग्रामिंग सिस्टम (ए. एस.) की शुरुआत कर रहा है।