ओकैम (प्रोग्रामिंग भाषा): Difference between revisions

From Vigyanwiki
(Created page with "{{Distinguish|OCaml}} {{lowercase title|occam (programming language)}} {{Infobox programming language | name = occam | logo = 1983 1988 Trademark occam and occam 2 INMOS Limit...")
 
No edit summary
 
(10 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Distinguish|OCaml}}
{{lowercase title|occam (programming language)}}
{{Infobox programming language
{{Infobox programming language
| name = occam
| name = ओकैम
| logo = 1983 1988 Trademark occam and occam 2 INMOS Limited.jpg
| logo = 1983 1988 Trademark occam and occam 2 INMOS Limited.jpg
| paradigm = [[Imperative programming|Imperative]], [[Procedural programming|procedural]], [[Concurrent computing|concurrent]]
| paradigm = [[अनिवार्य प्रोग्रामिंग|अनिवार्य]], [[प्रक्रियात्मक प्रोग्रामिंग|प्रक्रियात्मक]], [[समवर्ती कंप्यूटिंग|समवर्ती]]
| designer = [[David May (computer scientist)|David May]]
| designer = [[डेविड मे (कंप्यूटर वैज्ञानिक)|डेविड मे]]
| developer = [[Inmos]]
| developer = [[इनमोस]]
| released = {{Start date and age|1983}}
| released = {{प्रारंभ तिथि और आयु|1983}}
| latest release version = 2.1 (official), 2.5 (unofficial), 3 (not fully implemented)
| latest release version = 2.1 (आधिकारिक), 2.5 (अनौपचारिक), 3 (पूरी तरह से लागू नहीं)
| latest release date = {{Start date and age|1994}}
| latest release date = {{आरंभ तिथि और आयु|1994}}
| typing =  
| typing =  
| implementations =  
| implementations =  
| dialects = [[occam-π]] (pi)
| dialects = [[ओकैम-π]] (पाई)
| influenced by = [[Communicating sequential processes]]
| influenced by = [[अनुक्रमिक प्रक्रियाओं का संचार]]
| influenced = [[Ease (programming language)|Ease]], [[Go (programming language)|Go]], [[Python (programming language)|Python]]
| influenced = [[ईज (प्रोग्रामिंग लैंग्वेज)|ईज]], [[गो (प्रोग्रामिंग लैंग्वेज)|गो]], [[पायथन (प्रोग्रामिंग लैंग्वेज)|पायथन]]
}}
}}


