रीबोल

रीबोल (/ˈrɛbəl/ REB-əl; ऐतिहासिक रूप से रीबोल) एक क्रॉस-प्लेटफ़ॉर्म डेटा एक्सचेंज लैंग्वेज और नेटवर्क संचार और वितरित कंप्यूटिंग के लिए कार्ल सैसेनराथ द्वारा डिज़ाइन की गई एक बहु-प्रतिमान गतिशील प्रोग्रामिंग लैंग्वेज है। यह द्वंद्वात्मकता की अवधारणा का परिचय देता है: कोड और डेटा के लिए छोटी, अनुकूलित, डोमेन-विशिष्ट लैंग्वेजएं, जो कि इसके डिजाइनर कार्ल सैसेनराथ के अनुसार लैंग्वेज की सबसे उल्लेखनीय संपत्ति भी है:

"Although it can be used for programming, writing functions, and performing processes, its greatest strength is the ability to easily create domain-specific languages or dialects

हालाँकि इसका उपयोग प्रोग्रामिंग, लेखन कार्यों और प्रक्रियाओं को निष्पादित करने के लिए किया जा सकता है, इसकी सबसे बड़ी ताकत डोमेन-विशिष्ट लैंगुएजेस या उपभाषा को आसानी से बनाने की क्षमता है।"

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

मूल रूप से, लैंग्वेज और इसका आधिकारिक कार्यान्वयन स्वामित्व सॉफ्टवेयर और क्लोज्ड सोर्स था, जिसे रीबोल टेक्नोलॉजी द्वारा विकसित किया गया था। लॉरेंस रोसेन के साथ चर्चा के बाद, रीबोल संस्करण 3 सबलैंग्वेज अपाचे 2.0 लाइसेंस के तहत 12 दिसंबर 2012 को जारी किया गया था। पुराने संस्करण केवल बाइनरी रूप में उपलब्ध हैं, और उनके लिए कोई सोर्स रिलीज़ की योजना नहीं है।

रीबोल का उपयोग इंटरनेट अनुप्रयोग प्रक्रिया सामग्री (क्लाइंट- और सर्वर-साइड दोनों), डेटाबेस अनुप्रयोगों, उपयोगिता सॉफ्टवेयर और मल्टीमीडिया अनुप्रयोगों को प्रोग्राम करने के लिए किया गया है।

व्युत्पत्ति
रीबोल प्रारंभ में सभी बड़े अक्षरों में लिखी गई रिलेटिव एक्सप्रेशन बेस्ड ऑब्जेक्ट लैंग्वेज का संक्षिप्त रूप था। प्रस्तुत लैंग्वेज नामकरण में आधुनिक प्रवृत्तियों के साथ तालमेल बिठाना, उदाहरणार्थ ऐतिहासिक नाम लिस्प (LISP) को लिस्प से बदलने के कारण, प्रोग्रामर्स ने सभी बड़े अक्षरों में रीबोल (रीबोल) लिखने की प्रथा क्लोज्ड कर दी। सैसेनराथ ने अंततः अपने ब्लॉग पर सामुदायिक बहस में नामकरण का प्रश्न रखा। बाद के लेखन में, ससेनराथ ने लैंग्वेज का नाम रेबोल लिखने की परंपरा को अपनाया था।

इतिहास
पहली बार 1997 में रिलीज़ किया गया, रेबोल को एमिगाओएस के वास्तुकार और प्राथमिक डेवलपर कार्ल ससेनराथ द्वारा 20 साल की अवधि में डिजाइन किया गया था, जो उनके सांकेतिक सीमेन्टिकी के अध्ययन और प्रोग्रामिंग लैंग्वेज लिस्प (प्रोग्रामिंग लैंग्वेज), फोर्थ (प्रोग्रामिंग लैंग्वेज), लोगो (प्रोग्रामिंग लैंग्वेज), और सेल्फ (प्रोग्रामिंग लैंग्वेज) से अवधारणाओं का उपयोग करने पर आधारित था।


 * 1) रीबोल टेक्नोलॉजीज की स्थापना 1998 में हुई थी।
 * 2) रीबोल 2, सबलैंग्वेज, जो विस्तारित सबलैंग्वेज संस्करणों का मूल बन गया, पहली बार 1999 में जारी किया गया था।
 * 3) रीबोल/कमांड (REBOL/Command), जिसने मजबूत एन्क्रिप्शन और डेटाबेस कनेक्टिविटी खोलें एक्सेस जोड़ा, सितंबर 2000 में जारी किया गया था
 * 4) रीबोल/व्यू (REBOL/View) को अप्रैल 2001 में रिलीज़ किया गया था, जिसमें मुख्य लैंग्वेज पर ग्राफ़िकल क्षमताएँ जोड़ी गई थीं।
 * 5) रीबोल/आईओएस (REBOL/IOS), रीबोल के साथ निर्मित एक विस्तार योग्य सहयोग वातावरण अगस्त 2001 में जारी किया गया था।
 * 6) रीबोल/एस डी के (REBOL/SDK), बाइंडिंग के लिए कर्नेल का विकल्प और साथ ही एक प्रीप्रोसेसर प्रदान करता है, जिसे दिसंबर 2002 में जारी किया गया था।
 * 7) रीबोल 3 [R3], सबलैंग्वेज (कंप्यूटिंग) का नवीनतम संस्करण, के अल्फा संस्करण जनवरी 2008 से आरईबीओएल टेक्नोलॉजीज द्वारा जारी किए गए थे। दिसंबर 2012 में अपाचे 2 प्रोजेक्ट के रूप में रिलीज होने के बाद से, इसे रीबोल समुदाय द्वारा विकसित किया जा रहा है।

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

