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

ओज़ एक बहु-प्रतिमान प्रोग्रामिंग भाषा है, जिसे प्रोग्रामिंग भाषा शिक्षा के लिए यूनिवर्सिटी कैथोलिक डी लौवेन में प्रोग्रामिंग सिस्टम्स लैब में विकसित किया गया है। इसकी एक विहित पाठ्यपुस्तक है: कंप्यूटर प्रोग्रामिंग की अवधारणाएं, तकनीकें और मॉडल।

ओज को पहली बार 1991 में गर्ट स्मोल्का और उनके छात्रों द्वारा डिजाइन किया गया था। 1996 में, ओज का विकास कंप्यूटर विज्ञान के स्वीडिश संस्थान में सेफ हरीदी और पीटर वान रॉय के शोध समूह के सहयोग से जारी रहा। 1999 के बाद से, ओज़ को एक अंतरराष्ट्रीय समूह, मोजार्ट कंसोर्टियम द्वारा लगातार विकसित किया गया है, जिसमें मूल रूप से सारलैंड विश्वविद्यालय, स्वीडिश इंस्टीट्यूट ऑफ कंप्यूटर साइंस और यूनिवर्सिटी कैथोलिक डे लौवेन शामिल हैं। 2005 में, मोजार्ट विकास के प्रबंधन की जिम्मेदारी मोजार्ट विकास को एक बड़े समुदाय के लिए खोलने के स्पष्ट उद्देश्य के साथ एक कोर ग्रुप, मोजार्ट बोर्ड को हस्तांतरित कर दी गई थी।

मोजार्ट प्रोग्रामिंग सिस्टम ओज का प्राथमिक कार्यान्वयन है। यह मोजार्ट कंसोर्टियम द्वारा ओपन सोर्स लाइसेंस के साथ जारी किया गया है। Mozart को Unix, FreeBSD, Linux, Microsoft Windows, और macOS में पोर्ट किया गया है।

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

डेटा संरचना
ओज़ एक मूल भाषा पर आधारित है जिसमें बहुत कम डेटाटाइप हैं जिन्हें सिंटैक्टिक चीनी के माध्यम से अधिक व्यावहारिक लोगों में बढ़ाया जा सकता है।

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

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

उच्च क्रम प्रोग्रामिंग
कार्य अन्य ओज वस्तुओं की तरह हैं। एक फ़ंक्शन को अन्य फ़ंक्शंस की विशेषता के रूप में पारित किया जा सकता है या किसी फ़ंक्शन में वापस किया जा सकता है।

अनाम कार्य
कई अन्य कार्यात्मक भाषाओं की तरह, ओज़ उच्च क्रम प्रोग्रामिंग के साथ अनाम कार्यों (अर्थात् ऐसे कार्य जिनका कोई नाम नहीं है) के उपयोग का समर्थन करता है। इन्हें दर्शाने के लिए प्रतीक $ का उपयोग किया जाता है।

निम्नलिखित में, स्क्वायर फ़ंक्शन को अज्ञात रूप से परिभाषित किया गया है और पारित किया गया है, जिसके कारण  ब्राउज किया जाना है। चूंकि अनाम कार्यों के नाम नहीं होते हैं, इसलिए पुनरावर्ती अनाम कार्यों को परिभाषित करना संभव नहीं है।

प्रक्रियाएं
ओज़ में फ़ंक्शंस को निष्पादन के दौरान फ़ंक्शन के शरीर में आने वाले अंतिम कथन पर एक मान वापस करना चाहिए। नीचे दिए गए उदाहरण में, फ़ंक्शन Ret 5 देता है यदि X > 0 और -5 अन्यथा। लेकिन ओज़ एक सुविधा भी प्रदान करता है जब कोई फ़ंक्शन मान वापस नहीं करता है। ऐसे कार्यों को प्रक्रियाएं कहा जाता है। निम्नानुसार निर्माण प्रक्रिया का उपयोग करके प्रक्रियाओं को परिभाषित किया गया है उपरोक्त उदाहरण कोई मान नहीं लौटाता है, यह केवल X के चिह्न के आधार पर Oz ब्राउज़र में 5 या -5 प्रिंट करता है।