ओकैम एक [[प्रोग्रामिंग भाषा]] है जो [[समवर्ती कंप्यूटिंग]] है और संचार अनुक्रमिक प्रक्रियाओं (सीएसपी) प्रक्रिया बीजगणित पर बनाता है,<ref name="oc21refman">{{cite book |author=<!--Must be person--> |author-link=Inmos |url=http://www.wotug.org/occam/documentation/oc21refman.pdf |title=occam 2.1 Reference Manual |publisher=SGS-Thomson Microelectronics Ltd |date=1995-05-12}} Inmos document 72 occ 45 03</ref> और इसकी कई विशेषताएं साझा करता है। इसका नाम ओखम के दार्शनिक विलियम के नाम पर रखा गया है, जिनके नाम पर ओकाम के उस्तरे का नाम रखा गया है।
'''ओकैम''' एक [[प्रोग्रामिंग भाषा]] है जो [[समवर्ती कंप्यूटिंग|समवर्ती]] है और कम्युनिकेटिंग सीक्वेंशियल प्रोसेस (संचार अनुक्रमिक प्रक्रियाओं ) (सीएसपी) प्रक्रिया बीजगणित पर निर्मित है,<ref name="oc21refman">{{cite book |author=<!--Must be person--> |author-link=Inmos |url=http://www.wotug.org/occam/documentation/oc21refman.pdf |title=occam 2.1 Reference Manual |publisher=SGS-Thomson Microelectronics Ltd |date=1995-05-12}} Inmos document 72 occ 45 03</ref>और इसकी कई विशेषताएं साझा करती हैं। इसका नाम ओखम के दार्शनिक विलियम के नाम पर रखा गया है, जिनके नाम पर ओकाम के रेज़र का नाम रखा गया है।


ओकैम एक [[अनिवार्य प्रोग्रामिंग]] [[प्रक्रियात्मक प्रोग्रामिंग]] भाषा है (जैसे [[पास्कल (प्रोग्रामिंग भाषा)]])यह डेविड मे (कंप्यूटर वैज्ञानिक) और [[इनमोस]] (ट्रेडमार्क INMOS) में अन्य लोगों द्वारा विकसित किया गया था, [[टोनी होरे]] द्वारा सलाह दी गई थी, उनके [[ transputer ]] [[माइक्रोप्रोसेसर]]ों के लिए मूल प्रोग्रामिंग भाषा के रूप में, लेकिन अन्य प्लेटफार्मों के लिए कार्यान्वयन उपलब्ध हैं। सबसे व्यापक रूप से ज्ञात संस्करण ओकैम 2 है; इसका प्रोग्रामिंग मैनुअल स्टीवन एरिक्सन-जेनिथ और अन्य द्वारा इनमोस में लिखा गया था।
ओकैम एक [[अनिवार्य प्रोग्रामिंग|अनिवार्य]] प्रक्रियात्मक भाषा (जैसे [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल]]) है। यह डेविड मे और अन्य लोगों द्वारा इनमोस (ट्रेडमार्क आईएनएमओएस) में विकसित किया गया था, [[टोनी होरे]] द्वारा सलाह दी गई थी, उनके ट्रांसप्यूटर माइक्रोप्रोसेसरों के लिए मूल प्रोग्रामिंग भाषा के रूप में, लेकिन अन्य प्लेटफार्मों के लिए कार्यान्वयन उपलब्ध हैं। सबसे व्यापक रूप से जाना जाने वाला संस्करण ऑकैम 2 है; इसका प्रोग्रामिंग मैनुअल स्टीवन एरिक्सन-जेनिथ और इनमोस में अन्य लोगों द्वारा लिखा गया था।


== सिंहावलोकन ==
== सिंहावलोकन ==
निम्नलिखित उदाहरणों में कोड को पार्स करने के लिए इंडेंटेशन और फॉर्मेटिंग महत्वपूर्ण हैं: एक्सप्रेशन लाइन के अंत तक समाप्त हो जाते हैं, एक्सप्रेशन की सूची इंडेंटेशन के समान स्तर पर होनी चाहिए। ऑफ़-साइड नियम नाम की यह विशेषता [[हास्केल (प्रोग्रामिंग भाषा)]] और [[पायथन (प्रोग्रामिंग भाषा)]] जैसी अन्य भाषाओं में भी पाई जाती है।
निम्नलिखित उदाहरणों में कोड को पार्स करने के लिए इंडेंटेशन और फॉर्मेटिंग महत्वपूर्ण हैं: एक्सप्रेशन लाइन (व्यंजक पंक्ति) के अंत तक समाप्त हो जाते हैं, इंडेंटेशन (अभिस्थापन) के समान स्तर पर एक्सप्रेशन (व्यंजक) की सूचियों की आवश्यकता होती है। ऑफ़-साइड नियम नाम की यह विशेषता, अन्य भाषाओं जैसे [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] और [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] में भी पाई जाती है।


प्रक्रियाओं के बीच संचार नामित [[चैनल (प्रोग्रामिंग)]] के माध्यम से काम करता है। एक प्रक्रिया डेटा को एक चैनल के माध्यम से आउटपुट करती है <code>!</code> जबकि दूसरा डेटा इनपुट करता है <code>?</code>. इनपुट और आउटपुट तब तक आगे नहीं बढ़ सकते जब तक कि दूसरा छोर डेटा को स्वीकार या पेश करने के लिए तैयार न हो। (कार्यवाही न करने के मामले में अक्सर यह कहा जाता है कि चैनल पर प्रोसेस [[ अवरुद्ध करना (कंप्यूटिंग) ]] है। हालांकि, कार्यक्रम न तो स्पिन करेगा और न ही मतदान करेगा, इस प्रकार प्रतीक्षा, हैंग या यील्ड जैसे शब्द भी व्यवहार को व्यक्त कर सकते हैं; संदर्भ में भी कि यह अन्य स्वतंत्र प्रक्रियाओं को चलने से नहीं रोकेगा।) उदाहरण (c एक चर है):
प्रक्रियाओं के बीच संचार नामांकित चैनलों के माध्यम से कार्य करता है। एक प्रक्रिया के माध्यम से चैनल को डेटा <code>!</code> आउटपुट करता है  जबकि दूसरा डेटा <code>?</code> के साथ इनपुट करता है। इनपुट और आउटपुट तब तक आगे नहीं बढ़ सकते जब तक कि दूसरा छोर डेटा को स्वीकार करने या पेश करने के लिए तैयार नहीं होता। (कार्यवाही न करने के मामले में प्रायः यह कहा जाता है कि प्रक्रिया चैनल पर ब्लॉक हो जाती है। हालाँकि, कार्यक्रम न तो स्पिन करेगा और न ही मतदान; इस प्रकार प्रतीक्षा, रुकना या उपज जैसे शब्द भी व्यवहार को व्यक्त कर सकते हैं; साथ ही इस संदर्भ में कि यह अन्य स्वतंत्र प्रक्रियाओं को चलने से नहीं रोकेगा।) उदाहरण (c वेरिएबल है):


  कीबोर्ड ? सी
keyboard ? c


  स्क्रीन ! सी
screen ! c


<code>SEQ</code> उन भावों की सूची प्रस्तुत करता है जिनका मूल्यांकन क्रमिक रूप से किया जाता है। यह निहित नहीं है क्योंकि यह अधिकांश अन्य प्रोग्रामिंग भाषाओं में है। उदाहरण:
<code>SEQ</code> व्यंजक की एक सूची प्रस्तुत करता है जिसका मूल्यांकन क्रमिक रूप से किया जाता है। यह अंतर्निहित नहीं है क्योंकि यह अन्य प्रोग्रामिंग भाषाओं में है। उदाहरण :


  स्व-परीक्षा प्रश्न
SEQ
     एक्स := एक्स + 1
     := x + 1
     := एक्स * एक्स
     := x * x


<code>PAR</code> अभिव्यक्तियों की एक सूची शुरू करता है जिसका मूल्यांकन समवर्ती रूप से किया जा सकता है। उदाहरण:
<code>PAR</code> उन व्यंजकों की सूची प्रारंभ करता है जिनका समवर्ती रूप से मूल्यांकन किया जा सकता है। उदाहरण:


   बराबर
   PAR
     पी()
     p()
     क्यू()
     q()


<code>ALT</code> गार्ड (कंप्यूटर विज्ञान) की एक सूची निर्दिष्ट करता है। गार्ड एक बूलियन स्थिति और एक इनपुट अभिव्यक्ति का एक संयोजन है, दोनों वैकल्पिक हैं। प्रत्येक गार्ड जिसके लिए स्थिति सही है और इनपुट चैनल तैयार है, सफल है। निष्पादन के लिए सफल विकल्पों में से एक का चयन किया जाता है। उदाहरण:
<code>ALT</code> गार्ड कमांड की एक सूची निर्दिष्ट करता है। वह गार्ड बूलियन स्थिति और इनपुट व्यंजक का संयोजन है, दोनों वैकल्पिक। प्रत्येक गार्ड जिसके लिए शर्त सत्य है और इनपुट चैनल तैयार है, सफल है। निष्पादन के लिए सफल विकल्पों में से एक का चयन किया जाता है। उदाहरण:


  ऑल्ट
ALT
     गिनती 1 <100 और सी 1? आंकड़े
     count1 < 100 & c1 ? data
       स्व-परीक्षा प्रश्न
       SEQ
         काउंट 1: = काउंट 1 + 1
         count1 := count1 + 1
         विलय होना ! आंकड़े
         merged ! data
     गिनती 2 <100 और सी 2? आंकड़े
     count2 < 100 & c2 ? data
       स्व-परीक्षा प्रश्न
       SEQ
         काउंट2 := काउंट2 + 1
         count2 := count2 + 1
         विलय होना ! आंकड़े
         merged ! data
     दर्जा ? अनुरोध
     status ? request
       स्व-परीक्षा प्रश्न
       SEQ
         बाहर ! गिनती1
         out ! count1
         बाहर ! गिनती2
         out ! count2


यह चैनल c1 या c2 (जो भी तैयार हो) से डेटा पढ़ेगा और इसे मर्ज किए गए चैनल में भेज देगा। यदि काउंटएन 100 तक पहुंचता है, तो संबंधित चैनल से पढ़ना अक्षम हो जाएगा। स्टेटस चैनल पर एक अनुरोध का जवाब काउंट्स को आउटपुट करके दिया जाता है <code>out</code>.
यह चैनल c1 या c2 (जो भी तैयार हो) से डेटा पढ़ेगा और इसे मर्ज किए गए चैनल में पास करेगा। अगर काउंटN 100 तक पहुंचता है, तो संबंधित चैनल से पढ़ना बंद कर दिया जाएगा। स्टेटस चैनल पर एक अनुरोध का उत्तर काउंट <code>out</code>को आउटपुट करके दिया जाता है।


== भाषा संशोधन ==
== भाषा संशोधन ==
[[File:1983 Programming manual occam by INMOS Limited.jpg|thumb|1983 INMOS लिमिटेड द्वारा ओकाम]]
[[File:1983 Programming manual occam by INMOS Limited.jpg|thumb|1983ओकैम इनमोस लिमिटेड द्वारा]]


=== अवसर 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 में जारी) भाषा का एक प्रारंभिक संस्करण था जिसे ईपीएल और टोनी होरे के सीएसपी पर डेविड मे (कंप्यूटर वैज्ञानिक) के काम से उधार लिया गया था। यह केवल VAR डेटा प्रकार का समर्थन करता है, जो लक्ष्य आर्किटेक्चर की मूल शब्द लंबाई के अनुरूप एक अभिन्न प्रकार था, और केवल एक आयाम की सरणियाँ।
ओकैम 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 में इनमोस लिमिटेड द्वारा निर्मित एक एक्सटेंशन है जो [[ तैरनेवाला स्थल ]] सपोर्ट, फ़ंक्शंस, बहु-आयामी सरणियाँ और अधिक डेटा प्रकार जैसे कि पूर्णांकों के अलग-अलग आकार (INT16, INT32) और बाइट्स जोड़ता है।
ओकैम 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 कंपाइलर ओकैम 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 भाषा (इसके शुरुआती विकास के दौरान ओकैम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<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 के लिए कई नई सुविधाएँ प्रस्तुत कीं, जिनमें सम्मिलित हैं:
*नामित डेटा प्रकार (डेटा प्रकार x IS y)
*नामित डेटा प्रकार (डेटा प्रकार x y है)
* नामित रिकॉर्ड
* नामित रिकॉर्ड
* पैक्ड रिकॉर्ड
* पैक्ड रिकॉर्ड
Line 83: Line 81:
* फ़ंक्शन से निश्चित-लंबाई सरणी वापस करने की क्षमता।
* फ़ंक्शन से निश्चित-लंबाई सरणी वापस करने की क्षमता।


परिवर्तनों की पूरी सूची के लिए [http://wotug.org/occam/documentation/oc21refman.pdf Inmos occam 2.1 संदर्भ मैनुअल] का परिशिष्ट P देखें।
परिवर्तनों की पूरी सूची के लिए इनमोस ओकैम [http://wotug.org/occam/documentation/oc21refman.pdf 2.1 संदर्भ मैनुअल] का परिशिष्ट P देखें।


===ओकम-π===
===ओकैम-π===
ओकम-π<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> केंट रिटारगेटेबल ओकम कंपाइलर ([[केआरओसी]]) के बाद के संस्करणों द्वारा लागू किए गए ओकैम संस्करण के लिए सामान्य नाम है। ओकैम नाम में पाई (अक्षर)|π (पी) प्रतीक को जोड़ना KRoC ओकैम के लिए एक भ्रम है जिसमें π-कैलकुलस से प्रेरित कई विचार शामिल हैं। इसमें ओकैम 2.1 कंपाइलर के लिए कई महत्वपूर्ण एक्सटेंशन शामिल हैं, उदाहरण के लिए:
ओकैम-π<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 कंपाइलर के कई महत्वपूर्ण विस्तार सम्मिलित हैं, उदाहरण के लिए:
* [[नेस्टिंग (कंप्यूटिंग)]] [[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]]
* [[नेस्टिंग (कंप्यूटिंग)]] [[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]]
* रन-टाइम प्रक्रिया निर्माण
* रन-टाइम प्रोसेस क्रिएशन
* मोबाइल चैनल, डेटा और प्रक्रियाएं
* मोबाइल चैनल, डेटा और प्रक्रियाएं
*पुनरावृत्ति (कंप्यूटर विज्ञान)
*रिकर्सन
* प्रोटोकॉल [[ वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) ]]
* प्प्रोटोकॉल इनहेरिटेन्स
* ऐरे [[कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]]
* ऐरे [[कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]]
*विस्तारित [[बैरियर (कंप्यूटर विज्ञान)]]
*विस्तारित [[बैरियर (कंप्यूटर विज्ञान)]]
Line 122: Line 120:


{{Authority control}}
{{Authority control}}
[[Category: समवर्ती प्रोग्रामिंग भाषाएँ]] [[Category: प्रक्रियात्मक प्रोग्रामिंग भाषाएँ]] [[Category: 1983 में बनाई गई प्रोग्रामिंग लैंग्वेज]]


 
[[Category:1983 में बनाई गई प्रोग्रामिंग लैंग्वेज]]
 
[[Category:CS1 errors]]
[[Category: Machine Translated Page]]
[[Category:Created On 26/05/2023]]
[[Category:Created On 26/05/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:प्रक्रियात्मक प्रोग्रामिंग भाषाएँ]]
[[Category:समवर्ती प्रोग्रामिंग भाषाएँ]]

Latest revision as of 14:14, 14 June 2023

ओकैम
1983 1988 Trademark occam and occam 2 INMOS Limited.jpg
Paradigmअनिवार्य, प्रक्रियात्मक, समवर्ती
द्वारा डिज़ाइन किया गयाडेविड मे
Developerइनमोस
Stable release
2.1 (आधिकारिक), 2.5 (अनौपचारिक), 3 (पूरी तरह से लागू नहीं) / Template:आरंभ तिथि और आयु
Dialects
ओकैम-π (पाई)
Influenced by
अनुक्रमिक प्रक्रियाओं का संचार
Influenced
ईज, गो, पायथन

ओकैम एक प्रोग्रामिंग भाषा है जो समवर्ती है और कम्युनिकेटिंग सीक्वेंशियल प्रोसेस (संचार अनुक्रमिक प्रक्रियाओं ) (सीएसपी) प्रक्रिया बीजगणित पर निर्मित है,[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को आउटपुट करके दिया जाता है।

भाषा संशोधन

1983ओकैम इनमोस लिमिटेड द्वारा

ओकैम 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 कंपाइलर के कई महत्वपूर्ण विस्तार सम्मिलित हैं, उदाहरण के लिए:

यह भी देखें

संदर्भ

  1. 1.0 1.1 occam 2.1 Reference Manual (PDF). SGS-Thomson Microelectronics Ltd. 1995-05-12. Inmos document 72 occ 45 03
  2. Occam प्रोग्रामिंग मैनुअल. Prentice-Hall. 1984. ISBN 0-13-629296-8.
  3. Ericsson-Zenith, Steven (1988). occam 2 Reference Manual. Prentice-Hall. ISBN 0-13-629312-3.
  4. 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.
  5. 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)
  6. Barnes, Fred; Welch, Peter (2006-01-14). "occam-pi: Blending the best of CSP and the pi-calculus". Retrieved 2006-11-24.


अग्रिम पठन


बाहरी संबंध