R3-GUI में एक समान उदाहरण इस प्रकार दिखता है:



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

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

ग्राफिकल क्षमताओं वाले एक रिबोल सबलैंग्वेज को कई सबलैंग्वेज को समझना और व्याख्या करना होगा। नीचे दी गई तालिका महत्व के क्रम में सबसे महत्वपूर्ण सूचीबद्ध करती है।

सिंटेक्स
रीबोल सिंटैक्स फ्री-फॉर्म है, जिसके लिए विशिष्ट स्थिति की आवश्यकता नहीं होती है। हालाँकि, इंडेंटेशन का उपयोग प्रायः पाठ की संरचना को मानव पाठकों तक बेहतर ढंग से पहुंचाने के लिए किया जाता है।

विभिन्न सबलैंग्वेज के वाक्यात्मक गुण भिन्न हो सकते हैं। सभी रेबोल सबलैंग्वेज के लिए सामान्य मंच डेटा विनिमय सबलैंग्वेज है; अन्य सबलैंग्वेज साधारणतया इससे ली गई हैं। सभी सबलैंग्वेज के लिए सामान्य मंच होने के अलावा, डेटा एक्सचेंज सबलैंग्वेज का उपयोग सीधे डेटा और मेटाडेटा का प्रतिनिधित्व करने, डेटा संरचनाओं को भरने, इंटरनेट पर डेटा भेजने और उन्हें डेटा स्टोरेज में सहेजने के लिए किया जाता है।

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

ब्लॉक के साथ-साथ पैरेन में अन्य मिश्रित मान भी हो सकते हैं (एक ब्लॉक में सबब्लॉक, पैरेन, स्ट्रिंग्स, ...) या स्केलर मान जैसे शब्द, सेट-वर्ड (कोलन द्वारा प्रत्यय वाले शब्द), गेट-वर्ड (उपसर्ग द्वारा लगाए गए शब्द) हो सकते हैं। बृहदान्त्र), शाब्दिक शब्द (एपोस्ट्रोफ द्वारा उपसर्ग किए गए शब्द), संख्याएं, धन, वर्ण, आदि, रिक्त स्थान द्वारा अलग किए गए। शब्दों में विशेष वर्णों की अनुमति है, इसलिए a+b एक शब्द है जो a + b से भिन्न है, जो रिक्त स्थान से अलग किए गए तीन शब्दों का एक क्रम है।

टिप्पणियाँ अर्धविराम के बाद पंक्ति के अंत तक दिखाई दे सकती हैं। बहु-पंक्ति टिप्पणियाँ या टिप्पणियाँ जिन्हें लेक्सिकल पार्सर द्वारा अनदेखा नहीं किया जाता है, उन्हें बहु-पंक्ति स्ट्रिंग जैसे "सामान्य" डेटाटाइप का उपयोग करके लिखा जा सकता है।

सीमेन्टिकी
डोमेन-विशिष्ट लैंग्वेज वाले ब्लॉक को विशिष्ट मूल्यांकनकर्ता functionों के लिए तर्क (कंप्यूटर विज्ञान) के रूप में प्रस्तुत किया जा सकता है।

डू
सबसे अधिक उपयोग किया जाने वाला मूल्यांकनकर्ता copy function है। इसका उपयोग डिफ़ॉल्ट रूप से इंटरप्रेटर कंसोल में टेक्स्ट इनपुट की व्याख्या करने के लिए किया जाता है।

दो सबलैंग्वेज द्वारा व्याख्या की गई copy function, एक एक्सप्रेशन-उन्मुख प्रोग्रामिंग लैंग्वेज है|डेटा विनिमय सबलैंग्वेज की एक्सप्रेशन-उन्मुख सबलैंग्वेज है। लैंग्वेज की मुख्य सीमेन्टिकी इकाई एक्सप्रेशन (प्रोग्रामिंग) है। ALGOL से आने वाली अनिवार्य प्रोग्रामिंग लैंग्वेज के विपरीत, do सबलैंग्वेज में न तो कीवर्ड होते हैं, न ही स्टेटमेंट्स है।

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

