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

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

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

मोज़ार्ट प्रोग्रामिंग सिस्टम ओज़ का प्राथमिक कार्यान्वयन है। इसे मोजार्ट कंसोर्टियम द्वारा एक ओपन सोर्स लाइसेंस के साथ जारी किया गया है। मोजार्ट को यूनिक्स, फ्रीबीएसडी, लिनक्स, विंडोज और मैकओएस पर पोर्ट किया गया है।

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

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

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

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

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

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

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

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

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

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

जिस तरह से डेटाफ्लो वैरिएबल काम करते हैं, उसके कारण प्रोग्राम में कहीं भी थ्रेड्स डालना संभव है और गारंटी है कि इसका परिणाम समान होगा। इससे समवर्ती प्रोग्रामिंग बहुत आसान हो जाती है। थ्रेड्स बहुत सस्ते होते हैं: एक साथ 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