गार्डेड कमांड लैंग्वेज

गार्डेड कमांड लैंग्वेज (GCL) EWD472 में विधेय ट्रांसफार्मर शब्दार्थ के लिए एडवर्ड डिज्क्स्ट्रा द्वारा परिभाषित एक प्रोग्रामिंग भाषा है। यह प्रोग्रामिंग अवधारणाओं को एक संक्षिप्त तरीके से जोड़ता है। इससे प्रोग्राम और उसके प्रूफ़ को साथ-साथ विकसित करना आसान हो जाता है, प्रूफ़ विचार आगे बढ़ते हैं; इसके अलावा, किसी प्रोग्राम के कुछ हिस्सों की वास्तव में गणना की जा सकती है।

'जीसीएल' की एक महत्वपूर्ण संपत्ति गैर-नियतात्मक प्रोग्रामिंग है। उदाहरण के लिए, if-statement में, कई विकल्प सत्य हो सकते हैं, और किसे चुनना है इसका चुनाव रनटाइम पर किया जाता है, जब if-statement निष्पादित होता है। यह प्रोग्रामर को अनावश्यक विकल्प चुनने से मुक्त करता है और कार्यक्रमों के औपचारिक विकास में सहायता करता है।

'जीसीएल' में मल्टीपल असाइनमेंट स्टेटमेंट शामिल है। उदाहरण के लिए, कथन का निष्पादन x, y:= y, x पहले दाईं ओर के मानों का मूल्यांकन करके और फिर उन्हें बाईं ओर के चर में संग्रहीत करके किया जाता है। इस प्रकार, यह कथन के मानों की अदला-बदली करता है x और y.

निम्नलिखित पुस्तकें जीसीएल का उपयोग करके कार्यक्रमों के विकास पर चर्चा करती हैं:



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

सिंटेक्स (प्रोग्रामिंग भाषाएँ)
एक गार्डेड कमांड फॉर्म जी → एस का एक कथन (प्रोग्रामिंग)  है, जहां
 * जी एक प्रस्ताव है, जिसे गार्ड कहा जाता है
 * S एक कथन है

शब्दार्थ
जिस समय किसी गणना में G का सामना होता है, उसका मूल्यांकन किया जाता है।
 * यदि G सत्य है, तो S निष्पादित करें
 * यदि G गलत है, तो क्या करना है यह तय करने के लिए संदर्भ को देखें (किसी भी स्थिति में, S निष्पादित न करें)

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

सिंटेक्स
छोडना

गर्भपात

शब्दार्थ

 * छोड़ें: कुछ न करें
 * निरस्त करना: कुछ भी करो

असाइनमेंट (कंप्यूटर प्रोग्रामिंग)
चर (प्रोग्रामिंग) को मान निर्दिष्ट करता है।

सिंटेक्स
वी := ई या वी$0$, में$1$, ..., में$n$ := और$0$, और$1$, ..., और$n$

कहाँ
 * v प्रोग्राम वेरिएबल हैं
 * ई उनके संबंधित चर के समान डेटा प्रकार की अभिव्यक्ति हैं

श्रृंखला
कथनों को एक अर्धविराम से अलग किया जाता है

सशर्त (प्रोग्रामिंग): यदि
चयन (अक्सर सशर्त कथन या यदि कथन कहा जाता है) संरक्षित आदेशों की एक सूची है, जिनमें से एक को निष्पादित करने के लिए चुना जाता है। यदि एक से अधिक गार्ड सत्य हैं, तो एक कथन जिसका गार्ड सत्य है, को गैर-निर्धारणात्मक रूप से निष्पादित करने के लिए चुना जाता है। यदि कोई गार्ड सत्य नहीं है, तो परिणाम अपरिभाषित है। क्योंकि कम से कम एक गार्ड सत्य होना चाहिए, खाली स्टेटमेंट स्किप की अक्सर आवश्यकता होती है। कथन यदि fi के पास कोई संरक्षित कमांड नहीं है, तो कोई सच्चा गार्ड कभी नहीं होता है। इसलिए, यदि फाई गर्भपात के बराबर है।

