ओकैम (प्रोग्रामिंग भाषा): Difference between revisions
(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 |
||
Line 17: | Line 17: | ||
}} | }} | ||
ओकैम एक [[प्रोग्रामिंग भाषा]] है जो [[समवर्ती कंप्यूटिंग]] है और संचार अनुक्रमिक प्रक्रियाओं (सीएसपी) प्रक्रिया बीजगणित पर | '''ओकैम''' एक [[प्रोग्रामिंग भाषा]] है जो [[समवर्ती कंप्यूटिंग|समवर्ती]] है और कम्युनिकेटिंग सीक्वेंशियल प्रोसेस (संचार अनुक्रमिक प्रक्रियाओं ) (सीएसपी) प्रक्रिया बीजगणित पर निर्मित है,<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>और इसकी कई विशेषताएं साझा करती हैं। इसका नाम ओखम के दार्शनिक विलियम के नाम पर रखा गया है, जिनके नाम पर ओकाम के रेज़र का नाम रखा गया है। | ||
ओकम एक [[अनिवार्य प्रोग्रामिंग|अनिवार्य]] प्रक्रियात्मक भाषा (जैसे [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल]]) है। यह डेविड मे और अन्य लोगों द्वारा इनमोस (ट्रेडमार्क आईएनएमओएस) में विकसित किया गया था, [[टोनी होरे]] द्वारा सलाह दी गई थी, उनके ट्रांसप्यूटर माइक्रोप्रोसेसरों के लिए मूल प्रोग्रामिंग भाषा के रूप में, लेकिन अन्य प्लेटफार्मों के लिए कार्यान्वयन उपलब्ध हैं। सबसे व्यापक रूप से जाना जाने वाला संस्करण ऑकैम 2 है; इसका प्रोग्रामिंग मैनुअल स्टीवन एरिक्सन-जेनिथ और इनमोस में अन्य लोगों द्वारा लिखा गया था। | |||
== सिंहावलोकन == | == सिंहावलोकन == | ||
निम्नलिखित उदाहरणों में कोड को पार्स करने के लिए इंडेंटेशन और फॉर्मेटिंग महत्वपूर्ण हैं: एक्सप्रेशन लाइन के अंत तक समाप्त हो जाते हैं, | निम्नलिखित उदाहरणों में कोड को पार्स करने के लिए इंडेंटेशन और फॉर्मेटिंग महत्वपूर्ण हैं: एक्सप्रेशन लाइन (व्यंजक पंक्ति) के अंत तक समाप्त हो जाते हैं, इंडेंटेशन (अभिस्थापन) के समान स्तर पर एक्सप्रेशन (व्यंजक) की सूचियों की आवश्यकता होती है। ऑफ़-साइड नियम नाम की यह विशेषता, अन्य भाषाओं जैसे [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] और [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] में भी पाई जाती है। | ||
प्रक्रियाओं के बीच संचार | प्रक्रियाओं के बीच संचार नामांकित चैनलों के माध्यम से कार्य करता है। एक प्रक्रिया के माध्यम से एक चैनल को डेटा <code>!</code> आउटपुट करता है जबकि दूसरा डेटा <code>?</code> के साथ इनपुट करता है। इनपुट और आउटपुट तब तक आगे नहीं बढ़ सकते जब तक कि दूसरा छोर डेटा को स्वीकार करने या पेश करने के लिए तैयार नहीं होता। (कार्यवाही न करने के मामले में अक्सर यह कहा जाता है कि प्रक्रिया चैनल पर ब्लॉक हो जाती है। हालाँकि, कार्यक्रम न तो स्पिन करेगा और न ही मतदान; इस प्रकार प्रतीक्षा, रुकना या उपज जैसे शब्द भी व्यवहार को व्यक्त कर सकते हैं; साथ ही इस संदर्भ में कि यह अन्य स्वतंत्र प्रक्रियाओं को चलने से नहीं रोकेगा।) उदाहरण (c एक वेरिएबल है): | ||
keyboard ? c | |||
screen ! c | |||
<code>SEQ</code> | <code>SEQ</code> व्यंजक की एक सूची प्रस्तुत करता है जिसका मूल्यांकन क्रमिक रूप से किया जाता है। यह अंतर्निहित नहीं है क्योंकि यह अन्य प्रोग्रामिंग भाषाओं में है। उदाहरण : | ||
SEQ | |||
x := x + 1 | |||
y := x * x | |||
<code>PAR</code> | <code>PAR</code> उन व्यंजकों की सूची प्रारंभ करता है जिनका समवर्ती रूप से मूल्यांकन किया जा सकता है। उदाहरण: | ||
PAR | |||
p() | |||
q() | |||
<code>ALT</code> गार्ड | <code>ALT</code> गार्ड कमांड की एक सूची निर्दिष्ट करता है। वह गार्ड एक बूलियन स्थिति और एक इनपुट व्यंजक का संयोजन है, दोनों वैकल्पिक। प्रत्येक गार्ड जिसके लिए शर्त सत्य है और इनपुट चैनल तैयार है, सफल है। निष्पादन के लिए सफल विकल्पों में से एक का चयन किया जाता है। उदाहरण: | ||
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 (जो भी तैयार हो) से डेटा पढ़ेगा और इसे मर्ज किए गए चैनल में | यह चैनल c1 या c2 (जो भी तैयार हो) से डेटा पढ़ेगा और इसे एक मर्ज किए गए चैनल में पास करेगा। अगर काउंटN 100 तक पहुंचता है, तो संबंधित चैनल से पढ़ना बंद कर दिया जाएगा। स्टेटस चैनल पर एक अनुरोध का उत्तर काउंट <code>out</code>को आउटपुट करके दिया जाता है। | ||
== भाषा संशोधन == | == भाषा संशोधन == |
Revision as of 08:07, 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 IS y)
- नामित रिकॉर्ड
- पैक्ड रिकॉर्ड
- कुछ प्रकार के रूपांतरण नियमों में छूट
- नए ऑपरेटर (जैसे बाइटेसिन)
- चैनल रीटाइपिंग और चैनल सरणी
- फ़ंक्शन से निश्चित-लंबाई सरणी वापस करने की क्षमता।
परिवर्तनों की पूरी सूची के लिए Inmos occam 2.1 संदर्भ मैनुअल का परिशिष्ट P देखें।
ओकम-π
ओकम-π[6] केंट रिटारगेटेबल ओकम कंपाइलर (केआरओसी) के बाद के संस्करणों द्वारा लागू किए गए ओकैम संस्करण के लिए सामान्य नाम है। ओकैम नाम में पाई (अक्षर)|π (पी) प्रतीक को जोड़ना KRoC ओकैम के लिए एक भ्रम है जिसमें π-कैलकुलस से प्रेरित कई विचार शामिल हैं। इसमें ओकैम 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.