रूट ब्लॉक के सबब्लॉक स्वयं का मूल्यांकन करते हैं। इस संपत्ति का उपयोग डेटा ब्लॉक को संभालने के लिए, प्रवाह functionों को नियंत्रित करने के लिए तर्क के रूप में ब्लॉक सबमिट करके संरचित प्रोग्रामिंग के लिए किया जाता है,  ,  , आदि, और सबलैंग्वेज लगाने के लिए, जब एक ब्लॉक को एक विशिष्ट सबलैंग्वेज फ़ंक्शन में पास किया जाता है।

ध्यान देने योग्य एक विशिष्ट समस्या यह है कि चरों को निर्दिष्ट समग्र मानों की प्रतिलिपि नहीं बनाई जाती है। प्रतिलिपि बनाने के लिए, मान को पास करना   function होगा।

e> function साधारणतया एक पोलिश संकेतन का अनुसरण करता है, जहां एक फ़ंक्शन उन तर्कों को संसाधित करता है जो उसका अनुसरण करते हैं। हालाँकि, इन्फ़िक्स ऑपरेटर (प्रोग्रामिंग) का उपयोग करते हुए इन्फिक्स संकेतन भी उपस्थित है। इन्फिक्स मूल्यांकन को उपसर्ग मूल्यांकन पर प्राथमिकता दी जाती है। उदाहरण के लिए, abs -2 + 3 1 पुनः वापस आता है, क्योंकि इन्फ़िक्स जोड़ को निरपेक्ष मान की गणना पर प्राथमिकता दी जाती है। इन्फिक्स एक्सप्रेशनयों का मूल्यांकन करते समय, मूल्यांकन का क्रम बाएं से दाएं होता है, कोई भी ऑपरेटर दूसरे के ऊपर संचालन का क्रम नहीं लेता है। उदाहरण के लिए, रिटर्न 20, जबकि गुणन को प्राथमिकता देने वाले मूल्यांकन से 14 प्राप्त होगा। सभी ऑपरेटरों के पास उपसर्ग संस्करण होते हैं।  साधारणतया तर्कों को किसी फ़ंक्शन में पास करने से पहले उनका मूल्यांकन करता है। तो, नीचे दी गई एक्सप्रेशन:  http://en.wikipedia.org/wiki/रीबोल पढ़ें प्रिंट करें पहले विकिपीडिया रीबोल पृष्ठ को पढ़ता है और फिर परिणाम को  function में भेजता है। मूल्यांकन के क्रम को बदलने के लिए कोष्ठक का उपयोग किया जा सकता है। उपसर्ग संकेतन का उपयोग करके, अभिव्यक्तियों में कोष्ठक के उपयोग से बचा जा सकता है।

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

पार्स
e> function का उपयोग अधिमानतः सबलैंग्वेज को निर्दिष्ट करने, सत्यापित करने, बदलने और व्याख्या करने के लिए किया जाता है। यह रन टाइम पर पार्स एक्सप्रेशन का मिलान करके ऐसा करता है।

पार्स फ़ंक्शन का उपयोग अधिमानतः सबलैंग्वेज को निर्दिष्ट करने, मान्य करने, रूपांतरित करने और व्याख्या करने के लिए किया जाता है। यह रन टाइम पर पार्स अभिव्यक्तियों का मिलान करके ऐसा करता है।

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

पार्सिंग प्रक्रिया के दौरान की जाने वाली कार्रवाइयों को भी सम्मिलित किया जा सकता है और  function का उपयोग ब्लॉक या स्ट्रिंग्स को संसाधित करने के लिए किया जा सकता है। स्ट्रिंग पार्सिंग स्तर पर   को वर्णों और सीमांककों को ध्यान में रखते हुए "निम्न स्तर" पार्सिंग को संभालना होगा। ब्लॉक पार्सिंग उच्च स्तर की है, रीबोल मानों के स्तर पर स्कैनिंग को संभालती  है।

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

कार्यान्वयन
आधिकारिक रीबोल 2.7.8 functionान्वयन कई संस्करणों (/Core, /View, /Command, /SDK and /IOS) में उपलब्ध है। /कोर और /व्यू दोनों संस्करण स्वतंत्र रूप से पुनर्वितरण योग्य सॉफ़्टवेयर हैं।

रनटाइम वातावरण को एकल निष्पादन योग्य फ़ाइल में संग्रहीत किया जाता है। रीबोल/Core 2.7.8, कंसोल संस्करण, लगभग 300 KB का है और रीबोल/व्यू 2.7.8, ग्राफिकल यूज़र इंटरफ़ेस संस्करण, लगभग 650 KB आकार का है।

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

लिगेसी (विरासत)

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

यह भी देखें

 * डोमेन-विशिष्ट लैंग्वेज
 * लैंग्वेज-उन्मुख प्रोग्रामिंग

बाहरी संबंध

 * A रीबोल tutorial
 * रीबोल 3 Tutorial
 * रीबोल 3 (Oldes' fork) sources
 * रीबोल 3 (Oldes' fork) sources