सिंटेक्स
यदि G0 → S0 □ G1 → S1 ... □ जीएन → एसएन फाई

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

सरल
छद्मकोड में: यदि a < b तो c को सत्य पर सेट करें अन्यथा c को गलत पर सेट करें

संरक्षित आदेश भाषा में: यदि a < b → c := सत्य है □ a ≥ b → c := असत्य फाई

स्किप का प्रयोग
छद्मकोड में: यदि त्रुटि सत्य है तो x को 0 पर सेट करें

संरक्षित आदेश भाषा में: यदि त्रुटि → x := 0 □ त्रुटि → छोड़ें फाई

यदि दूसरा गार्ड हटा दिया गया है और त्रुटि गलत है, तो परिणाम निरस्त हो जाएगा।

अधिक गार्ड सत्य
यदि a ≥ b → अधिकतम := a □ बी ≥ ए → अधिकतम := बी फाई

यदि a = b है, तो समान परिणामों के साथ अधिकतम के लिए नए मान के रूप में a या b को चुना जाता है। हालाँकि, कार्यान्वयन से पता चल सकता है कि एक दूसरे की तुलना में आसान या तेज़ है। चूँकि प्रोग्रामर के लिए कोई अंतर नहीं है, कोई भी कार्यान्वयन करेगा।

प्रवाह को नियंत्रित करें#लूप्स: करें
इस दोहराव या लूप का निष्पादन नीचे दिखाया गया है।

सिंटेक्स
G0 → S0 करें □ G1 → S1 ... □ जीएन → एसएन आयुध डिपो

शब्दार्थ
पुनरावृत्ति के निष्पादन में 0 या अधिक पुनरावृत्तियों को निष्पादित करना शामिल है, जहां एक पुनरावृत्ति में (गैर-निर्धारिती रूप से) एक संरक्षित कमांड चुनना शामिल है $Gi → Si$ किसका रक्षक $Gi$ सत्य का मूल्यांकन करता है और कमांड निष्पादित करता है $Si$. इस प्रकार, यदि सभी गार्ड प्रारंभ में झूठे हैं, तो पुनरावृत्ति निष्पादित किए बिना, पुनरावृत्ति तुरंत समाप्त हो जाती है। दोहराव do od का निष्पादन, जिसमें कोई संरक्षित आदेश नहीं है, 0 पुनरावृत्तियों को निष्पादित करता है, इसलिए do od स्किप के बराबर है।

मूल यूक्लिडियन एल्गोरिथ्म
ए, बी := ए, बी; a < b → b := b - a करो □ b < a → a := a - b आयुध डिपो

यह पुनरावृत्ति तब समाप्त होती है जब a = b, इस स्थिति में a और b, A और B का सबसे बड़ा सामान्य भाजक रखते हैं।

डिज्क्स्ट्रा इस एल्गोरिदम में दो अनंत चक्रों को सिंक्रनाइज़ करने का एक तरीका देखता है  और   इस तरह से कि   और   सत्य रहता है.

विस्तारित यूक्लिडियन एल्गोरिथ्म
ए, बी, एक्स, वाई, यू, वी := ए, बी, 1, 0, 0, 1; करो b ≠ 0 → क्यू, आर := ए डिव बी, ए मॉड बी; ए, बी, एक्स, वाई, यू, वी := बी, आर, यू, वी, एक्स - क्यू*यू, वाई - क्यू*वी आयुध डिपो

यह पुनरावृत्ति तब समाप्त होती है जब b = 0, इस स्थिति में चर बेज़आउट की पहचान का समाधान रखते हैं: xA + yB = gcd(A,B) ।

गैर-नियतात्मक प्रकार
a>b → a, b := b, a करें □ b>c → b, c := c, b □ सी>डी → सी, डी := डी, सी आयुध डिपो

