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

ओकैम एक प्रोग्रामिंग भाषा है जो समवर्ती है और कम्युनिकेटिंग सीक्वेंशियल प्रोसेस (संचार अनुक्रमिक प्रक्रियाओं ) (सीएसपी) प्रक्रिया बीजगणित पर निर्मित है, और इसकी कई विशेषताएं साझा करती हैं। इसका नाम ओखम के दार्शनिक विलियम के नाम पर रखा गया है, जिनके नाम पर ओकाम के रेज़र का नाम रखा गया है।

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

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

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

keyboard ? c

screen ! c

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

SEQ x := x + 1 y := x * x

उन व्यंजकों की सूची प्रारंभ करता है जिनका समवर्ती रूप से मूल्यांकन किया जा सकता है। उदाहरण:

PAR p q

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

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 तक पहुंचता है, तो संबंधित चैनल से पढ़ना बंद कर दिया जाएगा। स्टेटस चैनल पर एक अनुरोध का उत्तर काउंट को आउटपुट करके दिया जाता है।

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

ओकैम 2
ओकैम 2 1987 में इनमोस लिमिटेड द्वारा निर्मित एक विस्तार है जो फ्लोटिंग-पॉइंट सपोर्ट, फ़ंक्शंस, मल्टी-डायमेंशनल एरेज़ और अधिक डेटा प्रकार जैसे कि पूर्णांकों के अलग-अलग आकार (INT16, INT32) और बाइट्स जोड़ता है।

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

ओकैम 2.1
ओकैम 2.1 इनमोस द्वारा योगदान किए गए ओकैम भाषा विकास की श्रृंखला का अंतिम था। 1994 में परिभाषित, यह 1990 के दशक की शुरुआत में इनमोस में ज्योफ बैरेट द्वारा बनाई गई ओकैम 3 भाषा (इसके प्रारंभिक विकास के दौरान "ओकैम91" के रूप में भी जाना जाता है) के लिए पहले के प्रस्ताव से प्रभावित था। ओकैम 3 का वर्णन करने वाला एक संशोधित संदर्भ मैनुअल सामुदायिक टिप्पणी के लिए वितरित किया गया था, लेकिन कंपाइलर में भाषा को कभी भी पूरी तरह से लागू नहीं किया गया था।

ओकैम 2.1 ने ऑकैम 2 के लिए कई नई सुविधाएँ प्रस्तुत कीं, जिनमें सम्मिलित हैं:
 * नामित डेटा प्रकार (डेटा प्रकार x y है)
 * नामित रिकॉर्ड
 * पैक्ड रिकॉर्ड
 * कुछ प्रकार के रूपांतरण नियमों में छूट
 * नए ऑपरेटर (जैसे बाइटेसिन)
 * चैनल रीटाइपिंग और चैनल सरणी
 * फ़ंक्शन से निश्चित-लंबाई सरणी वापस करने की क्षमता।

परिवर्तनों की पूरी सूची के लिए इनमोस ओकैम 2.1 संदर्भ मैनुअल का परिशिष्ट P देखें।

ओकैम-π
ओकैम-π केंट रिटारगेटेबल ओकैम कंपाइलर (केआरओसी) के बाद के संस्करणों द्वारा लागू किए गए ओकैम वेरिएंट के लिए सामान्य नाम है। ओकैम नाम में प्रतीक π को जोड़ना केआरओसी ओकैम के लिए एक भ्रम है जिसमें π-कैलकुलस से प्रेरित कई विचार सम्मिलित हैं। इसमें ओकैम 2.1 कंपाइलर के कई महत्वपूर्ण विस्तार सम्मिलित हैं, उदाहरण के लिए:
 * नेस्टिंग (कंप्यूटिंग) प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
 * रन-टाइम प्रोसेस क्रिएशन
 * मोबाइल चैनल, डेटा और प्रक्रियाएं
 * रिकर्सन
 * प्प्रोटोकॉल इनहेरिटेन्स
 * ऐरे कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
 * विस्तारित बैरियर (कंप्यूटर विज्ञान)

यह भी देखें

 * XC प्रोग्रामिंग लैंग्वेज, जो occam पर आधारित है लेकिन C-स्टाइल सिंटैक्स के साथ है।
 * समवर्ती कंप्यूटिंग # समवर्ती प्रोग्रामिंग का समर्थन करने वाली भाषाएँ
 * समवर्ती और समानांतर प्रोग्रामिंग भाषाओं की सूची

अग्रिम पठन

 * 
 * 
 * 
 * Egorov, A., Technical University – Sofia, (1983-2011) Записки по Компютърни архитектури
 * Egorov, A., Technical University – Sofia, (1983-2011) Записки по Компютърни архитектури
 * 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.