नियंत्रण तालिका
नियंत्रण तालिकाएँ वे तालिकाएँ होती हैं जो नियंत्रण प्रवाह को नियंत्रित करती हैं या कार्यक्रम नियंत्रण में एक प्रमुख भूमिका निभाती हैं। नियंत्रण तालिका की संरचना या सामग्री के बारे में कोई कठोर नियम नहीं हैं - इसकी योग्यता विशेषता केंद्रीय प्रसंस्करण इकाई या दुभाषिया (संगणन) द्वारा निष्पादन के माध्यम से किसी तरह से प्रवाह को नियंत्रित करने की क्षमता है। ऐसी तालिकाओं के अभिकल्पना को कभी-कभी तालिका-संचालित अभिकल्पना कहा जाता है[1][2] (चूंकि यह सामान्यत: सीधे कार्यावधि तालिका के अतिरिक्त बाहरी तालिका से स्वचालित रूप से कूट उत्पन्न करने को संदर्भित करता है)। कुछ स्थितियों में, नियंत्रण तालिकाएँ परिमित-अवस्था मशीन | परिमित-अवस्था-मशीन-आधारित स्वचालित-आधारित क्रमादेशन के विशिष्ट कार्यान्वयन हो सकती हैं। यदि नियंत्रण तालिका के कई पदानुक्रमित स्तर हैं तो वे पदानुक्रमित अवस्था मशीन के समतुल्य तरीके से व्यवहार कर सकते हैं[3]
नियंत्रण तालिकाओं में अधिकांशत: सशर्त (क्रमादेशन) या उपनेमिका संदर्भ (संगणक विज्ञान) के समतुल्य होते हैं, जो सामान्यत: संघ सूची में उनके सापेक्ष स्तंभ स्थिति से निहित होते हैं। नियंत्रण तालिकाएँ समान आँकड़ा संरचनाओं या क्रमादेश प्रकथन को बार-बार क्रमादेशन करने की आवश्यकता को कम करती हैं। अधिकांश तालिकाओं की द्वि-आयामी प्रकृति क्रमादेश कूट की एक-आयामी प्रकृति की तुलना में उन्हें देखने और अद्यतन करने में आसान बनाती है।
कुछ स्थितियों में, नियंत्रण तालिकाओं की सामग्री को बनाए रखने के लिए गैर-क्रमादेशक को सौंपा जा सकता है। उदाहरण के लिए, यदि उपयोगकर्ता द्वारा दर्ज किए गए खोज वाक्यांश में एक निश्चित वाक्यांश सम्मलित है, तो एक तालिका में एक यूआरएल (वेब पता) निर्दिष्ट किया जा सकता है जो यह नियंत्रित करता है कि खोज उपयोगकर्ता को कहाँ ले जाया जाता है। यदि वाक्यांश में स्कर्ट(किनारा) है, तो तालिका उपयोगकर्ता को www.shopping.example/catalogs/skirts पर ले जा सकती है, जो कि स्कर्ट उत्पाद सूची पृष्ठ है। (उदाहरण यूआरएल पद्धति में काम नहीं करता है)। क्रमादेशक के अतिरिक्त विपणन कर्मी ऐसी तालिका का प्रबंधन कर सकते हैं।
विशिष्ट उपयोग
- निविष्ट मानों का परिवर्तन:
- बाद में शाखन या सूचक (संगणक क्रमादेशन) तालिका देखने के लिए एक सहयोगी सरणी
- नियंत्रण प्रवाह को बदलने के लिए क्रमादेश का नाम, संबंधित उपनेमिका संख्या, सूचक (क्रमादेशन भाषा) या क्रमादेश अतर्लव (संगणक विज्ञान)
- अवस्था संक्रमण फलन के लिए नियंत्रण चर (क्रमादेशन) का उपयोग करके अनुवृत्त-संचालित क्रमादेशन में एक मुख्य प्रस्पंद को नियंत्रित करना
- ऑनलाइन लेनदेन प्रसंस्करण अनुप्रयोगों के लिए कार्यक्रम चक्र को नियंत्रित करना
अधिक उन्नत उपयोग
- एक दुभाषिया (संगणन) द्वारा संसाधित आभासी मशीन के लिए आभासी निर्देशों के रूप में कार्य करना।
- बाईट कूट के समान - लेकिन सामान्यत: तालिका संरचना द्वारा निहित संचालन के साथ।
तालिका संरचना
तालिकाओं में निश्चित या चर लंबाई कूट के कई आयाम हो सकते हैं और सामान्यत: संगणक मंच के बीच सॉफ्टवेयर सुवाह्य होती है, जिसके लिए केवल दुभाषिया में बदलाव की आवश्यकता होती है, न कि स्वयं कलन विधि - जिसका तर्क तालिका संरचना और सामग्री के अंदर अनिवार्य रूप से सन्निहित है। तालिका की संरचना एक बहुघाती (आँकड़ा संरचना) साहचर्य सरणी के समान हो सकती है, जहां एक आँकड़ा मान (या आँकड़ा मानों का संयोजन) को एक या एक से अधिक कार्यों के लिए योजना बद्ध किया जा सकता है।
एक आयामी तालिका
शायद इसके सबसे सरल कार्यान्वयन में, एक नियंत्रण तालिका कभी-कभी असंसाधित्र आँकड़ा मान को संबंधित उपनेमिका अंतर्लब (संगणक विज्ञान), सरणी आँकड़ा संरचना या संकेतक (संगणक क्रमादेशन) में असंसाधित्र आँकड़ा मान का सीधे उपयोग करने के लिए सीधे अनुवाद करने के लिए एक आयामी तालिका हो सकती है। सरणी के सूचकांक के रूप में, या पहले से आँकड़ा पर कुछ बुनियादी अंकगणितीय प्रदर्शन करके। यह निरंतर समय में प्राप्त किया जा सकता है (बिना रैखिक खोज या द्विआधारी खोज के एक साहचर्य सरणी पर एक विशिष्ट लुकअप तालिका का उपयोग करके)। अधिकांश संगणक संरचना में, इसे दो या तीन मशीन निर्देशों में पूरा किया जा सकता है - बिना किसी तुलना या प्रस्पंद के। तकनीक को तुच्छ हैश फलन के रूप में जाना जाता है या, जब विशेष रूप से शाखा तालिकाओं के लिए उपयोग किया जाता है, दोहरा प्रेषण। इसके व्यवहार्य होने के लिए, आँकड़ा के सभी संभावित मानों की सीमा छोटी होनी चाहिए (उदाहरण के लिए एक ASCII या ईबीसीडीआईसी वर्ण मान जिसमें हेक्साडेसिमल '00' - 'FF' की सीमा होती है। यदि वास्तविक सीमा कम होने की गारंटी है इसके अतिरिक्त, सरणी को 256 बाइट्स से कम तक छोटा किया जा सकता है)।
'एक-आयामी सरणी का उपयोग करके निरंतर समय में कच्चे ASCII मानों (ए, डी, एम, एस) को नए उपनेमिका सूचकांक (1,4,3,2) में अनुवाद करने की तालिका'
(इस उदाहरण के लिए श्रेणी में अंतराल '..' के रूप में दिखाए गए हैं, जिसका अर्थ है 'अगली पंक्ति तक सभी हेक्स मान'। पहले दो पंक्ति सरणी का हिस्सा नहीं हैं)
ASCII | Hex | Array |
---|---|---|
null | 00 | 00 |
.. | .. | 00 |
@ | 40 | 00 |
A | 41 | 01 |
.. | .. | 00 |
D | 44 | 04 |
.. | .. | 00 |
M | 4D | 03 |
.. | .. | 00 |
S | 53 | 02 |
स्वचल प्ररूप-आधारित क्रमादेशन और छद्म संवादात्मक लेनदेन प्रसंस्करण में, यदि अलग-अलग क्रमादेश स्टेट्स की संख्या कम है, तो मुख्य क्रमादेश प्रस्पंद के पूरे प्रवाह को कुशलतापूर्वक निर्देशित करने के लिए एक घने अनुक्रम नियंत्रण चर का उपयोग किया जा सकता है।
सभी निविष्ट संभावनाओं को संभालने के लिए - केवल 256 विभिन्न निर्गत मानों की अनुमति देते हुए एक दो बाइट असंसाधित्र आँकड़ा मान के लिए 65,536 बाइट्स के न्यूनतम तालिका आकार की आवश्यकता होगी। हालाँकि, यह प्रत्यक्ष अनुवाद तकनीक एक (रिश्तेदार) उपनेमिका संकेतक के लिए एक पर्याप्त तीव्र अभिगम स्मृति और रूपांतरण प्रदान करती है, यदि अनुमानी,पर्याप्त तीव्र अभिगम स्मृति के साथ मिलकर इसके उपयोग की अनुमति देता है।
शाखा तालिका
एक शाखा तालिका सन्निहित मशीन कूट शाखा (संगणक विज्ञान) की एक-आयामी 'सरणी' है। शाखा/कूद निर्देश एक बहु-मार्ग शाखा को क्रमादेश लेबल पर प्रभावित करने के लिए जब तुरंत पूर्ववर्ती और अनुक्रमित शाखा द्वारा शाखाबद्ध किया जाता है। यह कभी-कभी एक स्विच प्रकथन को निष्पादित करने के लिए एक अनुकूलन संकलक द्वारा उत्पन्न होता है - बशर्ते कि निविष्ट श्रेणी छोटी और सघन हो, कुछ अंतराल के साथ (जैसा कि पिछले सरणी उदाहरण द्वारा बनाया गया है) [1]।
चूंकि काफी सुसंहत - कई समकक्षों की तुलना में If
कथन - शाखा निर्देश में अभी भी कुछ अतिरेक है, क्योंकि शाखा opcode और स्थिति कूटमास्क शाखा अंतर्लब के साथ दोहराए जाते हैं। इस अतिरेक (कम से कम अन्वायोजन भाषाओं में) को दूर करने के लिए क्रमादेश लेबल्स के लिए केवल अंतर्लब वाली कंट्रोल तालिका का निर्माण किया जा सकता है और फिर भी एक पारंपरिक शाखा तालिका की तुलना में केवल मामूली निष्पादन समय संगणनात्मक उपरिव्यय की आवश्यकता होती है।
बहु-आयामी तालिका
अधिक सामान्यतः, एक नियंत्रण तालिका को एक सत्य तालिका के रूप में या एक मुद्रित निर्णय तालिका (या कई स्तरों पर निर्णय तालिकाओं के एक पेड़ (आँकड़ा संरचना)) के निष्पादन योग्य (द्विआधारी) कार्यान्वयन के रूप में सोचा जा सकता है। उनमें (अधिकांशत: निहित) प्रस्तावात्मक सूत्र होते हैं, साथ में एक या एक से अधिक संबद्ध 'कार्य' होते हैं। ये क्रियाएं सामान्यत: जेनेरिक या कस्टम-निर्मित उपनेमिका्स द्वारा की जाती हैं जिन्हें अनुदेशांतरक (संगणन) क्रमादेश द्वारा कॉल किया जाता है। इस उदाहरण में दुभाषिया प्रभावी रूप से एक आभासी मशीन के रूप में कार्य करता है, जो नियंत्रण तालिका प्रविष्टियों को 'निष्पादित' करता है और इस प्रकार दुभाषिया के अंतर्निहित कूट की तुलना में उच्च स्तर का अमूर्तता (संगणक विज्ञान) प्रदान करता है।
भाषा पर निर्भर स्विच प्रकथन के समान पंक्तियों के साथ एक नियंत्रण तालिका का निर्माण किया जा सकता है, लेकिन निविष्ट मानों के संयोजन के लिए परीक्षण की अतिरिक्त संभावना के साथ (बूलियन बीजगणित (तर्क) शैली तार्किक संयोजन/तार्किक संयोजन स्थितियों का उपयोग करके) और संभावित रूप से एकाधिक उपनेमिका्स को कॉल करना (इसके अतिरिक्त) मूल्यों का सिर्फ एक सेट और 'शाखा से' क्रमादेश लेबल)। (स्विच प्रकथन निर्माण किसी भी मामले में उपलब्ध नहीं हो सकता है, या उच्च स्तरीय भाषाओं (उच्च स्तरीय क्रमादेशन भाषा) में भ्रमित रूप से भिन्न कार्यान्वयन है। नियंत्रण तालिका अवधारणा, तुलनात्मक रूप से, कोई आंतरिक भाषा निर्भरता नहीं है, लेकिन फिर भी इसे अलग तरह से लागू किया जा सकता है। चयनित क्रमादेशन भाषा की उपलब्ध आँकड़ा परिभाषा सुविधाओं के अनुसार।)
तालिका सामग्री
एक नियंत्रण तालिका अनिवार्य रूप से एक पारंपरिक कार्यक्रम के 'सार' का प्रतीक है, इसकी क्रमादेशन भाषा वाक्यऔर प्लेटफॉर्म पर निर्भर घटकों (जैसे IF/THEN DO.., FOR.., DO WHILE.., SWITCH, GOTO, CALL) और ' संघनित' इसके चर (जैसे निविष्ट 1), मान (जैसे 'A', 'S', 'M' और 'D'), और उपनेमिका पहचान (जैसे 'जोड़ें', 'घटाना,..' या #1, # 2,...). तालिका की संरचना में सामान्यत: सम्मलित (स्वतः निर्धारित) तर्कसंगत संक्रिया सम्मलित होते हैं - जैसे 'समानता के लिए परीक्षण', एक उपनेमिका और 'अगली संक्रिया' करना या स्वतः निर्धारित अनुक्रम का पालन करना (इन्हें क्रमादेश प्रकथन के अंदर स्पष्ट रूप से बताए जाने के अतिरिक्त - आवश्यकतानुसार अन्य क्रमादेशन प्रतिमान में)।
एक बहु-आयामी नियंत्रण तालिका में सामान्य रूप से, न्यूनतम के रूप में, मूल्य / क्रिया जोड़े होते हैं और इसमें अतिरिक्त रूप से निपात और प्रकार तंत्र की जानकारी हो सकती है, जैसे स्थान, आकार और निविष्ट या निर्गत आँकड़ा का प्रारूप, चाहे आँकड़ा रूपांतरण (या अन्य कार्यावधि) (कार्यक्रम जीवनचक्र चरण) | कार्यावधि प्रसंस्करण बारीकियाँ) प्रसंस्करण से पहले या बाद में आवश्यक है (यदि पहले से ही फलन में निहित नहीं है)। तालिका में पंक्ति में अन्य मूल्यों के आधार पर निष्पादित होने वाली सामान्य या अनुकूलित भाषा आदिम या उपनेमिका्स के लिए सरणी अनुक्रमणिका या सापेक्ष या निरपेक्ष सूचक (संगणक क्रमादेशन) सम्मलित हो सकते हैं या नहीं हो सकते हैं।
नीचे दी गई तालिका केवल 'निविष्ट1' पर लागू होती है क्योंकि तालिका में कोई विशिष्ट निविष्ट निर्दिष्ट नहीं किया गया है।
'संरचना द्वारा निहित शर्तें और क्रियाएं'
(implied) IF = (implied) perform value action value action
(मान और क्रिया की इस संपार्श्व जोड़ी में अनुवृत्त-संचालित क्रमादेशन, अर्थात् अनुवृत्त-निर्धारण' और 'अनुवृत्त-प्रहस्तन' में समानताएं हैं, लेकिन बिना (आवश्यक रूप से) अनुवृत्त की अतुल्यकालिक प्रणाली प्रकृति)
नियंत्रण तालिका के अंदर कूटबद्ध किए जा सकने वाले मानों की विविधता काफी हद तक उपयोग की जाने वाली संगणक भाषा पर निर्भर करती है। सभा की भाषा आँकड़ा प्रकारों के लिए सबसे व्यापक गुंजाइश प्रदान करती है, जिसमें (कार्यों के लिए), सीधे निष्पादन योग्य मशीन कूट का विकल्प सम्मलित है। आम तौर पर एक नियंत्रण तालिका में निविष्ट के प्रत्येक संभावित मिलान वर्ग के लिए एक संबंधित सूचक के साथ एक क्रिया उपनेमिका के लिए मान होंगे। कुछ भाषाएँ सूचक (संगणक क्रमादेशन) (सीधे) का समर्थन नहीं करने का दावा करती हैं, लेकिन इसके अतिरिक्त एक ऐरे आँकड़ा संरचना का समर्थन कर सकती हैं, जिसका उपयोग सशर्त निष्पादन करने के लिए 'आपेक्षिक उपनेमिका संख्या' का प्रतिनिधित्व करने के लिए किया जा सकता है, जिसे तालिका प्रविष्टि में मान द्वारा नियंत्रित किया जाता है ( उदाहरण के लिए एक अनुकूलित स्विच प्रकथन, प्रकथन में उपयोग के लिए - शून्य अंतराल (अर्थात एक बहुधा शाखा) के साथ अभिकल्पना किया गया)।
प्रत्येक पंक्ति (या यहां तक कि अंतःस्थापित पाठीय प्रलेखन) के ऊपर स्थित टिप्पणियां एक निर्णय तालिका को 'मानव पठनीय' प्रस्तुत कर सकती हैं, यहां तक कि 'संघनन डाउन' (कूटलेखन के बाद भी इसकी अनिवार्यता (और अभी भी मोटे तौर पर मूल कार्यक्रम विनिर्देश के साथ - विशेष रूप से यदि एक मुद्रित निर्णय तालिका, प्रत्येक अद्वितीय क्रिया की गणना, कोडलेखन आरंभ होने से पहले बनाई जाती है)। तालिका प्रविष्टियों में 'इन-फ्लाइट' या बाद के अनुकूलन के लिए कार्यावधि आँकड़े एकत्र करने के लिए वैकल्पिक रूप से काउंटर भी हो सकते हैं
तालिका स्थान
नियंत्रण तालिका स्थैतिक चर भण्डारण में, सहायक भंडारण पर, जैसे कि एक सरल संचिका या आँकड़ाबेस पर या वैकल्पिक रूप से आंशिक रूप से या पूरी तरह से मापदंडों से क्रमादेश बूटिंग समय पर गतिशील रूप से निर्मित हो सकते हैं (जो स्वयं एक तालिका में रह सकते हैं)। इष्टतम दक्षता के लिए, जब दुभाषिया इसका उपयोग करना आरंभ करता है तो तालिका स्मृतिवासी होनी चाहिए।
दुभाषिया और उपनेमिका्स
दुभाषिया को उच्च स्तरीय भाषा सहित किसी भी उपयुक्त क्रमादेशन भाषा में लिखा जा सकता है। एक उपयुक्त रूप से अभिकल्पित किया गया सामान्य क्रमादेशन दुभाषिया, जेनेरिक उपनेमिका्स के एक अच्छी तरह से चुने गए सेट के साथ (सबसे अधिक होने वाली भाषा आदिम को संसाधित करने में सक्षम), केवल नए कस्टम उपनेमिका्स के लिए अतिरिक्त पारंपरिक कूटलेखन की आवश्यकता होगी (नियंत्रण तालिका को ही निर्दिष्ट करने के अतिरिक्त)। दुभाषिया, वैकल्पिक रूप से, केवल एक पूर्ण एप्लिकेशन क्रमादेश (जैसे मेन प्रस्पंद) के कुछ अच्छी तरह से परिभाषित वर्गों पर लागू हो सकता है और अन्य, 'कम सशर्त', अनुभागों (जैसे क्रमादेश आरंभीकरण, समाप्ति और इसी तरह) पर नहीं।
दुभाषिया को अनावश्यक रूप से जटिल होने की आवश्यकता नहीं है, या एक संकलक लेखक के उन्नत ज्ञान के साथ एक क्रमादेशक द्वारा निर्मित किया जा सकता है, और इसे किसी भी अन्य एप्लिकेशन क्रमादेश के रूप में लिखा जा सकता है - सिवाय इसके कि यह सामान्यत: दक्षता को ध्यान में रखकर बनाया गया है। इसका प्राथमिक कार्य तालिका प्रविष्टियों को निर्देशों के एक सेट के रूप में निष्पादित करना है। नियंत्रण तालिका प्रविष्टियों को पार्स करने की कोई आवश्यकता नहीं है और इसलिए इन्हें, जहां तक संभव हो, 'निष्पादन के लिए तैयार' होने के लिए अभिकल्पित किया जाना चाहिए, जिसके लिए उपयुक्त पंक्ति से अनुदेशांतरक के पहले से ही संकलित जेनेरिक कूट में केवल चरों को जोड़ने की आवश्यकता होती है। . निर्देश (संगणक विज्ञान), सिद्धांत रूप में, असीम रूप से विस्तरणीय हैं और तालिका के अंदर (संभवतः मनमाने) मूल्यों का गठन करते हैं जो केवल दुभाषिया के लिए सार्थक हैं। दुभाषिया का नियंत्रण प्रवाह सामान्य रूप से प्रत्येक तालिका पंक्ति के अनुक्रमिक प्रसंस्करण द्वारा होता है लेकिन तालिका प्रविष्टियों में विशिष्ट क्रियाओं द्वारा संशोधित किया जा सकता है।
इस प्रकार इन स्वैच्छिक मूल्यों को कलन विधि दक्षता को ध्यान में रखते हुए अभिकल्पना किया जा सकता है - उन मानों का चयन करके जिन्हें आँकड़ा या फलन सूचक के लिए प्रत्यक्ष अनुक्रमणिका के रूप में उपयोग किया जा सकता है। विशेष प्लेटफॉर्म/संगणक भाषा के लिए, उन्हें विशेष रूप से शाखा तालिका मानों का उपयोग करके निर्देश पथ की लंबाई को कम करने के लिए अभिकल्पित किया जा सकता है या कुछ स्थितियों में जैसे कि समय-समय पर संकलन अनुभाषक में सीधे निष्पादन योग्य मशीन कूटस्निपेट (क्रमादेशन) (या उनके लिए संकेत)।
उपनेमकाओं को या तो उसी भाषा में कूटबद्ध किया जा सकता है जिसमें दुभाषिया स्वयं या किसी अन्य समर्थित क्रमादेश भाषा में (बशर्ते कि उपयुक्त अंतर-भाषा 'कॉल' संधान तंत्र सम्मलित हो)। अनुदेशांतरक और/या उपनेमिका्स के लिए भाषा का चुनाव सामान्यत: इस बात पर निर्भर करेगा कि इसे विभिन्न प्लेटफार्म (संगणन) में कितना पोर्तालिका होना चाहिए। नियंत्रण तालिका के में सुवाह्यता को बढ़ाने के लिए दुभाषिया के कई संस्करण हो सकते हैं। एक अधीनस्थ नियंत्रण तालिका सूचक वैकल्पिक रूप से 'संक्रिया' पंक्ति में एक उपनेमिका सूचक के लिए स्थानापन्न कर सकता है यदि दुभाषिया इस निर्माण का समर्थन करता है, एक पारंपरिक संरचित क्रमादेशन संरचना की नकल करते हुए एक निचले तार्किक स्तर पर एक सशर्त 'मात्रा' का प्रतिनिधित्व करता है।
प्रदर्शन विचार
पहली नजर में, नियंत्रण तालिकाओं का उपयोग एक कार्यक्रम के संगणनात्मक उपरिव्यय में काफी कुछ जोड़ने के लिए प्रतीत होता है, जिसके लिए 'मूल' क्रमादेशन भाषा के बयानों को निष्पादित करने से पहले एक दुभाषिया प्रक्रिया की आवश्यकता होती है। चूंकि हमेशा ऐसा नहीं होता है। तर्क से निष्पादन योग्य कूटलेखन को अलग (या 'प्रावरण') करके, जैसा कि तालिका में व्यक्त किया गया है, इसे अपने कार्य को सबसे अधिक कुशलता से करने के लिए अधिक आसानी से लक्षित किया जा सकता है। यह एक स्प्रेडशीट एप्लिकेशन में सबसे स्पष्ट रूप से अनुभव किया जा सकता है - जहां अंतर्निहित स्प्रेडशीट सॉफ़्टवेयर अपने परिणामों को प्रदर्शित करने के लिए पारदर्शी रूप से जटिल तार्किक 'सूत्रों' को सबसे कुशल तरीके से परिवर्तित करता है।
नीचे दिए गए उदाहरणों को संभावित प्रदर्शन लाभों को स्पष्ट करने के लिए आंशिक रूप से चुना गया है जो न केवल अमूर्तता के अतिरिक्त स्तर के लिए महत्वपूर्ण रूप से क्षतिपूर्ति कर सकते हैं, बल्कि सुधार भी कर सकते हैं - अन्यथा क्या हो सकता था - कम कुशल, कम रखरखाव योग्य और लंबा कूट। यद्यपि दिए गए उदाहरण एक 'निम्न स्तर' समुच्चय भाषा और c (भाषा) के लिए हैं, यह देखा जा सकता है, दोनों ही स्थितियों में, नियंत्रण तालिका दृष्टिकोण को लागू करने के लिए कूट की बहुत कम पंक्तियों की आवश्यकता होती है और फिर भी बहुत महत्वपूर्ण हासिल कर सकते हैं वाचाल पारंपरिक क्रमादेश भाषा निर्माण की तुलना में निरंतर समय प्रदर्शन में सुधार, दोहराव वाले स्रोत कूटलेखन को कम करना और सहायता स्पष्टता। इस लेख में तालिकाओं और बहुधा शाखा की दक्षता से संबंधित डोनाल्ड नुथ द्वारा नियंत्रण तालिका#अंतरालक भी देखें।
नियंत्रण तालिकाओं के उदाहरण
निम्नलिखित उदाहरण मनमाने हैं (और सादगी के लिए केवल एक निविष्ट पर आधारित हैं), चूंकि लक्षय केवल यह प्रदर्शित करना है कि नियमित क्रमादेश प्रकथन के अतिरिक्त तालिकाओं के उपयोग के माध्यम से नियंत्रण प्रवाह को कैसे प्रभावित किया जा सकता है। यह स्पष्ट होना चाहिए कि इस तकनीक को कई निविष्ट से निपटने के लिए आसानी से विस्तारित किया जा सकता है, या तो पंक्ति की संख्या बढ़ाकर या एकाधिक तालिका प्रविष्टियों (वैकल्पिक और/या निपातके साथ) का उपयोग करके। इसी तरह, (पदानुक्रमित) 'सहलग्न' नियंत्रण तालिकाओं का उपयोग करके, संरचित क्रमादेशन को पूरा किया जा सकता है (वैकल्पिक रूप से अधीनस्थ नियंत्रण तालिकाओं को उजागर करने में मदद करने के लिए आद्यपर्वतनी का उपयोग करना)।
CT1 नियंत्रण तालिका का एक उदाहरण है जो एक साधारण लुकअप तालिका है। पहला पंक्ति परीक्षण किए जाने वाले निविष्ट मान का प्रतिनिधित्व करता है (अंतर्निहित 'IF input1 = x' द्वारा) और, यदि TRUE है, तो संबंधित दूसरा पंक्ति ('कार्रवाई') में सिस्टम कॉल (या के लिए जाओ) द्वारा निष्पादित करने के लिए एक उपनेमिका पता होता है - स्विच प्रकथन प्रकथन के समान)। वास्तव में, यह वापसी के साथ एक बहुधा शाखा है (गतिशील प्रेषण का एक रूप)। अंतिम प्रविष्टि स्वतः निर्धारित मामला है जहां कोई मेल नहीं मिला।
CT1
input 1 pointer A -->Add S -->Subtract M -->Multiply D -->Divide ? -->Default
अन्य आँकड़ा मानों के साथ आँकड़ा संरचनाओं के अंदर सूचक्स का समर्थन करने वाली क्रमादेशन भाषाओं के लिए, उपरोक्त तालिका (CT1) का उपयोग नियंत्रण प्रवाह को तालिका से मिलान मूल्य के अनुसार एक उपयुक्त उपनेमिका के लिए निर्देशित करने के लिए किया जा सकता है (अन्यथा इंगित करने के लिए पंक्ति के बिना, समानता मान ली गई है)।
आईबीएम/360 (अधिकतम 16Mb एड्रेस श्रेणी) या Z/संरचना के लिए समुच्चय भाषा का उदाहरण
इस पहले उदाहरण के लिए कूटलेखन में लुकअप को अनुकूलित करने का कोई प्रयास नहीं किया गया है, और इसके अतिरिक्त यह एक सरल रेखीय खोज तकनीक का उपयोग करता है - विशुद्ध रूप से अवधारणा को स्पष्ट करने और कम स्रोत पंक्तियों को प्रदर्शित करने के लिए। सभी 256 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूट की लगभग 265 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि कई 'तुलना और शाखा' के लिए सामान्य रूप से लगभग 512 स्रोत पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है) , प्रत्येक तालिका प्रविष्टि को 'तत्काल तुलना करें'/शाखा निर्देशों की एक श्रृंखला के लिए लगभग 8 बाइट्स के अतिरिक्त केवल 4 बाइट्स की आवश्यकता होती है (बड़े निविष्ट चर के लिए, बचत और भी अधिक होती है)।
* ------------------ interpreter --------------------------------------------*
LM R14,R0,=A(4,CT1,N) Set R14=4, R15 --> table, and R0 =no. of entries in table (N) TRY CLC INPUT1,0(R15) ********* Found value in table entry ? BE ACTION * loop * YES, Load register pointer to sub-routine from table AR R15,R14 * * NO, Point to next entry in CT1 by adding R14 (=4) BCT R0,TRY ********* Back until count exhausted, then drop through . default action ... none of the values in table match, do something else LA R15,4(R15) point to default entry (beyond table end) ACTION L R15,0(R15) get pointer into R15,from where R15 points BALR R14,R15 Perform the sub-routine ("CALL" and return) B END go terminate this program * ------------------ control table -----------------------------------------* * | this column of allowable EBCDIC or ASCII values is tested '=' against variable 'input1' * | | this column is the 3-byte address of the appropriate subroutine * v v CT1 DC C'A',AL3(ADD) START of Control Table (4 byte entry length) DC C'S',AL3(SUBTRACT) DC C'M',AL3(MULTIPLY) DC C'D',AL3(DIVIDE) N EQU (*-CT1)/4 number of valid entries in table (total length / entry length) DC C'?',AL3(DEFAULT) default entry – used on drop through to catch all INPUT1 DS C input variable is in this variable * ------------------ sub-routines ------------------------------------------* ADD CSECT sub-routine #1 (shown as separate CSECT here but might . alternatively be in-line code) . instruction(s) to add BR R14 return SUBTRACT CSECT sub-routine #2 . instruction(s) to subtract BR R14 return . etc..
उपरोक्त उदाहरण में दुभाषिया के प्रदर्शन में सुधार
- उपरोक्त उदाहरण में चयन करने के लिए, औसत निर्देश पथ की लंबाई (उपनेमिका कूट को छोड़कर) '4n/2 +3' है, लेकिन इसे आसानी से कम किया जा सकता है, जहां n = 1 से 64, एक रैखिक समय के लिए शून्य तुलना के साथ '5' की पथ लंबाई के साथ, यदि अपरिष्कृत ईबीसीडीआईसी आँकड़ा से CT1 के लिए एक सीधा सूचकांक बनाने के लिए पहली बार 256 बाइट अनुवाद तालिका का उपयोग किया जाता है। जहाँ n = 6, यह तब केवल 3 अनुक्रमिक तुलना और शाखा निर्देशों के बराबर होगा। हालाँकि, जहाँ n <= 64, औसतन इसे कई तुलनाओं का उपयोग करने की तुलना में लगभग 13 गुना कम निर्देशों की आवश्यकता होगी। जहां n = 1 से 256, औसतन यह लगभग 42 गुना कम निर्देशों का उपयोग करेगा - चूंकि, इस मामले में, एक अतिरिक्त निर्देश की आवश्यकता होगी (सूचकांक को 4 से गुणा करने के लिए)।
'बेहतर दुभाषिया' (ऊपर दिए गए उदाहरण की तुलना में औसतन '26 गुना कम निष्पादित निर्देश' तक, जहां n = 1 से 64 और कई तुलनाओं का उपयोग करके 13 गुना कम की आवश्यकता होगी)।
64 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूट(या कम) की लगभग 85 पंक्तियों की आवश्यकता होती है (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 128 पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है - दूसरी अनुक्रमणिका निकालने के लिए आवश्यक अतिरिक्त 256 बाइट तालिका के बावजूद)।
* ------------------ interpreter --------------------------------------------*
SR R14,R14 ********* Set R14=0 CALC IC R14,INPUT1 * calc * put EBCDIC byte into lo order bits (24–31) of R14 IC R14,CT1X(R14) * * use EBCDIC value as index on table 'CT1X' to get new index FOUND L R15,CT1(R14) ********* get pointer to subroutine using index (0,4, 8 etc.) BALR R14,R15 Perform the sub-routine ("CALL" and return or Default) B END go terminate this program * --------------- additional translate table (EBCDIC --> pointer table INDEX) 256 bytes----* CT1X DC 12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) 12 identical sets of 16 bytes of x'00 * representing X'00 – x'BF' DC AL1(00,04,00,00,16,00,00,00,00,00,00,00,00,00,00,00) ..x'C0' – X'CF' DC AL1(00,00,00,00,12,00,00,00,00,00,00,00,00,00,00,00) ..x'D0' – X'DF' DC AL1(00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'E0' – X'EF' DC AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'F0' – X'FF' * the assembler can be used to automatically calculate the index values and make the values more user friendly * (for e.g. '04' could be replaced with the symbolic expression 'PADD-CT1' in table CT1X above) * modified CT1 (added a default action when index = 00, single dimension, full 31 bit address) CT1 DC A(DEFAULT) index =00 START of Control Table (4 byte address constants) PADD DC A(ADD) =04 PSUB DC A(SUBTRACT) =08 PMUL DC A(MULTIPLY) =12 PDIV DC A(DIVIDE) =16 * the rest of the code remains the same as first example
'आगे बेहतर दुभाषिया' (औसत पर पहले उदाहरण की तुलना में '21 गुना कम निष्पादित निर्देश (जहां n> = 64)' और कई तुलनाओं का उपयोग करके 42 गुना कम की आवश्यकता होगी)।
256 विभिन्न निविष्ट मानों को संभालने के लिए, स्रोत कूटया उससे कम की लगभग 280 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ), जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 512 पंक्तियों की आवश्यकता होगी (द्विआधारी संचिका का आकार भी लगभग आधा है)।
* ------------------ interpreter --------------------------------------------*
SR R14,R14 ********* Set R14=0 CALC IC R14,INPUT1 * calc * put EBCDIC byte into lo order bits (24–31) of R14 IC R14,CT1X(R14) * * use EBCDIC value as index on table 'CT1X' to get new index SLL R14,2 * * multiply index by 4 (additional instruction) FOUND L R15,CT1(R14) ********* get pointer to subroutine using index (0,4, 8 etc.) BALR R14,R15 Perform the sub-routine ("CALL" and return or Default) B END go terminate this program * --------------- additional translate table (EBCDIC --> pointer table INDEX) 256 bytes----* CT1X DC 12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) 12 identical sets of 16 bytes of x'00' * representing X'00 – x'BF' DC AL1(00,01,00,00,04,00,00,00,00,00,00,00,00,00,00,00) ..x'C0' – X'CF' DC AL1(00,00,00,00,03,00,00,00,00,00,00,00,00,00,00,00) ..x'D0' – X'DF' DC AL1(00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'E0' – X'EF' DC AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'F0' – X'FF' * the assembler can be used to automatically calculate the index values and make the values more user friendly * (for e.g. '01' could be replaced with the symbolic expression 'PADD-CT1/4' in table CT1X above) * modified CT1 (index now based on 0,1,2,3,4 not 0,4,8,12,16 to allow all 256 variations) CT1 DC A(DEFAULT) index =00 START of Control Table (4 byte address constants) PADD DC A(ADD) =01 PSUB DC A(SUBTRACT) =02 PMUL DC A(MULTIPLY) =03 PDIV DC A(DIVIDE) =04 * the rest of the code remains the same as the 2nd example
'सी (क्रमादेशन भाषा) उदाहरण' सा (क्रमादेशन भाषा) में यह उदाहरण दो तालिकाओं का उपयोग करता है, पहला (CT1) एक सरल रैखिक खोज एक-आयामी लुकअप तालिका है - निविष्ट (x), और दूसरा, संबद्ध तालिका (CT1p) का मिलान करके एक सूचकांक प्राप्त करने के लिए। जाने के लिए लेबल के पतों की एक तालिका है। <वाक्यविन्यास प्रकाश लैंग = सी>
static const char CT1[] = { "A", "S", "M", "D" }; /* permitted input values */ static const void *CT1p[] = { &&Add, &&Subtract, &&Multiply, &&Divide, &&Default}; /* labels to goto & default*/ for (int i = 0; i < sizeof(CT1); i++) /* loop thru ASCII values */
{if (x==CT1[i]) goto *CT1p[i]; } /* found --> appropriate label */ goto *CT1p[i+1]; /* not found --> default label */
</वाक्यविन्यास हाइलाइट> इसे और अधिक कुशल बनाया जा सकता है यदि एक 256 बाइट तालिका का उपयोग कच्चे ASCII मान (x) को सीधे एक सघन अनुक्रमिक सूचकांक मान में अनुवाद करने के लिए किया जाता है, जिसका उपयोग सीधे CT1p से शाखा के पते का पता लगाने के लिए किया जाता है (अर्थात बाइट-वाइड सरणी के साथ सूचकांक मानचित्रण) . इसके बाद यह x के सभी संभावित मानों के लिए निरंतर समय में निष्पादित होगा (यदि CT1 p में सूचक के अतिरिक्त फलन के नाम सम्मलित हैं, तो स्विच-जैसी गोटो को समाप्त करते हुए जंप को गतिक फलन कॉल से बदला जा सकता है - लेकिन अतिरिक्त लागत से प्रदर्शन में कमी फलन प्रबंधन (संगणन))। <वाक्यविन्यास प्रकाश लैंग = सी>
static const void *CT1p[] = {&&Default, &&Add, &&Subtract, &&Multiply, &&Divide}; /* the 256 byte table, below, holds values (1,2,3,4), in corresponding ASCII positions (A,S,M,D), all others set to 0x00 */
static const char CT1x[]={ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00','\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x01', '\x00', '\x00', '\x04', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x03', '\x00', '\x00', '\x00', '\x00', '\x00', '\x02', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x03', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00'}; /* the following code will execute in constant time, irrespective of the value of the input character (x) */
i = CT1x(x); /* extract the correct subroutine index from table CT1x using its ASCII value as an index initially */ goto *CT1p[i]; /* goto (Switch to) the label corresponding to the index (0=default, 1=Add, 2=Subtract,.) - see CT1p */
</वाक्यविन्यास हाइलाइट>
नीचे दिया गया अगला उदाहरण बताता है कि कैसे एक समान प्रभाव उन भाषाओं में प्राप्त किया जा सकता है जो आँकड़ा संरचनाओं में सूचक परिभाषाओं का समर्थन नहीं करती हैं लेकिन एक उपनेमका के लिए अनुक्रमित शाखाओं का समर्थन करती हैं - एक (शून्य-आधारित संख्यािंग|0-आधारित) के अंदर निहित ) उपनेमिका सूचक्स की सरणी। तालिका (CT2) का उपयोग इंडेक्स (दूसरे पंक्ति से) को सूचक पंक्ति (CT2P) में निकालने के लिए किया जाता है। यदि सूचक सरणियों का समर्थन नहीं किया जाता है, तो स्विच प्रकथन या समतुल्य का उपयोग क्रमादेश लेबल्स के अनुक्रम में से एक में नियंत्रण प्रवाह को बदलने के लिए किया जा सकता है (उदाहरण: केस0, केस1, केस2, केस3, केस4) जो या तो सीधे निविष्ट को संसाधित करते हैं, या अन्यथा इससे निपटने के लिए उपयुक्त उपनेमका (स्वतः निर्धारित, जोड़ें, घटाएं, गुणा या विभाजित करें,..) पर कॉल करें (वापसी के साथ)।
'CT2'
input 1 subr # A 1 S 2 M 3 D 4 ? 0
उपरोक्त उदाहरणों की तरह, वास्तव में तालिका लुकअप का उपयोग किए बिना संभावित ASCII निविष्ट मानों (A, S, एम, D या अज्ञात) को सूचक सरणी इंडेक्स में अनुवाद करना संभव है, लेकिन यहां स्थिरता के लिए तालिका के रूप में दिखाया गया पहला उदाहरण है।
- CT2P सूचक सरणी
pointer array -->default -->Add -->Subtract -->Multiply -->Divide -->?other
बहु-आयामी नियंत्रण तालिकाओं का निर्माण किया जा सकता है (अर्थात अनुकूलित) जो उपरोक्त उदाहरणों की तुलना में 'अधिक जटिल' हो सकता है जो कई निविष्ट पर कई स्थितियों के लिए परीक्षण कर सकता है या कुछ मिलान मानदंडों के आधार पर एक से अधिक 'कार्रवाई' कर सकता है। एक 'कार्रवाई' में एक अन्य अधीनस्थ नियंत्रण तालिका में सूचक सम्मलित हो सकता है। नीचे दिए गए सरल उदाहरण में एक अतिरिक्त पंक्ति (लघु अक्षर निविष्ट को संभालने के लिए) के रूप में निहित 'OR' शर्त सम्मलित है, चूंकि इस उदाहरण में, इसे निर्दिष्ट करते हुए प्रत्येक लघु अक्षर वर्णों के लिए एक अतिरिक्त प्रविष्टि होने से समान रूप से नियंत्रित किया जा सकता है। ऊपरी केस वर्णों के समान उपनेमिका पहचानकर्ता)। प्रत्येक निविष्ट के लिए वास्तविक कार्यावधि अनुवृत्तओं की गणना करने के लिए एक अतिरिक्त पंक्ति भी सम्मलित है।
'CT3'
input 1 alternate subr # count A a 1 0 S s 2 0 M m 3 0 D d 4 0 ? ? 0 0
नियंत्रण तालिका प्रविष्टियाँ तब प्रक्रियात्मक भाषाओं में सशर्त बयानों के समान होती हैं, लेकिन महत्वपूर्ण रूप से, बिना वास्तविक (भाषा पर निर्भर) सशर्त बयान (अर्थात निर्देश) सम्मलित होते हैं (सामान्य कूट दुभाषिया में भौतिक रूप से होता है जो तालिका प्रविष्टियों को संसाधित करता है, तालिका में ही - जो केवल अपनी संरचना और मूल्यों के माध्यम से क्रमादेश तर्क का प्रतीक है)।
इस तरह की तालिकाओं में, जहां समान तालिका प्रविष्टियों की एक श्रृंखला संपूर्ण तर्क को परिभाषित करती है, एक तालिका प्रविष्टि संख्या या सूचक प्रभावी रूप से अधिक पारंपरिक कार्यक्रमों में कार्यक्रम गणक की जगह ले सकता है और एक 'कार्रवाई' में रीसेट किया जा सकता है, जिसे इसमें भी निर्दिष्ट किया गया है। तालिका प्रविष्टि नीचे दिए गए उदाहरण (सीटी4) से पता चलता है कि पिछली तालिका को विस्तारित करने के लिए, 'अगली' प्रविष्टि (और/या 'परिवर्तन प्रवाह' (शाखा (संगणक विज्ञान)) उपनेमका सम्मलित करने के लिए) एक क्रमादेश प्रस्पंद बना सकता है (यह उदाहरण वास्तव में नहीं है इस तरह की नियंत्रण तालिका बनाने का सबसे कुशल तरीका लेकिन, ऊपर दिए गए पहले उदाहरणों से एक क्रमिक 'विकास' का प्रदर्शन करके, दिखाता है कि व्यवहार को संशोधित करने के लिए अतिरिक्त पंक्ति का उपयोग कैसे किया जा सकता है।) पाँचवी पंक्ति दर्शाती है कि एक से अधिक क्रियाएँ आरंभ की जा सकती हैं एकल तालिका प्रविष्टि - इस मामले में प्रत्येक प्रविष्टि के सामान्य प्रसंस्करण के बाद की जाने वाली कार्रवाई ('-' मान का अर्थ है 'कोई शर्त नहीं' या 'कोई कार्रवाई नहीं')।
संरचित क्रमादेशन या संरचित क्रमादेशन | गोटो-लेस कूट, ('प्रस्पंद करते समय करें' या 'प्रस्पंद के लिए' निर्माण के समतुल्य को सम्मलित करते हुए), उपयुक्त रूप से अभिकल्पना किए गए और 'दंतुरित' नियंत्रण तालिका संरचनाओं के साथ भी समायोजित किया जा सकता है।
'सीटी4' (निविष्ट1 और प्रक्रिया को पढ़ने के लिए एक पूर्ण 'क्रमादेश', 'E' मिलने तक दोहराता है)
input 1 alternate subr # count jump - - 5 0 - E e 7 0 - A a 1 0 - S s 2 0 - M m 3 0 - D d 4 0 - ? ? 0 0 - - - 6 0 1
- CT4P सूचक सरणी
pointer array -->Default -->Add -->Subtract -->Multiply -->Divide -->Read Input1 -->Alter flow -->End
तालिका-संचालित सन्निर्धारण
दूरसंचार सन्निर्धारण के विशेषज्ञ क्षेत्र में (किसी विशेष कॉल की लागत निर्धारित करने से संबंधित), तालिका-संचालित सन्निर्धारण तकनीक उन अनुप्रयोगों में नियंत्रण तालिकाओं के उपयोग को दर्शाती है जहां बाजार की शक्तियों के कारण नियम बार-बार बदल सकते हैं। कई स्थितियों में गैर-क्रमादेशक द्वारा अल्प सूचना पर शुल्क निर्धारित करने वाली तालिकाओं को बदला जा सकता है।[4][5] यदि कलन विधि दुभाषिया में पूर्व-निर्मित नहीं हैं (और इसलिए तालिका में रखी गई अभिव्यक्ति की अतिरिक्त रनटाइम व्याख्या की आवश्यकता होती है), इसे तालिका-संचालित सन्निर्धारण के अतिरिक्त नियम-आधारित सन्निर्धारण के रूप में जाना जाता है (और इसके परिणामस्वरूप काफी अधिक उपरिव्यय की खपत होती है)।
स्प्रेडशीट
एक स्प्रेडशीट आँकड़ा शीट को दो आयामी नियंत्रण तालिका के रूप में माना जा सकता है, जिसमें गैर-खाली सेल अंतर्निहित स्प्रेडशीट क्रमादेश (दुभाषिया) के आँकड़ा का प्रतिनिधित्व करती हैं। सूत्र वाली कोशिकाओं को सामान्यत: एक समान चिह्न के साथ उपसर्ग किया जाता है और केवल एक विशेष प्रकार के आँकड़ा निविष्ट को निर्दिष्ट किया जाता है जो अन्य संदर्भित कोशिकाओं के प्रसंस्करण को निर्धारित करता है - दुभाषिया के अंदर नियंत्रण प्रवाह को बदलकर। यह अंतर्निहित दुभाषिया से सूत्रों का बाहरीकरण है जो स्पष्ट रूप से दोनों स्प्रैडशीट्स की पहचान करता है, और उपरोक्त उद्धृत नियम आधारित सन्निर्धारण उदाहरण गैर क्रमादेशक द्वारा नियंत्रण तालिकाओं के उपयोग के आसानी से पहचाने जाने योग्य उदाहरण हैं।
क्रमादेशन प्रतिमान
यदि नियंत्रण तालिका तकनीक को किसी विशेष क्रमादेशन प्रतिमान से संबंधित कहा जा सकता है, तो निकटतम सादृश्य स्वचल प्ररूप-आधारित क्रमादेशन या मीमांसा (संगणक विज्ञान) हो सकता है। चिंतनशील (मेटाक्रमादेशन का एक रूप - चूंकि तालिका प्रविष्टियों को दुभाषिया के व्यवहार को 'संशोधित' करने के लिए कहा जा सकता है)। हालाँकि दुभाषिया स्वयं, और उपनेमिका, किसी भी उपलब्ध प्रतिमानों या यहाँ तक कि मिश्रण का उपयोग करके क्रमादेश किया जा सकता है। तालिका स्वयं अनिवार्य रूप से असंसाधित्र आँकड़ा मानों का संग्रह हो सकती है जिसे संकलित करने की भी आवश्यकता नहीं होती है और बाहरी स्रोत से पढ़ा जा सकता है (विशिष्ट, प्लेटफ़ॉर्म निर्भर, अधिक दक्षता के लिए सीधे मेमोरी सूचक्स का उपयोग करके कार्यान्वयन को छोड़कर)।
बाईटकूट / आभासी मशीन अनुदेश सेट के अनुरूप
एक बहु-आयामी नियंत्रण तालिका में आभासी मशीन पर चलने वाले बाइट कूट के लिए कुछ अवधारणात्मक समानताएं होती हैं, जिसमें एक प्लेटफॉर्म निर्भर अनुदेशांतरक (संगणन)| दुभाषिया कार्यक्रम सामान्यत: वास्तविक निष्पादन करने के लिए आवश्यक होता है (जो मोटे तौर पर तालिका सामग्री द्वारा सशर्त रूप से निर्धारित होता है)। एक सामान्य मध्यवर्ती 'निर्देश सेट' बनाने के उद्देश्य से हाल ही में सामान्य मध्यवर्ती भाषा (सीआईएल) के लिए कुछ वैचारिक समानताएँ भी हैं जो प्लेटफ़ॉर्म से स्वतंत्र हैं (लेकिन सीआईएल के विपरीत, अन्य भाषाओं के लिए एक सामान्य संसाधन के रूप में उपयोग किए जाने का कोई दिखावा नहीं है) . पी-कूट मशीन | पी-कूट को भी एक समान लेकिन पहले के कार्यान्वयन के रूप में माना जा सकता है, जिसकी उत्पत्ति 1966 तक हुई थी।
निर्देश लाने
जब क्रमादेश प्रवाह को निर्धारित करने के लिए एक बहु-आयामी नियंत्रण तालिका का उपयोग किया जाता है, तो सामान्य हार्डवेयर कार्यक्रम गणक फलन को पहले (या अगली) तालिका प्रविष्टि के लिए एक सूचक (संगणक क्रमादेशन) के साथ प्रभावी ढंग से अनुकरण किया जाता है या इसके लिए एक सरणी अनुक्रमणिका। निर्देश प्राप्त करने में उस तालिका प्रविष्टि में आँकड़ा को डी कूट करना सम्मलित है - आवश्यक रूप से पहले प्रविष्टि के सभी या कुछ आँकड़ा को अनुकरण किए बिना। क्रमादेशन भाषा जो सूचक (संगणक क्रमादेशन) का उपयोग करने में सक्षम हैं, उनका दोहरा फायदा है कि कम संगणनात्मक उपरिव्यय सम्मलित है, सामग्री तक पहुँचने और निष्पादन के बाद अगली तालिका प्रविष्टि को इंगित करने के लिए काउंटर को आगे बढ़ाने में। अगले 'निर्देश' पते (अर्थात तालिका प्रविष्टि) की गणना किसी भी चरण में क्रमादेश प्रस्पंद्स और शाखा (संगणक विज्ञान) निर्देशों की अनुमति देने वाली प्रत्येक व्यक्तिगत तालिका प्रविष्टि की वैकल्पिक अतिरिक्त क्रिया के रूप में भी की जा सकती है।
निगरानी नियंत्रण तालिका निष्पादन
डिबगिंग उद्देश्यों, हॉट स्पॉट (संगणक विज्ञान) का पता लगाने, कूट समावेशन विश्लेषण और वास्तविक क्रमादेश प्रवाह के पूर्ण या आंशिक ट्रेस को रिकॉर्ड करने के लिए दुभाषिया कार्यक्रम वैकल्पिक रूप से क्रमादेश काउंटर (और निर्देश प्रकार के आधार पर अन्य प्रासंगिक विवरण) को सहेज सकता है। रूपरेखा (संगणक क्रमादेशन) (ऊपर CT3 और CT4 के उदाहरण देखें)।
लाभ
- स्पष्टता - तालिका (सूचना) सर्वव्यापी संगणन है और आम जनता द्वारा भी स्वाभाविक रूप से समझी जाती है (विशेषकर उपयोगकर्ता गाइड में दोष निदान तालिकाएँ)
- सुवाह्य - 100% भाषा स्वतंत्र (और प्लेटफ़ॉर्म स्वतंत्र - दुभाषिया को छोड़कर) के लिए अभिकल्पना किया जा सकता है
- लचीलापन - या तो भाषा आदिम या उपनेमिका को पारदर्शी रूप से निष्पादित करने की क्षमता और समस्या के अनुरूप कस्टम अभिकल्पना किया जाना
- सघनता - तालिका सामान्यत: साथ-साथ स्थिति/क्रिया जोड़ी दिखाती है (सामान्य प्लेटफ़ॉर्म/भाषा कार्यान्वयन निर्भरताओं के बिना), जिसके परिणामस्वरूप अधिकांशत:
- द्विआधारी फाइल - निर्देशों के कम दोहराव के माध्यम से आकार में कमी
- स्रोत कूटसंचिका - कई सशर्त बयानों के उन्मूलन के माध्यम से आकार में कमी आई है
- बेहतर क्रमादेश भार (या अधोभार) गति
- रख-रखाव - तालिका अधिकांशत: बनाए रखने के लिए आवश्यक स्रोत लाइनों की संख्या को कम करते हैं v। कई तुलनाएँ
- संदर्भ की संस्थिति - सुसंहत तालिका संरचना के परिणामस्वरूप कैशे में शेष तालिका (संगणन)
- कूटपुन: उपयोग - दुभाषिया सामान्यत: पुन: प्रयोज्य होता है। बार-बार इसे ठीक उसी तकनीक का उपयोग करके नए क्रमादेशन कार्यों के लिए आसानी से अनुकूलित किया जा सकता है और तालिका परिभाषाओं द्वारा नियंत्रित, 'संघटित रूप से' बन सकता है, वास्तव में, आजमाए हुए और परखे हुए उपनेमिका की एक मानक लाइब्रेरी।
- कलन विधि दक्षता - प्रणालीगत अनुकूलन संभव। दुभाषिया में कोई भी प्रदर्शन सुधार सामान्यत: इसका उपयोग करने वाले सभी अनुप्रयोगों में सुधार करता है (ऊपर 'CT1' में उदाहरण देखें)।
- विस्तरणीय - नया 'निर्देश' जोड़ा जा सकता है - केवल दुभाषिया का विस्तार करके
- अनुदेशांतरक को एप्लिकेशन क्रमादेश की तरह लिखा जा सकता है
वैकल्पिक रूप से:-
- दुभाषिया तालिका के अंदर एकत्र किए गए कार्यावधि सॉफ्टवेयर मीट्रिक(मिति) का उपयोग करके आत्मनिरीक्षण और आत्म अनुकूलन (संगणक विज्ञान) हो सकता है (CT3 और CT4 देखें - प्रविष्टियों के साथ जिन्हें समय-समय पर अवरोही गणना द्वारा क्रमबद्ध किया जा सकता है)। दुभाषिया वैकल्पिक रूप से कार्यावधि पर एकत्रित मेट्रिक्स से गतिशील रूप से सबसे कुशल लुकअप तकनीक का चयन कर सकता है (उदाहरण के लिए सरणी का आकार, मानों की श्रेणी, क्रमबद्ध या अवर्गीकृत)
- गतिशील प्रेषण - सामान्य कार्यों को पहले से लोड किया जा सकता है और स्मृति उपयोग को कम करने के लिए केवल पहली मुठभेड़ पर कम सामान्य कार्य प्राप्त किए जा सकते हैं। इसे प्राप्त करने के लिए इन-तालिका ज्ञापन को नियोजित किया जा सकता है।
- दुभाषिया में अंतर्निहित डिबगिंग, ट्रेस और निरीक्षण विशेषताएं हो सकती हैं - जिसे फिर परीक्षण या 'लाइव' मोड के अनुसार चालू या बंद किया जा सकता है
- नियंत्रण तालिकाओं को 'ऑन-द-फ्लाई' (कुछ उपयोगकर्ता निविष्ट के अनुसार या मापदंडों से) बनाया जा सकता है और फिर दुभाषिया द्वारा निष्पादित किया जा सकता है (शब्दशः कूट के निर्माण के बिना)।
नुकसान
- प्रशिक्षण की आवश्यकता - एप्लिकेशन क्रमादेशक सामान्यत: सामान्य समाधान तैयार करने के लिए प्रशिक्षित नहीं होते हैं
निम्नलिखित मुख्य रूप से बहु-आयामी तालिकाओं में उनके उपयोग पर लागू होते हैं, न कि पहले चर्चा की गई एक-आयामी तालिकाओं पर।
- संगणनात्मक उपरिव्यय - अप्रत्यक्ष (क्रमादेशन) के अतिरिक्त स्तर की वजह से आभासी निर्देशों की 'व्याख्या' के कारण कुछ वृद्धि हुई है (चूंकि यह सामान्यत: एक अच्छी तरह से अभिकल्पित किए गए सामान्य दुभाषिया द्वारा अंतर्लब से अधिक हो सकता है जो कुशल प्रत्यक्ष अनुवाद, खोज और का पूरा लाभ उठाता है। सशर्त परीक्षण तकनीकें जिनका अन्यथा उपयोग नहीं किया जा सकता है।
- संमिश्र अभिव्यक्ति (क्रमादेशन) को हमेशा आँकड़ा तालिका प्रविष्टियों में तुलना उद्देश्यों के लिए सीधे उपयोग नहीं किया जा सकता है
- (इन 'मध्यवर्ती मूल्यों' की गणना एक उपनेमिका के अंदर पहले से की जा सकती है और उनके मूल्यों को सशर्त तालिका प्रविष्टियों में संदर्भित किया जाता है। वैकल्पिक रूप से, एक उपनेमिका पूर्ण जटिल सशर्त परीक्षण (बिना शर्त 'कार्रवाई' के रूप में) और, व्यवस्थापन करके कर सकता है इसके परिणाम के रूप में एक सत्य बिट, फिर अगली तालिका प्रविष्टि में इसका परीक्षण किया जा सकता है। संरचित कार्यक्रम प्रमेय देखें)
उद्धरण
Multiway branching is an important programming technique which is all too often replaced by an inefficient sequence of if tests. Peter Naur recently wrote me that he considers the use of tables to control program flow as a basic idea of computer science that has been nearly forgotten; but he expects it will be ripe for rediscovery any day now. It is the key to efficiency in all the best compilers I have studied.
— Donald Knuth, Structured Programming with go to Statements
There is another way to look at a program written in interpretative language. It may be regarded as a series of subroutine calls, one after another. Such a program may in fact be expanded into a long sequence of calls on subroutines, and, conversely, such a sequence can usually be packed into a coded form that is readily interpreted. The advantage of interpretive techniques are the compactness of representation, the machine independence, and the increased diagnostic capability. An interpreter can often be written so that the amount of time spent in interpretation of the code itself and branching to the appropriate routine is negligible
— Donald Knuth, The Art of Computer Programming Volume 1, 1997, page 202
The space required to represent a program can often be decreased by the use of interpreters in which common sequences of operations are represented compactly. A typical example is the use of a finite-state machine to encode a complex protocol or lexical format into a small table
— Jon Bentley, Writing Efficient Programs
Jump tables can be especially efficient if the range tests can be omitted. For example, if the control value is an enumerated type (or a character) then it can only contain a small fixed range of values and a range test is redundant provided the jump table is large enough to handle all possible values
— David.A. SPULER, Compiler Code Generation for Multiway Branch Statements as a Static Search Problem
Programs must be written for people to read, and only incidentally for machines to execute.
— "Structure and Interpretation of Computer Programs", preface to the first edition, Abelson & Sussman
Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious.
— "The Mythical Man-Month: Essays on Software Engineering", Fred Brooks
यह भी देखें
- स्वचल प्ररूप-आधारित क्रमादेशन
- आँकड़ाबेस-केंद्रित संरचना
- आँकड़ा-संचालित परीक्षण
- निर्णय तालिका
- परिमित अवस्था मशीन
- कीवर्ड चालित परीक्षण
- सूचक (संगणक क्रमादेशन)
- स्विच प्रकथन - एकल निविष्ट चर के आधार पर कई लेबल (क्रमादेशन लैंग्वेज) में से किसी एक के लिए बहुधा शाखा
- थ्रेडेड कूट
- थ्रेडेड कूट# टोकन थ्रेडिंग
टिप्पणियाँ
- ↑ Programs from decision tables, Humby, E., 2007,Macdonald, 1973 ... Biggerstaff, Ted J. Englewood Cliffs, NJ : Prentice-Hall ISBN 0-444-19569-6
- ↑ "Archived copy" (PDF). Archived from the original (PDF) on 10 June 2016. Retrieved 17 May 2016.
{{cite web}}
: CS1 maint: archived copy as title (link) - ↑ UML state machine#Hierarchically nested states
- ↑ Carl Wright, Service Level Corpo. (2002) Program Code Based vs. Table-driven vs. Rule-Based Rating, Rating Matters issue n. 12, 13 November 2002 ISSN 1532-1886
- ↑ Brian E. Clauser, Melissa J. Margolis, Stephen G. Clyman, Linette P. Ross (1997) Development of Automated Scoring Algorithms for Complex Performance Assessments: A Comparison of Two Approaches Journal of Educational Measurement, Vol. 34, No. 2 (Summer, 1997), pp. 141–161
संदर्भ
- Decision Table Based Methodology
- Structured Programming with go to Statements by Donald Knuth
- Compiler code generation for multiway branch statements as a static search problem 1I994, by David A. Spuler
बाहरी संबंध
- Switch statement in Windows PowerShell describes extensions to standard switch statement (providing some similar features to control tables)
- Control Table example in "C" language using pointers, by Christopher Sawtell c1993, Department of Computer Science, University of Auckland
- Table driven design Archived 10 June 2016 at the Wayback Machine by Wayne Cunneyworth of DataKinetics
- From Requirements to Tables to Code and Tests By George Brooke
- Some comments on the use of ambiguous decision tables and their conversion to computer programs by P. J. H. King and R. G. Johnson, Univ. of London, London, UK
- Ambiguity in limited entry decision tables by P. J. H. King
- Conversion of decision tables to computer programs by rule mask techniques by P. J. H. King
- A Superoptimizer Analysis of Multiway Branch Code Generation section 3.9, page 16 index mapping
- Jump Tables via Function Pointer Arrays in C/C++ Jones, Nigel. "Arrays of Pointers to Functions [2]" Embedded Systems Programming, May 1999.
- Page view statistics for this article for December 2009