प्रोग्राम तत्वों को क्रमपरिवर्तित करता रहता है जबकि उनमें से एक उसके उत्तराधिकारी से बड़ा होता है। यह गैर-नियतात्मक बुलबुला सॉर्ट अपने नियतात्मक संस्करण की तुलना में अधिक कुशल नहीं है, लेकिन यह साबित करना आसान है: यह तब तक नहीं रुकेगा जब तक कि तत्वों को सॉर्ट नहीं किया जाता है और प्रत्येक चरण में यह कम से कम 2 तत्वों को सॉर्ट करता है।

Arg अधिकतम
एक्स, वाई = 1, 1; x≠n → करो यदि f(x) ≤ f(y) → x := x+1 □ f(x) ≥ f(y) → y := x; एक्स := एक्स+1 फाई आयुध डिपो

यह एल्गोरिदम मान 1 ≤ y ≤ n पाता है जिसके लिए दिया गया पूर्णांक फ़ंक्शन f अधिकतम है। न केवल गणना बल्कि अंतिम स्थिति भी आवश्यक रूप से विशिष्ट रूप से निर्धारित नहीं होती है।

निर्माण द्वारा सही प्रोग्राम
संरक्षित कमांडों के अवलोकन संबंधी अनुरूपता संबंध को एक जाली (आदेश) में सामान्यीकृत करने से शोधन कैलकुलस का मार्ग प्रशस्त हुआ है। इसे बी-विधि  जैसी औपचारिक विधियों में यंत्रीकृत किया गया है जो किसी को उनके विनिर्देशों से औपचारिक रूप से प्रोग्राम प्राप्त करने की अनुमति देता है।

अतुल्यकालिक सर्किट
संरक्षित आदेश पुनरावृत्ति के कारण अर्ध-विलंब-असंवेदनशील सर्किट डिजाइन के लिए उपयुक्त हैं विभिन्न आदेशों के चयन के लिए मनमाने सापेक्ष विलंब की अनुमति देता है। इस एप्लिकेशन में, सर्किट में नोड y को चलाने वाले एक लॉजिक गेट में दो संरक्षित कमांड होते हैं, जो इस प्रकार हैं:

पुलडाउनगार्ड → y := 0 पुलअपगार्ड → y := 1

पुलडाउनगार्ड और पुलअपगार्ड यहां लॉजिक गेट के इनपुट के कार्य हैं, जो बताता है कि गेट कब आउटपुट को क्रमशः नीचे या ऊपर खींचता है। शास्त्रीय के विपरीत सर्किट मूल्यांकन मॉडल, संरक्षित आदेशों के एक सेट (एक अतुल्यकालिक सर्किट के अनुरूप) की पुनरावृत्ति उस सर्किट के सभी संभावित गतिशील व्यवहारों का सटीक वर्णन कर सकती है। विद्युत सर्किट तत्वों के लिए कोई व्यक्ति किस मॉडल के साथ रहना चाहता है, उसके आधार पर, गार्डेड-कमांड विवरण के लिए गार्डेड कमांड पर अतिरिक्त प्रतिबंध आवश्यक हो सकते हैं पूर्णतया संतोषजनक होना। सामान्य प्रतिबंधों में स्थिरता, गैर-हस्तक्षेप और अनुपस्थिति शामिल हैं स्व-अमान्य आदेशों का।

मॉडल जांच
गार्डेड कमांड का उपयोग प्रोमेला प्रोग्रामिंग भाषा में किया जाता है, जिसका उपयोग SPIN मॉडल चेकर द्वारा किया जाता है। SPIN समवर्ती सॉफ़्टवेयर अनुप्रयोगों के सही संचालन की पुष्टि करता है।

अन्य
पर्ल मॉड्यूल Commands::Guarded डिज्कस्ट्रा के संरक्षित कमांड पर एक नियतात्मक, सुधारात्मक संस्करण लागू करता है।