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

From Vigyanwiki
(Created page with "{{Short description|None}} {{multiple issues| {{notability|date=June 2018}} {{primary sources|date=June 2018}} }} {{Infobox programming language |name = Joyce |logo = |paradig...")
 
No edit summary
Line 1: Line 1:
{{Short description|None}}
 
{{multiple issues|
{{notability|date=June 2018}}
{{primary sources|date=June 2018}}
}}
{{Infobox programming language
{{Infobox programming language
|name = Joyce
|name = Joyce
Line 21: Line 17:
}}
}}


जॉइस 1980 के दशक में [[प्रति ब्रिन्च हैनसेन]] द्वारा डिज़ाइन की गई [[समवर्ती कंप्यूटिंग]] के लिए एक सुरक्षित [[प्रोग्रामिंग भाषा]] है।<ref name="Hansen1987">{{Cite book |last=Hansen |first=Brinch |editor1-first=Per Brinch |editor1-last=Hansen |author-link=Per Brinch Hansen |chapter=Joyce: A programming language for distributed systems |title=The Origin of Concurrent Programming: From Semaphores to Remote Procedure Calls |year=2002 |pages=464–492 |publisher=Springer |location=New York, New York |isbn=978-1-4419-2986-0 |doi=10.1007/978-1-4757-3472-0|s2cid=44909506 }}</ref> यह अनुक्रमिक भाषा [[पास्कल (प्रोग्रामिंग भाषा)]] और अनुक्रमिक प्रक्रियाओं (सीएसपी) को संप्रेषित करने के सिद्धांतों पर आधारित है। इसे एक प्रोग्रामिंग भाषा के रूप में लागू करने के लिए CSP की कमियों को दूर करने के लिए, और मुख्य रूप से शिक्षण के लिए, वितरित कंप्यूटिंग सिस्टम कार्यान्वयन के लिए एक उपकरण प्रदान करने के लिए बनाया गया था।
जॉइस 1980 के दशक में [[प्रति ब्रिन्च हैनसेन]] द्वारा डिज़ाइन की गई [[समवर्ती कंप्यूटिंग]] के लिए सुरक्षित [[प्रोग्रामिंग भाषा]] है।<ref name="Hansen1987">{{Cite book |last=Hansen |first=Brinch |editor1-first=Per Brinch |editor1-last=Hansen |author-link=Per Brinch Hansen |chapter=Joyce: A programming language for distributed systems |title=The Origin of Concurrent Programming: From Semaphores to Remote Procedure Calls |year=2002 |pages=464–492 |publisher=Springer |location=New York, New York |isbn=978-1-4419-2986-0 |doi=10.1007/978-1-4757-3472-0|s2cid=44909506 }}</ref> यह अनुक्रमिक भाषा [[पास्कल (प्रोग्रामिंग भाषा)]] और अनुक्रमिक प्रक्रियाओं (सीएसपी) को संप्रेषित करने के सिद्धांतों पर आधारित है। इसे प्रोग्रामिंग भाषा के रूप में लागू करने के लिए CSP की कमियों को दूर करने के लिए, और मुख्य रूप से शिक्षण के लिए, वितरित कंप्यूटिंग सिस्टम कार्यान्वयन के लिए उपकरण प्रदान करने के लिए बनाया गया था।


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