डेटा प्रवाह चर और घोषणात्मक संगामिति
जब प्रोग्राम एक अनबाउंड वेरिएबल का सामना करता है तो यह एक मान की प्रतीक्षा करता है। उदाहरण के लिए, नीचे, थ्रेड तब तक प्रतीक्षा करेगा जब तक कि Z का मान दिखाने से पहले X और Y दोनों एक मान से बंधे न हों। एक बार बाउंड होने के बाद डेटाफ़्लो वैरिएबल का मान बदला नहीं जा सकता: डेटा प्रवाह चर समवर्ती स्ट्रीम एजेंट बनाना आसान बनाते हैं:

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

उदाहरण: परीक्षण प्रभाग छलनी
यह उदाहरण गैर-अभाज्य संख्याओं को फ़िल्टर करने वाले समवर्ती धारा एजेंटों को पुनरावर्ती रूप से बनाकर ट्रायल डिवीजन एल्गोरिथ्म का उपयोग करके अभाज्य संख्याओं की एक धारा की गणना करता है:

आलस्य
ओज़ डिफ़ॉल्ट रूप से उत्सुक मूल्यांकन का उपयोग करता है, लेकिन आलसी मूल्यांकन संभव है। नीचे, तथ्य की गणना तभी की जाती है जब Y के मान की गणना करने के लिए X के मान की आवश्यकता होती है। आलसी मूल्यांकन ओज़ में वास्तव में अनंत डेटा संरचनाओं को संग्रहित करने की संभावना देता है। निम्नलिखित कोड नमूने से आलसी मूल्यांकन की शक्ति देखी जा सकती है: उपरोक्त कोड सुंदर ढंग से सभी नियमित संख्याओं की गणना करता है अनंत सूची में। वास्तविक संख्याओं की गणना तभी की जाती है जब उनकी आवश्यकता होती है।

संदेश देना समवर्ती
घोषणात्मक समवर्ती मॉडल को सरल शब्दार्थ से गुजरने वाले संदेश के साथ बढ़ाया जा सकता है: पोर्ट और थ्रेड के साथ, एसिंक्रोनस एजेंटों को परिभाषित किया जा सकता है:

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

निष्पादन की गति
मोजार्ट कंपाइलर (संस्करण 1.4.0 ओज 3 को लागू करने) द्वारा निर्मित एक कार्यक्रम की निष्पादन गति बहुत धीमी है। कंप्यूटर भाषा बेंचमार्क गेम के 2012 के सेट पर यह C भाषा के लिए जीएनयू संकलक संग्रह (GCC) की तुलना में लगभग 50 गुना धीमा था।

यह भी देखें

 * ऐलिस (प्रोग्रामिंग भाषा), सारलैंड विश्वविद्यालय से एक समवर्ती कार्यात्मक बाधा भाषा
 * डेटाफ्लो प्रोग्रामिंग
 * : श्रेणी: कार्यात्मक तर्क प्रोग्रामिंग भाषाएं
 * करी (प्रोग्रामिंग भाषा)
 * बुध (प्रोग्रामिंग भाषा)
 * विजुअल प्रोलॉग, एक वस्तु-उन्मुख, कार्यात्मक, तर्क भाषा

संदर्भ

 * Peter Van Roy and Seif Haridi (2004). Concepts, Techniques, and Models of Computer Programming.  MIT Press.  There is online supporting material for this book.  The book, an introduction to the principles of programming languages, uses Oz as its preferred idiom for examples.

बाहरी संबंध

 * Tutorial of Oz
 * Programming Language Research at UCL: One of the core developers of Mozart/Oz, this group does research using Mozart/Oz as the vehicle
 * Multiparadigm Programming in Mozart/Oz: Proceedings of MOZ 2004: Conference which gives a snapshot of the work being done with Mozart/Oz
 * Programming in Oz
 * Oz Basics
 * Oz Basics