जॉयस (प्रोग्रामिंग भाषा)

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

भाषा एजेंटों की अवधारणा पर आधारित होती है। इस प्रकार समवर्ती रूप से निष्पादित प्रक्रियाएं जो केवल चैनलों और संदेश पासिंग के उपयोग से संवाद करती हैं। एजेंट उप-एजेंट को गतिशील रूप से और पुनरावर्ती (कंप्यूटर विज्ञान) रूप से सक्रिय कर सकते हैं। अतः जॉयस के विकास ने सुपरपास्कल भाषा की नींव रखी गयी थी, जिसे सन्न 1993 के आसपास हैनसेन द्वारा भी विकसित किया गया था।

विशेषताएं
जॉयस पास्कल के छोटे उपसमुच्चय पर आधारित होती है, जिसे संगामिति के लिए सीएसपी से प्रेरित सुविधाओं के साथ विस्तारित किया गया है। निम्नलिखित खंड कुछ और नई विशेषताओं का वर्णन करते हैं जिन्हें प्रस्तुत किया गया था।

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

एजेंट प्रक्रिया 1 (एक्स, वाई: पूर्णांक);

प्रारंभ ... अंत;

एजेंट प्रक्रिया 2 ;

प्रक्रिया 1 का प्रयोग करें;

प्रारंभ प्रक्रिया 1 (9, 17); अंत;

एजेंट की सक्रियता सभी स्थानीय चर के नए उदाहरण बनाती है और प्रत्येक औपचारिक पैरामीटर का मान स्थानीय चर में कॉपी किया जाता है। इसलिए, एजेंट अन्य एजेंटों के चर (कंप्यूटर विज्ञान) तक नहीं पहुंच सकते हैं और उन्हें केवल चैनलों के उपयोग के माध्यम से संवाद करने की अनुमति होती है। यह प्रतिबंध दौड़ की स्थिति जैसे साझा चर के उपयोग से जुड़ी समस्याओं को रोकता है।

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

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

सुरक्षा
जॉयस को इस अर्थ में सुरक्षित भाषा के रूप में डिजाइन किया गया था कि संकलक भाषा के नियमों के सभी उल्लंघनों का पता लगाने में सक्षम होगा।

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

एजेंट छलनी (इनप, आउट: स्ट्रीम);

वर अधिक: बूलियन; एक्स, वाई: पूर्णांक; सफलता: धारा; प्रारंभ मतदान inp?int(x) -> +succ; चलनी (सक्सेस, आउट); अधिक�:= सत्य | inp?eos -> out!eos; अधिक�:= असत्य अंत; जबकि अधिक करते हैं मतदान inp? int(y) -> यदि y mod x <> 0 तो succ!int(y) | inp?eos -> out!int(x); सफलता; अधिक�:= असत्य अंत; अंत;

निम्नलिखित एजेंट छलनी एजेंटों के समूह को इनिशियलाइज़ करता है और उनमें 3 और 9999 के मध्य पूर्णांकों की धारा डालता है।

एजेंट प्राइम्स;

जनरेट, चलनी, प्रिंट का उपयोग करें;

वर ए, बी: धारा;

प्रारंभ + ए; + बी; उत्पन्न (ए, 3, 2, 4999); चलनी (ए, बी); प्रिंट (बी) अंत;

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

बाहरी संबंध
, Brinch Hansen Archive, a set of his papers