ओकैम (प्रोग्रामिंग भाषा): Difference between revisions
No edit summary |
No edit summary |
||
Line 24: | Line 24: | ||
निम्नलिखित उदाहरणों में कोड को पार्स करने के लिए इंडेंटेशन और फॉर्मेटिंग महत्वपूर्ण हैं: एक्सप्रेशन लाइन (व्यंजक पंक्ति) के अंत तक समाप्त हो जाते हैं, इंडेंटेशन (अभिस्थापन) के समान स्तर पर एक्सप्रेशन (व्यंजक) की सूचियों की आवश्यकता होती है। ऑफ़-साइड नियम नाम की यह विशेषता, अन्य भाषाओं जैसे [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] और [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] में भी पाई जाती है। | निम्नलिखित उदाहरणों में कोड को पार्स करने के लिए इंडेंटेशन और फॉर्मेटिंग महत्वपूर्ण हैं: एक्सप्रेशन लाइन (व्यंजक पंक्ति) के अंत तक समाप्त हो जाते हैं, इंडेंटेशन (अभिस्थापन) के समान स्तर पर एक्सप्रेशन (व्यंजक) की सूचियों की आवश्यकता होती है। ऑफ़-साइड नियम नाम की यह विशेषता, अन्य भाषाओं जैसे [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] और [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] में भी पाई जाती है। | ||
प्रक्रियाओं के बीच संचार नामांकित चैनलों के माध्यम से कार्य करता है। एक प्रक्रिया के माध्यम से | प्रक्रियाओं के बीच संचार नामांकित चैनलों के माध्यम से कार्य करता है। एक प्रक्रिया के माध्यम से चैनल को डेटा <code>!</code> आउटपुट करता है जबकि दूसरा डेटा <code>?</code> के साथ इनपुट करता है। इनपुट और आउटपुट तब तक आगे नहीं बढ़ सकते जब तक कि दूसरा छोर डेटा को स्वीकार करने या पेश करने के लिए तैयार नहीं होता। (कार्यवाही न करने के मामले में प्रायः यह कहा जाता है कि प्रक्रिया चैनल पर ब्लॉक हो जाती है। हालाँकि, कार्यक्रम न तो स्पिन करेगा और न ही मतदान; इस प्रकार प्रतीक्षा, रुकना या उपज जैसे शब्द भी व्यवहार को व्यक्त कर सकते हैं; साथ ही इस संदर्भ में कि यह अन्य स्वतंत्र प्रक्रियाओं को चलने से नहीं रोकेगा।) उदाहरण (c वेरिएबल है): | ||
keyboard ? c | keyboard ? c | ||
Line 42: | Line 42: | ||
q() | q() | ||
<code>ALT</code> गार्ड कमांड की एक सूची निर्दिष्ट करता है। वह गार्ड | <code>ALT</code> गार्ड कमांड की एक सूची निर्दिष्ट करता है। वह गार्ड बूलियन स्थिति और इनपुट व्यंजक का संयोजन है, दोनों वैकल्पिक। प्रत्येक गार्ड जिसके लिए शर्त सत्य है और इनपुट चैनल तैयार है, सफल है। निष्पादन के लिए सफल विकल्पों में से एक का चयन किया जाता है। उदाहरण: | ||
ALT | ALT | ||
Line 58: | Line 58: | ||
out ! count2 | out ! count2 | ||
यह चैनल c1 या c2 (जो भी तैयार हो) से डेटा पढ़ेगा और इसे | यह चैनल c1 या c2 (जो भी तैयार हो) से डेटा पढ़ेगा और इसे मर्ज किए गए चैनल में पास करेगा। अगर काउंटN 100 तक पहुंचता है, तो संबंधित चैनल से पढ़ना बंद कर दिया जाएगा। स्टेटस चैनल पर एक अनुरोध का उत्तर काउंट <code>out</code>को आउटपुट करके दिया जाता है। | ||
== भाषा संशोधन == | == भाषा संशोधन == | ||
Line 64: | Line 64: | ||
=== ओकैम 1 === | === ओकैम 1 === | ||
ओकैम 1<ref name="oc1refman">{{cite book |author=<!--Must be person--> |author-link=Inmos |title=Occam प्रोग्रामिंग मैनुअल|publisher=Prentice-Hall |year=1984 |isbn=0-13-629296-8}}</ref> (1983 में रिलीज़) भाषा का | ओकैम 1<ref name="oc1refman">{{cite book |author=<!--Must be person--> |author-link=Inmos |title=Occam प्रोग्रामिंग मैनुअल|publisher=Prentice-Hall |year=1984 |isbn=0-13-629296-8}}</ref> (1983 में रिलीज़) भाषा का प्रारंभिक संस्करण था, जो ईपीएल पर डेविड मे के काम और टोनी होरे के सीएसपी से लिया गया था। यह केवल VAR डेटा प्रकार का समर्थन करता था, जो कि लक्ष्य आर्किटेक्चर की मूल शब्द लंबाई के अनुरूप एक अभिन्न प्रकार था, और केवल आयाम की सरणियाँ थीं। | ||
=== ओकैम 2 === | === ओकैम 2 === | ||
ओकैम 2 <ref name="oc2refman">{{cite book |last=Ericsson-Zenith |first=Steven |title=occam 2 Reference Manual |publisher=Prentice-Hall |year=1988 |isbn=0-13-629312-3}}</ref> 1987 में इनमोस लिमिटेड द्वारा निर्मित एक | ओकैम 2 <ref name="oc2refman">{{cite book |last=Ericsson-Zenith |first=Steven |title=occam 2 Reference Manual |publisher=Prentice-Hall |year=1988 |isbn=0-13-629312-3}}</ref> 1987 में इनमोस लिमिटेड द्वारा निर्मित एक विस्तार है जो फ्लोटिंग-पॉइंट सपोर्ट, फ़ंक्शंस, मल्टी-डायमेंशनल एरेज़ और अधिक डेटा प्रकार जैसे कि पूर्णांकों के अलग-अलग आकार (INT16, INT32) और बाइट्स जोड़ता है। | ||
इस संशोधन के साथ, ओकैम उपयोगी कार्यक्रमों को व्यक्त करने में सक्षम भाषा बन गई, जबकि ऑकैम 1 एल्गोरिदम की जांच करने और नई भाषा की खोज करने के लिए अधिक उपयुक्त थी (हालांकि, ओकैम 1 कंपाइलर ओकैम 1 में लिखा गया था,<ref name="cook1">{{cite conference |url=https://books.google.com/books?id=nvnnZtJWAZkC&q=architectures+languages+and+techniques+barry+cook |title= फील्ड-प्रोग्रामेबल गेट एरेज़ पर आ जाओ|last1=Cook |first1=Barry M |last2=Peel |first2=RMA |date=1999-04-11 |conference=22nd World Occam and Transputer User Group Technical Meeting |editor-last=Cook |editor-first=Barry M. |book-title=Architectures, Languages and Techniques for Concurrent Systems |publisher=IOS Press |location=Keele, United Kingdom |isbn= 90-5199-480-X |page=219 |access-date=2016-11-28}}</ref> इसलिए | इस संशोधन के साथ, ओकैम उपयोगी कार्यक्रमों को व्यक्त करने में सक्षम भाषा बन गई, जबकि ऑकैम 1 एल्गोरिदम की जांच करने और नई भाषा की खोज करने के लिए अधिक उपयुक्त थी (हालांकि, ओकैम 1 कंपाइलर ओकैम 1 में लिखा गया था,<ref name="cook1">{{cite conference |url=https://books.google.com/books?id=nvnnZtJWAZkC&q=architectures+languages+and+techniques+barry+cook |title= फील्ड-प्रोग्रामेबल गेट एरेज़ पर आ जाओ|last1=Cook |first1=Barry M |last2=Peel |first2=RMA |date=1999-04-11 |conference=22nd World Occam and Transputer User Group Technical Meeting |editor-last=Cook |editor-first=Barry M. |book-title=Architectures, Languages and Techniques for Concurrent Systems |publisher=IOS Press |location=Keele, United Kingdom |isbn= 90-5199-480-X |page=219 |access-date=2016-11-28}}</ref> इसलिए अस्तित्व प्रमाण है कि यथोचित आकार, उपयोगी कार्यक्रम इसकी सीमाओं के बावजूद 1 में लिखा जा सकता है)। | ||
=== ओकैम 2.1 === | === ओकैम 2.1 === | ||
ओकैम 2.1<ref name="oc21refman"/> इनमोस द्वारा योगदान किए गए ओकैम भाषा विकास की श्रृंखला का अंतिम था। 1994 में परिभाषित, यह 1990 के दशक की शुरुआत में इनमोस में ज्योफ बैरेट द्वारा बनाई गई ओकैम 3 भाषा (इसके | ओकैम 2.1<ref name="oc21refman"/> इनमोस द्वारा योगदान किए गए ओकैम भाषा विकास की श्रृंखला का अंतिम था। 1994 में परिभाषित, यह 1990 के दशक की शुरुआत में इनमोस में ज्योफ बैरेट द्वारा बनाई गई ओकैम 3 भाषा (इसके प्रारंभिक विकास के दौरान "ओकैम91" के रूप में भी जाना जाता है) के लिए पहले के प्रस्ताव से प्रभावित था। ओकैम 3 का वर्णन करने वाला एक संशोधित संदर्भ मैनुअल सामुदायिक टिप्पणी के लिए वितरित किया गया था,<ref name="occam3">{{cite journal |last1=Barrett |first1=Geoff |last2=Ericsson-Zenith |first2=Steven |title=occam 3 Reference Manual |url=http://www.wotug.org/occam/documentation/oc3refman.pdf |date=1992-03-31 |publisher=[[Inmos]] |access-date=2008-03-24}}</ref> लेकिन कंपाइलर में भाषा को कभी भी पूरी तरह से लागू नहीं किया गया था। | ||
ओकैम 2.1 ने ऑकैम 2 के लिए कई नई सुविधाएँ प्रस्तुत कीं, जिनमें सम्मिलित हैं: | ओकैम 2.1 ने ऑकैम 2 के लिए कई नई सुविधाएँ प्रस्तुत कीं, जिनमें सम्मिलित हैं: | ||
Line 86: | Line 86: | ||
===ओकैम-π=== | ===ओकैम-π=== | ||
ओकैम-π<ref name="kroc">{{cite web |url=http://www.cs.kent.ac.uk/projects/ofa/kroc/ |title=occam-pi: Blending the best of CSP and the pi-calculus |last1=Barnes |first1=Fred |last2=Welch |first2=Peter |date=2006-01-14 |access-date=2006-11-24}}</ref> केंट रिटारगेटेबल ओकैम कंपाइलर ([[केआरओसी]]) के बाद के संस्करणों द्वारा लागू किए गए ओकैम वेरिएंट के लिए सामान्य नाम है। ओकैम नाम में प्रतीक π को जोड़ना केआरओसी ओकैम के लिए एक भ्रम है जिसमें π-कैलकुलस से प्रेरित कई विचार | ओकैम-π<ref name="kroc">{{cite web |url=http://www.cs.kent.ac.uk/projects/ofa/kroc/ |title=occam-pi: Blending the best of CSP and the pi-calculus |last1=Barnes |first1=Fred |last2=Welch |first2=Peter |date=2006-01-14 |access-date=2006-11-24}}</ref> केंट रिटारगेटेबल ओकैम कंपाइलर ([[केआरओसी]]) के बाद के संस्करणों द्वारा लागू किए गए ओकैम वेरिएंट के लिए सामान्य नाम है। ओकैम नाम में प्रतीक π को जोड़ना केआरओसी ओकैम के लिए एक भ्रम है जिसमें π-कैलकुलस से प्रेरित कई विचार सम्मिलित हैं। इसमें ओकैम 2.1 कंपाइलर के कई महत्वपूर्ण विस्तार सम्मिलित हैं, उदाहरण के लिए: | ||
* [[नेस्टिंग (कंप्यूटिंग)]] [[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] | * [[नेस्टिंग (कंप्यूटिंग)]] [[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] | ||
* रन-टाइम प्रोसेस क्रिएशन | * रन-टाइम प्रोसेस क्रिएशन |
Revision as of 08:40, 5 June 2023
Paradigm | Imperative, procedural, concurrent |
---|---|
द्वारा डिज़ाइन किया गया | David May |
Developer | Inmos |
पहली प्रस्तुति | 1983 |
Stable release | 2.1 (official), 2.5 (unofficial), 3 (not fully implemented)
/ 1994 |
Dialects | |
occam-π (pi) | |
Influenced by | |
Communicating sequential processes | |
Influenced | |
Ease, Go, Python |
ओकैम एक प्रोग्रामिंग भाषा है जो समवर्ती है और कम्युनिकेटिंग सीक्वेंशियल प्रोसेस (संचार अनुक्रमिक प्रक्रियाओं ) (सीएसपी) प्रक्रिया बीजगणित पर निर्मित है,[1]और इसकी कई विशेषताएं साझा करती हैं। इसका नाम ओखम के दार्शनिक विलियम के नाम पर रखा गया है, जिनके नाम पर ओकाम के रेज़र का नाम रखा गया है।
ओकैम एक अनिवार्य प्रक्रियात्मक भाषा (जैसे पास्कल) है। यह डेविड मे और अन्य लोगों द्वारा इनमोस (ट्रेडमार्क आईएनएमओएस) में विकसित किया गया था, टोनी होरे द्वारा सलाह दी गई थी, उनके ट्रांसप्यूटर माइक्रोप्रोसेसरों के लिए मूल प्रोग्रामिंग भाषा के रूप में, लेकिन अन्य प्लेटफार्मों के लिए कार्यान्वयन उपलब्ध हैं। सबसे व्यापक रूप से जाना जाने वाला संस्करण ऑकैम 2 है; इसका प्रोग्रामिंग मैनुअल स्टीवन एरिक्सन-जेनिथ और इनमोस में अन्य लोगों द्वारा लिखा गया था।
सिंहावलोकन
निम्नलिखित उदाहरणों में कोड को पार्स करने के लिए इंडेंटेशन और फॉर्मेटिंग महत्वपूर्ण हैं: एक्सप्रेशन लाइन (व्यंजक पंक्ति) के अंत तक समाप्त हो जाते हैं, इंडेंटेशन (अभिस्थापन) के समान स्तर पर एक्सप्रेशन (व्यंजक) की सूचियों की आवश्यकता होती है। ऑफ़-साइड नियम नाम की यह विशेषता, अन्य भाषाओं जैसे हास्केल और पायथन में भी पाई जाती है।
प्रक्रियाओं के बीच संचार नामांकित चैनलों के माध्यम से कार्य करता है। एक प्रक्रिया के माध्यम से चैनल को डेटा !
आउटपुट करता है जबकि दूसरा डेटा ?
के साथ इनपुट करता है। इनपुट और आउटपुट तब तक आगे नहीं बढ़ सकते जब तक कि दूसरा छोर डेटा को स्वीकार करने या पेश करने के लिए तैयार नहीं होता। (कार्यवाही न करने के मामले में प्रायः यह कहा जाता है कि प्रक्रिया चैनल पर ब्लॉक हो जाती है। हालाँकि, कार्यक्रम न तो स्पिन करेगा और न ही मतदान; इस प्रकार प्रतीक्षा, रुकना या उपज जैसे शब्द भी व्यवहार को व्यक्त कर सकते हैं; साथ ही इस संदर्भ में कि यह अन्य स्वतंत्र प्रक्रियाओं को चलने से नहीं रोकेगा।) उदाहरण (c वेरिएबल है):
keyboard ? c
screen ! c
SEQ
व्यंजक की एक सूची प्रस्तुत करता है जिसका मूल्यांकन क्रमिक रूप से किया जाता है। यह अंतर्निहित नहीं है क्योंकि यह अन्य प्रोग्रामिंग भाषाओं में है। उदाहरण :
SEQ x := x + 1 y := x * x
PAR
उन व्यंजकों की सूची प्रारंभ करता है जिनका समवर्ती रूप से मूल्यांकन किया जा सकता है। उदाहरण:
PAR p() q()
ALT
गार्ड कमांड की एक सूची निर्दिष्ट करता है। वह गार्ड बूलियन स्थिति और इनपुट व्यंजक का संयोजन है, दोनों वैकल्पिक। प्रत्येक गार्ड जिसके लिए शर्त सत्य है और इनपुट चैनल तैयार है, सफल है। निष्पादन के लिए सफल विकल्पों में से एक का चयन किया जाता है। उदाहरण:
ALT count1 < 100 & c1 ? data SEQ count1 := count1 + 1 merged ! data count2 < 100 & c2 ? data SEQ count2 := count2 + 1 merged ! data status ? request SEQ out ! count1 out ! count2
यह चैनल c1 या c2 (जो भी तैयार हो) से डेटा पढ़ेगा और इसे मर्ज किए गए चैनल में पास करेगा। अगर काउंटN 100 तक पहुंचता है, तो संबंधित चैनल से पढ़ना बंद कर दिया जाएगा। स्टेटस चैनल पर एक अनुरोध का उत्तर काउंट out
को आउटपुट करके दिया जाता है।
भाषा संशोधन
ओकैम 1
ओकैम 1[2] (1983 में रिलीज़) भाषा का प्रारंभिक संस्करण था, जो ईपीएल पर डेविड मे के काम और टोनी होरे के सीएसपी से लिया गया था। यह केवल VAR डेटा प्रकार का समर्थन करता था, जो कि लक्ष्य आर्किटेक्चर की मूल शब्द लंबाई के अनुरूप एक अभिन्न प्रकार था, और केवल आयाम की सरणियाँ थीं।
ओकैम 2
ओकैम 2 [3] 1987 में इनमोस लिमिटेड द्वारा निर्मित एक विस्तार है जो फ्लोटिंग-पॉइंट सपोर्ट, फ़ंक्शंस, मल्टी-डायमेंशनल एरेज़ और अधिक डेटा प्रकार जैसे कि पूर्णांकों के अलग-अलग आकार (INT16, INT32) और बाइट्स जोड़ता है।
इस संशोधन के साथ, ओकैम उपयोगी कार्यक्रमों को व्यक्त करने में सक्षम भाषा बन गई, जबकि ऑकैम 1 एल्गोरिदम की जांच करने और नई भाषा की खोज करने के लिए अधिक उपयुक्त थी (हालांकि, ओकैम 1 कंपाइलर ओकैम 1 में लिखा गया था,[4] इसलिए अस्तित्व प्रमाण है कि यथोचित आकार, उपयोगी कार्यक्रम इसकी सीमाओं के बावजूद 1 में लिखा जा सकता है)।
ओकैम 2.1
ओकैम 2.1[1] इनमोस द्वारा योगदान किए गए ओकैम भाषा विकास की श्रृंखला का अंतिम था। 1994 में परिभाषित, यह 1990 के दशक की शुरुआत में इनमोस में ज्योफ बैरेट द्वारा बनाई गई ओकैम 3 भाषा (इसके प्रारंभिक विकास के दौरान "ओकैम91" के रूप में भी जाना जाता है) के लिए पहले के प्रस्ताव से प्रभावित था। ओकैम 3 का वर्णन करने वाला एक संशोधित संदर्भ मैनुअल सामुदायिक टिप्पणी के लिए वितरित किया गया था,[5] लेकिन कंपाइलर में भाषा को कभी भी पूरी तरह से लागू नहीं किया गया था।
ओकैम 2.1 ने ऑकैम 2 के लिए कई नई सुविधाएँ प्रस्तुत कीं, जिनमें सम्मिलित हैं:
- नामित डेटा प्रकार (डेटा प्रकार x y है)
- नामित रिकॉर्ड
- पैक्ड रिकॉर्ड
- कुछ प्रकार के रूपांतरण नियमों में छूट
- नए ऑपरेटर (जैसे बाइटेसिन)
- चैनल रीटाइपिंग और चैनल सरणी
- फ़ंक्शन से निश्चित-लंबाई सरणी वापस करने की क्षमता।
परिवर्तनों की पूरी सूची के लिए इनमोस ओकैम 2.1 संदर्भ मैनुअल का परिशिष्ट P देखें।
ओकैम-π
ओकैम-π[6] केंट रिटारगेटेबल ओकैम कंपाइलर (केआरओसी) के बाद के संस्करणों द्वारा लागू किए गए ओकैम वेरिएंट के लिए सामान्य नाम है। ओकैम नाम में प्रतीक π को जोड़ना केआरओसी ओकैम के लिए एक भ्रम है जिसमें π-कैलकुलस से प्रेरित कई विचार सम्मिलित हैं। इसमें ओकैम 2.1 कंपाइलर के कई महत्वपूर्ण विस्तार सम्मिलित हैं, उदाहरण के लिए:
- नेस्टिंग (कंप्यूटिंग) प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
- रन-टाइम प्रोसेस क्रिएशन
- मोबाइल चैनल, डेटा और प्रक्रियाएं
- रिकर्सन
- प्प्रोटोकॉल इनहेरिटेन्स
- ऐरे कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
- विस्तारित बैरियर (कंप्यूटर विज्ञान)
यह भी देखें
- XC प्रोग्रामिंग लैंग्वेज, जो occam पर आधारित है लेकिन C-स्टाइल सिंटैक्स के साथ है।
- समवर्ती कंप्यूटिंग # समवर्ती प्रोग्रामिंग का समर्थन करने वाली भाषाएँ
- समवर्ती और समानांतर प्रोग्रामिंग भाषाओं की सूची
संदर्भ
- ↑ 1.0 1.1 occam 2.1 Reference Manual (PDF). SGS-Thomson Microelectronics Ltd. 1995-05-12. Inmos document 72 occ 45 03
- ↑ Occam प्रोग्रामिंग मैनुअल. Prentice-Hall. 1984. ISBN 0-13-629296-8.
- ↑ Ericsson-Zenith, Steven (1988). occam 2 Reference Manual. Prentice-Hall. ISBN 0-13-629312-3.
- ↑ Cook, Barry M; Peel, RMA (1999-04-11). "फील्ड-प्रोग्रामेबल गेट एरेज़ पर आ जाओ". In Cook, Barry M. (ed.). Architectures, Languages and Techniques for Concurrent Systems. 22nd World Occam and Transputer User Group Technical Meeting. Keele, United Kingdom: IOS Press. p. 219. ISBN 90-5199-480-X. Retrieved 2016-11-28.
- ↑ Barrett, Geoff; Ericsson-Zenith, Steven (1992-03-31). "occam 3 Reference Manual" (PDF). Inmos. Retrieved 2008-03-24.
{{cite journal}}
: Cite journal requires|journal=
(help) - ↑ Barnes, Fred; Welch, Peter (2006-01-14). "occam-pi: Blending the best of CSP and the pi-calculus". Retrieved 2006-11-24.
अग्रिम पठन
- Communicating Process Architectures 2007 – WoTUG-30. IOS Press. 2007. pp. 513 pages. ISBN 978-1-58603-767-3. [1]
- Communicating Process Architectures 2006 – WoTUG-29. IOS Press. 2006. pp. 391 pages. ISBN 978-1-58603-671-3. [2]
- Communicating Process Architectures 2005 – WoTUG-28. IOS Press. 2005. pp. 405 pages. ISBN 978-1-58603-561-7. [3]
- Kerridge, Jon, ed. (1993). Transputer and Occam Research: New Directions. IOS Press. pp. 253 pages. ISBN 0-8247-0711-7.
- Roscoe, Andrew William; Hoare, Charles Antony Richard (1986). The Laws of Occam Programming. Programming Research Group, Oxford University.
- Egorov, A., Technical University – Sofia, (1983-2011) Записки по Компютърни архитектури
बाहरी संबंध
- Information, compilers, editors and utilities at the WoTUG occam pages
- Compilers, documentation, examples, projects and utilities at the Internet Parallel Computing Archive (no longer maintained)
- Occam books on Transputer.net
- The occam-pi language.
- Tock occam compiler – (translator from occam to C from Kent) a Haskell-based compiler for occam and related languages.