== विशेषताएं ==
== विशेषताएं ==
जॉयस पास्कल के एक छोटे उपसमुच्चय पर आधारित है, जिसे संगामिति के लिए सीएसपी से प्रेरित सुविधाओं के साथ विस्तारित किया गया है।<ref name="Hansen1989a">{{Cite journal |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |title=द जॉयस लैंग्वेज रिपोर्ट|journal=Software: Practice and Experience |publisher=John Wiley & Sons |volume=19 |issue=6 |date=June 1989 |pages=553–578 |doi=10.1002/spe.4380190606|s2cid=30474491 |url=https://surface.syr.edu/eecs_techreports/29 }}</ref> निम्नलिखित खंड कुछ और नई विशेषताओं का वर्णन करते हैं जिन्हें पेश किया गया था।
जॉयस पास्कल के छोटे उपसमुच्चय पर आधारित है, जिसे संगामिति के लिए सीएसपी से प्रेरित सुविधाओं के साथ विस्तारित किया गया है।<ref name="Hansen1989a">{{Cite journal |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |title=द जॉयस लैंग्वेज रिपोर्ट|journal=Software: Practice and Experience |publisher=John Wiley & Sons |volume=19 |issue=6 |date=June 1989 |pages=553–578 |doi=10.1002/spe.4380190606|s2cid=30474491 |url=https://surface.syr.edu/eecs_techreports/29 }}</ref> निम्नलिखित खंड कुछ और नई विशेषताओं का वर्णन करते हैं जिन्हें प्रस्तुत किया गया था।


===एजेंट ===
===एजेंट ===
एक एजेंट एक प्रक्रिया है जिसमें कथनों का एक सेट और संभवतः अन्य एजेंटों की नेस्टेड परिभाषाएँ शामिल हैं। एक एजेंट गतिशील रूप से उप-एजेंट सक्रिय कर सकता है जो उनके निर्माता के साथ समवर्ती रूप से निष्पादित होते हैं। एक एजेंट तभी समाप्त हो सकता है जब उसके सभी उप-एजेंट भी समाप्त हो गए हों। उदाहरण के लिए, एक एजेंट <code>process2</code> को सक्रिय करता है <code>process1</code>:
एजेंट प्रक्रिया है जिसमें कथनों का सेट और संभवतः अन्य एजेंटों की नेस्टेड परिभाषाएँ सम्मिलित हैं। एजेंट गतिशील रूप से उप-एजेंट सक्रिय कर सकता है जो उनके निर्माता के साथ समवर्ती रूप से निष्पादित होते हैं। एजेंट तभी समाप्त हो सकता है जब उसके सभी उप-एजेंट भी समाप्त हो गए हों। उदाहरण के लिए, एजेंट <code>process2</code> को सक्रिय करता है <code>process1</code>:
<वाक्यविन्यास लैंग = पास्कल लाइन हाइलाइट = 1,6>
<वाक्यविन्यास लैंग = पास्कल लाइन हाइलाइट = 1,6>
एजेंट प्रक्रिया 1 (एक्स, वाई: पूर्णांक);
एजेंट प्रक्रिया 1 (एक्स, वाई: पूर्णांक);
शुरू
प्रारंभ
    ...
  ...
अंत;
अंत;


एजेंट प्रक्रिया 2 ();
एजेंट प्रक्रिया 2 ();
प्रक्रिया 1 का प्रयोग करें;
प्रक्रिया 1 का प्रयोग करें;
शुरू
प्रारंभ
    प्रक्रिया 1 (9, 17);
  प्रक्रिया 1 (9, 17);
अंत;
अंत;
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


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


=== संचार ===
=== संचार ===
एजेंट चैनल नामक संस्थाओं के माध्यम से संवाद करते हैं। चैनलों में एक वर्णमाला होती है, जो प्रतीकों के सेट को परिभाषित करती है जो प्रसारित हो सकती है। चैनल गतिशील रूप से बनाए जाते हैं और पोर्ट चर के उपयोग के माध्यम से एक्सेस किए जाते हैं। एक पोर्ट प्रकार को इसकी वर्णमाला बनाने वाले प्रतीकों के एक अलग सेट द्वारा परिभाषित किया गया है। एकाधिक मानों वाले प्रतीकों को एक विशिष्ट प्रकार से परिभाषित किया जाता है। उदाहरण के लिए:
एजेंट चैनल नामक संस्थाओं के माध्यम से संवाद करते हैं। चैनलों में वर्णमाला होती है, जो प्रतीकों के सेट को परिभाषित करती है जो प्रसारित हो सकती है। चैनल गतिशील रूप से बनाए जाते हैं और पोर्ट चर के उपयोग के माध्यम से एक्सेस किए जाते हैं। पोर्ट प्रकार को इसकी वर्णमाला बनाने वाले प्रतीकों के अलग सेट द्वारा परिभाषित किया गया है। एकाधिक मानों वाले प्रतीकों को विशिष्ट प्रकार से परिभाषित किया जाता है। उदाहरण के लिए:
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
stream = [int(integer), eos];
stream = [int(integer), eos];
</syntaxhighlight>
</syntaxhighlight>
प्रतीक <code>int(integer)</code> नामक एक संदेश प्रतीक को दर्शाता है <code>int</code> किसी भी पूर्णांक मान का। दूसरा टाइपलेस प्रतीक घोषणा <code>eos</code> (धारा का अंत) एक संकेत का नाम है। एक बार एक पोर्ट प्रकार परिभाषित हो जाने के बाद, उस प्रकार का एक पोर्ट चर घोषित किया जा सकता है:
प्रतीक <code>int(integer)</code> नामक संदेश प्रतीक को दर्शाता है <code>int</code> किसी भी पूर्णांक मान का। दूसरा टाइपलेस प्रतीक घोषणा <code>eos</code> (धारा का अंत) संकेत का नाम है। बार पोर्ट प्रकार परिभाषित हो जाने के बाद, उस प्रकार का पोर्ट चर घोषित किया जा सकता है:
<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
out : stream
out : stream
in  : stream
in  : stream
</syntaxhighlight>
</syntaxhighlight>
और फिर एक चैनल इकाई, इसे बनाने वाले एजेंट के लिए आंतरिक, निम्नानुसार सक्रिय किया जा सकता है:
और फिर चैनल इकाई, इसे बनाने वाले एजेंट के लिए आंतरिक, निम्नानुसार सक्रिय किया जा सकता है:
<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
+out;
+out;
</syntaxhighlight>
</syntaxhighlight>
प्रतीकों को तब सीएसपी-शैली इनपुट और आउटपुट ऑपरेटरों का उपयोग करके चैनलों पर भेजा और प्राप्त किया जा सकता है <code>?</code> और <code>!</code> क्रमश। एक संचार तभी हो सकता है जब भेजने वाले एजेंट से मेल खाने वाला कोई प्राप्तकर्ता एजेंट हो। प्राप्त करने वाले एजेंट को भेजे जाने वाले प्रतीक प्रकार को प्राप्त करने की अपेक्षा करनी चाहिए। उदाहरण के लिए, मान 9 के बाद <code>eos</code> प्रतीक बंदरगाह पर भेजा जाता है <code>out</code>:
प्रतीकों को तब सीएसपी-शैली इनपुट और आउटपुट ऑपरेटरों का उपयोग करके चैनलों पर भेजा और प्राप्त किया जा सकता है <code>?</code> और <code>!</code> क्रमश। संचार तभी हो सकता है जब भेजने वाले एजेंट से मेल खाने वाला कोई प्राप्तकर्ता एजेंट हो। प्राप्त करने वाले एजेंट को भेजे जाने वाले प्रतीक प्रकार को प्राप्त करने की अपेक्षा करनी चाहिए। उदाहरण के लिए, मान 9 के बाद <code>eos</code> प्रतीक बंदरगाह पर भेजा जाता है <code>out</code>:
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
out ! int(9)
out ! int(9)
out ! eos
out ! eos
</syntaxhighlight>
</syntaxhighlight>
और एक पूर्णांक संदेश एक मिलान प्रकार के एक चर में प्राप्त होता है, उसके बाद <code>eos</code>:
और पूर्णांक संदेश मिलान प्रकार के चर में प्राप्त होता है, उसके बाद <code>eos</code>:
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
received : integer
received : integer
Line 73: Line 69:


=== पोलिंग स्टेटमेंट्स ===
=== पोलिंग स्टेटमेंट्स ===
पोलिंग स्टेटमेंट संरक्षित विकल्पों की सीएसपी अवधारणा पर आधारित हैं। एक पोलिंग स्टेटमेंट स्टेटमेंट के एक सेट से बना होता है, प्रत्येक एक इनपुट चैनल स्टेटमेंट द्वारा संरक्षित होता है। जब एक संचारण एजेंट और एक गार्ड के बीच एक संचार का मिलान किया जाता है, तो गार्ड को निष्पादित किया जाता है, उसके बाद संबंधित बयान दिया जाता है। उदाहरण के लिए:
पोलिंग स्टेटमेंट संरक्षित विकल्पों की सीएसपी अवधारणा पर आधारित हैं। पोलिंग स्टेटमेंट स्टेटमेंट के सेट से बना होता है, प्रत्येक इनपुट चैनल स्टेटमेंट द्वारा संरक्षित होता है। जब संचारण एजेंट और गार्ड के बीच संचार का मिलान किया जाता है, तो गार्ड को निष्पादित किया जाता है, उसके बाद संबंधित कथन दिया जाता है। उदाहरण के लिए:
<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
poll
poll
Line 80: Line 76:
end
end
</syntaxhighlight>
</syntaxhighlight>
जहां बंदरगाह <code>in</code> संकेतों के लिए निगरानी की जाती है <code>X</code> या <code>Y</code>, एक मिलान संचार पर, संबंधित चर <code>x</code> या <code>y</code> बढ़ाए जाते हैं।
जहां बंदरगाह <code>in</code> संकेतों के लिए निगरानी की जाती है <code>X</code> या <code>Y</code>, मिलान संचार पर, संबंधित चर <code>x</code> या <code>y</code> बढ़ाए जाते हैं।


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


== उदाहरण कार्यक्रम ==
== उदाहरण कार्यक्रम ==
निम्नलिखित एक पूर्ण उदाहरण कार्यक्रम है, जो जॉयस प्रोग्रामिंग भाषा को प्रस्तुत करने वाले मूल पेपर से लिया गया है,<ref name="Hansen1987" />अभाज्य संख्याएँ उत्पन्न करने के लिए छानने की तकनीक के आधार पर अभाज्य संख्याएँ उत्पन्न करने के लिए एक एल्गोरिथ्म को लागू करना। ए <code>sieve</code> एजेंट को अपने पूर्ववर्ती से पूर्णांकों की एक धारा भेजी जाती है, जो पहले अभाज्य है। यह इस प्राइम के सभी गुणकों को धारा से हटा देता है और एक उत्तराधिकारी को सक्रिय करता है। यह तब तक जारी रहता है जब तक <code>eos</code> सिग्नल चलनी के सेट के साथ प्रचारित किया जाता है।
निम्नलिखित पूर्ण उदाहरण कार्यक्रम है, जो जॉयस प्रोग्रामिंग भाषा को प्रस्तुत करने वाले मूल पेपर से लिया गया है,<ref name="Hansen1987" />अभाज्य संख्याएँ उत्पन्न करने के लिए छानने की तकनीक के आधार पर अभाज्य संख्याएँ उत्पन्न करने के लिए एल्गोरिथ्म को लागू करना। ए <code>sieve</code> एजेंट को अपने पूर्ववर्ती से पूर्णांकों की धारा भेजी जाती है, जो पहले अभाज्य है। यह इस प्राइम के सभी गुणकों को धारा से हटा देता है और उत्तराधिकारी को सक्रिय करता है। यह तब तक जारी रहता है जब तक <code>eos</code> सिग्नल चलनी के सेट के साथ प्रचारित किया जाता है।
<वाक्यविन्यास हाइलाइट लैंग = पास्कल हाइलाइट = 1>
<वाक्यविन्यास हाइलाइट लैंग = पास्कल हाइलाइट = 1>
एजेंट छलनी (इनप, आउट: स्ट्रीम);
एजेंट छलनी (इनप, आउट: स्ट्रीम);
वर अधिक: बूलियन; एक्स, वाई: पूर्णांक;
वर अधिक: बूलियन; एक्स, वाई: पूर्णांक;
   सफलता: धारा;
   सफलता: धारा;
शुरू
प्रारंभ
    मतदान
  मतदान
        inp?int(x) -> +succ;
  inp?int(x) -> +succ;
            चलनी (सक्सेस, आउट); अधिक := सत्य |
  चलनी (सक्सेस, आउट); अधिक�:= सत्य |
        inp?eos -> out!eos; अधिक := असत्य
  inp?eos -> out!eos; अधिक�:= असत्य
    अंत;
  अंत;
    जबकि अधिक करते हैं
  जबकि अधिक करते हैं
        मतदान
  मतदान
            inp? int(y) ->
  inp? int(y) ->
                अगर y mod x <> 0 तो succ!int(y) |
  यदि y mod x <> 0 तो succ!int(y) |
            inp?eos -> out!int(x);
  inp?eos -> out!int(x);
                सफलता; अधिक := असत्य
  सफलता; अधिक�:= असत्य
        अंत;
  अंत;
अंत;
अंत;
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
निम्नलिखित एजेंट छलनी एजेंटों के सेट को इनिशियलाइज़ करता है और उनमें 3 और 9999 के बीच पूर्णांकों की एक धारा डालता है।
निम्नलिखित एजेंट छलनी एजेंटों के सेट को इनिशियलाइज़ करता है और उनमें 3 और 9999 के बीच पूर्णांकों की धारा डालता है।
<वाक्यविन्यास हाइलाइट लैंग = पास्कल हाइलाइट = 1>
<वाक्यविन्यास हाइलाइट लैंग = पास्कल हाइलाइट = 1>
एजेंट प्राइम्स;
एजेंट प्राइम्स;
जनरेट, चलनी, प्रिंट का उपयोग करें;
जनरेट, चलनी, प्रिंट का उपयोग करें;
वर ए, बी: धारा;
वर ए, बी: धारा;
शुरू
प्रारंभ
    + ए; + बी; उत्पन्न (ए, 3, 2, 4999);
  + ए; + बी; उत्पन्न (ए, 3, 2, 4999);
    चलनी (ए, बी); प्रिंट (बी)
  चलनी (ए, बी); प्रिंट (बी)
अंत;
अंत;
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>
Line 120: Line 116:


=== ढेर आवंटन ===
=== ढेर आवंटन ===
एजेंट प्रक्रियाओं के समवर्ती निष्पादन के कारण, एक पारंपरिक अनुक्रमिक स्टैक (अमूर्त डेटा प्रकार) आवंटन योजना का उपयोग नहीं किया जा सकता है क्योंकि एजेंट कॉल के सक्रियण रिकॉर्ड अंतिम-इन फ़र्स्ट-आउट पैटर्न का पालन नहीं करते हैं। इसके बजाय, क्रिएटर-सबजेंट रिश्ते एक ट्री-स्ट्रक्चर्ड स्टैक बनाते हैं। इस व्यवहार को लागू करने के लिए एक सरल योजना का उपयोग किया जाता है, जो स्टैक के शीर्ष पर नए सक्रियण रिकॉर्ड आवंटित करके और उप-एजेंट के सक्रियण रिकॉर्ड को उनके निर्माता के रिकॉर्ड से जोड़कर काम करता है। ये रिकॉर्ड तभी मुक्त होते हैं जब एजेंट समाप्त हो जाता है और वे स्टैक के शीर्ष पर होते हैं।<ref name="Hansen1989b">{{Cite journal |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |title=जॉयस का एक मल्टीप्रोसेसर कार्यान्वयन|journal=Software: Practice and Experience |publisher=John Wiley & Sons |volume=19 |issue=6 |date=June 1989 |pages=579–592 |doi=10.1002/spe.4380190606|s2cid=30474491 |url=https://surface.syr.edu/eecs_techreports/29 }}</ref> इस योजना की प्रभावशीलता एक कार्यक्रम की संरचना और व्यवहार पर निर्भर करती है, जिसके परिणामस्वरूप कुछ मामलों में स्मृति का खराब उपयोग होगा। हैनसेन की भाषा सुपरपास्कल में एक अधिक प्रभावी योजना लागू की गई।
एजेंट प्रक्रियाओं के समवर्ती निष्पादन के कारण, पारंपरिक अनुक्रमिक स्टैक (अमूर्त डेटा प्रकार) आवंटन योजना का उपयोग नहीं किया जा सकता है क्योंकि एजेंट कॉल के सक्रियण रिकॉर्ड अंतिम-इन फ़र्स्ट-आउट पैटर्न का पालन नहीं करते हैं। इसके अतिरिक्त, क्रिएटर-सबजेंट रिश्ते ट्री-स्ट्रक्चर्ड स्टैक बनाते हैं। इस व्यवहार को लागू करने के लिए सरल योजना का उपयोग किया जाता है, जो स्टैक के शीर्ष पर नए सक्रियण रिकॉर्ड आवंटित करके और उप-एजेंट के सक्रियण रिकॉर्ड को उनके निर्माता के रिकॉर्ड से जोड़कर काम करता है। ये रिकॉर्ड तभी मुक्त होते हैं जब एजेंट समाप्त हो जाता है और वे स्टैक के शीर्ष पर होते हैं।<ref name="Hansen1989b">{{Cite journal |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |title=जॉयस का एक मल्टीप्रोसेसर कार्यान्वयन|journal=Software: Practice and Experience |publisher=John Wiley & Sons |volume=19 |issue=6 |date=June 1989 |pages=579–592 |doi=10.1002/spe.4380190606|s2cid=30474491 |url=https://surface.syr.edu/eecs_techreports/29 }}</ref> इस योजना की प्रभावशीलता कार्यक्रम की संरचना और व्यवहार पर निर्भर करती है, जिसके परिणामस्वरूप कुछ स्थितियों में स्मृति का खराब उपयोग होगा। हैनसेन की भाषा सुपरपास्कल में अधिक प्रभावी योजना लागू की गई।


==संदर्भ==
==संदर्भ==

Revision as of 14:58, 4 June 2023

Joyce
Paradigmconcurrent, imperative, structured
परिवारWirth Pascal
द्वारा डिज़ाइन किया गयाPer Brinch Hansen
पहली प्रस्तुति1987; 37 years ago (1987)
Stable release
1 / 1987; 37 years ago (1987)
टाइपिंग अनुशासनStrong
Influenced by
Communicating sequential processes, Pascal, Concurrent Pascal
Influenced
SuperPascal

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

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

विशेषताएं

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

एजेंट

एजेंट प्रक्रिया है जिसमें कथनों का सेट और संभवतः अन्य एजेंटों की नेस्टेड परिभाषाएँ सम्मिलित हैं। एजेंट गतिशील रूप से उप-एजेंट सक्रिय कर सकता है जो उनके निर्माता के साथ समवर्ती रूप से निष्पादित होते हैं। एजेंट तभी समाप्त हो सकता है जब उसके सभी उप-एजेंट भी समाप्त हो गए हों। उदाहरण के लिए, एजेंट process2 को सक्रिय करता है process1: <वाक्यविन्यास लैंग = पास्कल लाइन हाइलाइट = 1,6> एजेंट प्रक्रिया 1 (एक्स, वाई: पूर्णांक); प्रारंभ

 ...

अंत;

एजेंट प्रक्रिया 2 (); प्रक्रिया 1 का प्रयोग करें; प्रारंभ

 प्रक्रिया 1 (9, 17);

अंत; </वाक्यविन्यास हाइलाइट>

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

संचार

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

stream = [int(integer), eos];

प्रतीक int(integer) नामक संदेश प्रतीक को दर्शाता है int किसी भी पूर्णांक मान का। दूसरा टाइपलेस प्रतीक घोषणा eos (धारा का अंत) संकेत का नाम है। बार पोर्ट प्रकार परिभाषित हो जाने के बाद, उस प्रकार का पोर्ट चर घोषित किया जा सकता है:

out : stream
in  : stream

और फिर चैनल इकाई, इसे बनाने वाले एजेंट के लिए आंतरिक, निम्नानुसार सक्रिय किया जा सकता है:

+out;

प्रतीकों को तब सीएसपी-शैली इनपुट और आउटपुट ऑपरेटरों का उपयोग करके चैनलों पर भेजा और प्राप्त किया जा सकता है ? और ! क्रमश। संचार तभी हो सकता है जब भेजने वाले एजेंट से मेल खाने वाला कोई प्राप्तकर्ता एजेंट हो। प्राप्त करने वाले एजेंट को भेजे जाने वाले प्रतीक प्रकार को प्राप्त करने की अपेक्षा करनी चाहिए। उदाहरण के लिए, मान 9 के बाद eos प्रतीक बंदरगाह पर भेजा जाता है out:

out ! int(9)
out ! eos

और पूर्णांक संदेश मिलान प्रकार के चर में प्राप्त होता है, उसके बाद eos:

received : integer
in ? int(received)
in ? eos


पोलिंग स्टेटमेंट्स

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

poll
    in ? X -> x := x + 1 |
    in ? Y -> y := y + 1
end

जहां बंदरगाह in संकेतों के लिए निगरानी की जाती है X या Y, मिलान संचार पर, संबंधित चर x या y बढ़ाए जाते हैं।

सुरक्षा

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

उदाहरण कार्यक्रम

निम्नलिखित पूर्ण उदाहरण कार्यक्रम है, जो जॉयस प्रोग्रामिंग भाषा को प्रस्तुत करने वाले मूल पेपर से लिया गया है,[1]अभाज्य संख्याएँ उत्पन्न करने के लिए छानने की तकनीक के आधार पर अभाज्य संख्याएँ उत्पन्न करने के लिए एल्गोरिथ्म को लागू करना। ए sieve एजेंट को अपने पूर्ववर्ती से पूर्णांकों की धारा भेजी जाती है, जो पहले अभाज्य है। यह इस प्राइम के सभी गुणकों को धारा से हटा देता है और उत्तराधिकारी को सक्रिय करता है। यह तब तक जारी रहता है जब तक eos सिग्नल चलनी के सेट के साथ प्रचारित किया जाता है। <वाक्यविन्यास हाइलाइट लैंग = पास्कल हाइलाइट = 1> एजेंट छलनी (इनप, आउट: स्ट्रीम); वर अधिक: बूलियन; एक्स, वाई: पूर्णांक;

 सफलता: धारा;

प्रारंभ

 मतदान
 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 के बीच पूर्णांकों की धारा डालता है। <वाक्यविन्यास हाइलाइट लैंग = पास्कल हाइलाइट = 1> एजेंट प्राइम्स; जनरेट, चलनी, प्रिंट का उपयोग करें; वर ए, बी: धारा; प्रारंभ

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

अंत; </वाक्यविन्यास हाइलाइट>

कार्यान्वयन

ढेर आवंटन

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

संदर्भ

  1. 1.0 1.1 Hansen, Brinch (2002). "Joyce: A programming language for distributed systems". In Hansen, Per Brinch (ed.). The Origin of Concurrent Programming: From Semaphores to Remote Procedure Calls. New York, New York: Springer. pp. 464–492. doi:10.1007/978-1-4757-3472-0. ISBN 978-1-4419-2986-0. S2CID 44909506.
  2. Hansen, Brinch (June 1989). "द जॉयस लैंग्वेज रिपोर्ट". Software: Practice and Experience. John Wiley & Sons. 19 (6): 553–578. doi:10.1002/spe.4380190606. S2CID 30474491.
  3. Hansen, Brinch (June 1989). "जॉयस का एक मल्टीप्रोसेसर कार्यान्वयन". Software: Practice and Experience. John Wiley & Sons. 19 (6): 579–592. doi:10.1002/spe.4380190606. S2CID 30474491.


बाहरी संबंध

Official website, Brinch Hansen Archive, a set of his papers