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

From Vigyanwiki
No edit summary
No edit summary
 
(15 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Infobox programming language
{{Infobox programming language
|name = Joyce
|name = जॉयस
|logo =
|logo =
|paradigm = [[concurrent programming language|concurrent]], [[imperative programming|imperative]], [[Structured programming|structured]]
|paradigm = [[concurrent programming language|concurrent]], [[imperative programming|imperative]], [[Structured programming|structured]]
Line 17: Line 16:
}}
}}


जॉइस 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> यह अनुक्रमिक भाषा [[पास्कल (प्रोग्रामिंग भाषा)]] और अनुक्रमिक प्रक्रियाओं (सीएसपी) को संप्रेषित करने के सिद्धांतों पर आधारित होती है। इसे प्रोग्रामिंग भाषा के रूप में प्रयुक्त करने के लिए सीएसपी की कमियों को दूर करने के लिए और मुख्य रूप से शिक्षण के लिए, वितरित कंप्यूटिंग प्रणाली कार्यान्वयन के लिए उपकरण प्रदान करने के लिए बनाया गया था।


भाषा एजेंटों की अवधारणा पर आधारित है; समवर्ती रूप से निष्पादित प्रक्रियाएं जो केवल चैनलों और [[संदेश देना]] के उपयोग से संवाद करती हैं। एजेंट उप-एजेंट को गतिशील रूप से और [[रिकर्सन (कंप्यूटर विज्ञान)]] सक्रिय कर सकते हैं। जॉयस के विकास ने [[सुपरपास्कल]] भाषा की नींव रखी, जिसे 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>प्रक्रिया2</code> <code>प्रक्रिया1</code> को सक्रिय करता है।
<वाक्यविन्यास लैंग = पास्कल लाइन हाइलाइट = 1,6>
 
एजेंट प्रक्रिया 1 (एक्स, वाई: पूर्णांक);
<syntaxhighlight lang="pascal" line highlight="1,6">
प्रारंभ
agent process1(x, y: integer);
  ...
begin
अंत;
    ...
end;
 
agent process2();
use process1;
begin
    process1(9, 17);
end;
</syntaxhighlight>
 
एजेंट की सक्रियता सभी [[स्थानीय चर]] के नए उदाहरण बनाती है और प्रत्येक औपचारिक पैरामीटर का मान स्थानीय चर में कॉपी किया जाता है। इसलिए, एजेंट अन्य एजेंटों के चर (कंप्यूटर विज्ञान) तक नहीं पहुंच सकते हैं और उन्हें केवल चैनलों के उपयोग के माध्यम से संवाद करने की अनुमति होती है। यह प्रतिबंध [[दौड़ की स्थिति]] जैसे साझा चर के उपयोग से जुड़ी समस्याओं को रोकता है।
 
 
 
 
 
 
 
 
 


एजेंट प्रक्रिया 2 ();
प्रक्रिया 1 का प्रयोग करें;
प्रारंभ
  प्रक्रिया 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>इंट(पूर्णांक)</code> किसी भी पूर्णांक मान के <code>इंट</code> नामक संदेश प्रतीक को दर्शाता है। दूसरा टाइपलेस प्रतीक घोषणा <code>ईओएस</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> क्रमश का उपयोग करके चैनलों पर भेजा और प्राप्त किया जा सकता है। इस प्रकार संचार तभी हो सकता है जब भेजने वाले एजेंट से मेल खाने वाला कोई प्राप्तकर्ता एजेंट होता है। अतः प्राप्त करने वाले एजेंट को भेजे जाने वाले प्रतीक प्रकार को प्राप्त करने की अपेक्षा की जाती है। उदाहरण के लिए, <code>ईओएस</code> प्रतीक के पश्चात् मान 9 पोर्ट  <code>आउट</code> पर भेजा जाता है।
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
out ! int(9)
out ! int(9)
out ! eos
out ! eos
</syntaxhighlight>
</syntaxhighlight>
और पूर्णांक संदेश मिलान प्रकार के चर में प्राप्त होता है, उसके बाद <code>eos</code>:
और पूर्णांक संदेश मिलान प्रकार के चर में प्राप्त होता है, उसके पश्चात् <code>ईओएस</code>:
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
received : integer
received : integer
Line 68: Line 79:




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


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


== उदाहरण कार्यक्रम ==
== उदाहरण कार्यक्रम ==
निम्नलिखित पूर्ण उदाहरण कार्यक्रम है, जो जॉयस प्रोग्रामिंग भाषा को प्रस्तुत करने वाले मूल पेपर से लिया गया है,<ref name="Hansen1987" />अभाज्य संख्याएँ उत्पन्न करने के लिए छानने की तकनीक के आधार पर अभाज्य संख्याएँ उत्पन्न करने के लिए एल्गोरिथ्म को लागू करना। ए <code>sieve</code> एजेंट को अपने पूर्ववर्ती से पूर्णांकों की धारा भेजी जाती है, जो पहले अभाज्य है। यह इस प्राइम के सभी गुणकों को धारा से हटा देता है और उत्तराधिकारी को सक्रिय करता है। यह तब तक जारी रहता है जब तक <code>eos</code> सिग्नल चलनी के सेट के साथ प्रचारित किया जाता है।
निम्नलिखित पूर्ण उदाहरण प्रोग्राम होता है, जो जॉयस प्रोग्रामिंग भाषा को प्रस्तुत करने वाले मूल पेपर से लिया गया होता है,<ref name="Hansen1987" /> अभाज्य संख्याएँ उत्पन्न करने के लिए छँटाई विधि के आधार पर अभाज्य संख्याएँ उत्पन्न करने के लिए एल्गोरिथ्म को प्रयुक्त किया जाता है। इस प्रकार <code>छलनी</code> एजेंट को उसके पूर्ववर्ती से पूर्णांकों के स्रोत भेजी जाती है, जो पहले अभाज्य होती है। यह इस प्राइम के सभी गुणकों को स्रोत से हटा देता है और उत्तराधिकारी को सक्रिय करता है। यह तब तक जारी रहता है जब तक <code>ईओएस</code> सिग्नल चलनी के समूह के साथ प्रसारित किया जाता है।
<वाक्यविन्यास हाइलाइट लैंग = पास्कल हाइलाइट = 1>
 
एजेंट छलनी (इनप, आउट: स्ट्रीम);
<syntaxhighlight lang="pascal" highlight="1">
वर अधिक: बूलियन; एक्स, वाई: पूर्णांक;
agent sieve(inp, out: stream);
   सफलता: धारा;
var more: boolean; x, y: integer;
प्रारंभ
   succ: stream;
  मतदान
begin
  inp?int(x) -> +succ;
    poll
  चलनी (सक्सेस, आउट); अधिक�:= सत्य |
        inp?int(x) -> +succ;  
  inp?eos -> out!eos; अधिक�:= असत्य
            sieve(succ, out); more := true |
  अंत;
        inp?eos   -> out!eos; more := false
  जबकि अधिक करते हैं
    end;
  मतदान
    while more do
  inp? int(y) ->
        poll
  यदि y mod x <> 0 तो succ!int(y) |
            inp?int(y) ->
  inp?eos -> out!int(x);
                if y mod x <> 0 then succ!int(y) |
  सफलता; अधिक�:= असत्य
            inp?eos   -> out!int(x);
  अंत;
                succ!eos; more := false
अंत;
        end;
</वाक्यविन्यास हाइलाइट>
end;
निम्नलिखित एजेंट छलनी एजेंटों के सेट को इनिशियलाइज़ करता है और उनमें 3 और 9999 के बीच पूर्णांकों की धारा डालता है।
</syntaxhighlight>
<वाक्यविन्यास हाइलाइट लैंग = पास्कल हाइलाइट = 1>
 
एजेंट प्राइम्स;
निम्नलिखित एजेंट छलनी एजेंटों के समूह को आरंभ करता है और उनमें 3 और 9999 के मध्य पूर्णांकों के स्रोत डालता है।
जनरेट, चलनी, प्रिंट का उपयोग करें;
 
वर ए, बी: धारा;
<syntaxhighlight lang="pascal" highlight="1">
प्रारंभ
agent primes;
  + ; + बी; उत्पन्न (, 3, 2, 4999);
use generate, sieve, print;
  चलनी (, बी); प्रिंट (बी)
var a, b: stream;
अंत;
begin
</वाक्यविन्यास हाइलाइट>
    +a; +b; generate(a, 3, 2, 4999);
    sieve(a, b); print(b)
end;
</syntaxhighlight>
 
 
 
 
 
 
 
 
 
 
 


== कार्यान्वयन ==
== कार्यान्वयन ==


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


==संदर्भ==
==संदर्भ==
Line 126: Line 172:


{{Pascal programming language family}}
{{Pascal programming language family}}
[[Category: समवर्ती प्रोग्रामिंग भाषाएँ]] [[Category: प्रक्रियात्मक प्रोग्रामिंग भाषाएँ]] [[Category: पास्कल प्रोग्रामिंग भाषा परिवार]] [[Category: 1993 में बनाई गई प्रोग्रामिंग लैंग्वेज]]


[[Category: Machine Translated Page]]
[[Category:1993 में बनाई गई प्रोग्रामिंग लैंग्वेज]]
[[Category:Collapse templates]]
[[Category:Created On 26/05/2023]]
[[Category:Created On 26/05/2023]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Official website not in Wikidata]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia metatemplates]]
[[Category:पास्कल प्रोग्रामिंग भाषा परिवार]]
[[Category:प्रक्रियात्मक प्रोग्रामिंग भाषाएँ]]
[[Category:समवर्ती प्रोग्रामिंग भाषाएँ]]

Latest revision as of 08:50, 13 June 2023

जॉयस
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] यह अनुक्रमिक भाषा पास्कल (प्रोग्रामिंग भाषा) और अनुक्रमिक प्रक्रियाओं (सीएसपी) को संप्रेषित करने के सिद्धांतों पर आधारित होती है। इसे प्रोग्रामिंग भाषा के रूप में प्रयुक्त करने के लिए सीएसपी की कमियों को दूर करने के लिए और मुख्य रूप से शिक्षण के लिए, वितरित कंप्यूटिंग प्रणाली कार्यान्वयन के लिए उपकरण प्रदान करने के लिए बनाया गया था।

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

विशेषताएं

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

एजेंट

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

agent process1(x, y: integer);
begin
    ...
end;

agent process2();
use process1;
begin
    process1(9, 17);
end;

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







संचार

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

stream = [int(integer), eos];

प्रतीक इंट(पूर्णांक) किसी भी पूर्णांक मान के इंट नामक संदेश प्रतीक को दर्शाता है। दूसरा टाइपलेस प्रतीक घोषणा ईओएस (स्रोत का अंत) को संकेत का नाम है। अतः पोर्ट प्रकार परिभाषित हो जाने के पश्चात्, उस प्रकार का पोर्ट चर घोषित किया जा सकता है।

out : stream
in  : stream

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

+out;

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

out ! int(9)
out ! eos

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

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







पोलिंग कथन

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

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

जहां मिलान संचार पर सिग्नल एक्स या वाई के लिए पोर्ट इन संकेतों के लिए निगरानी की जाती है, अतः संबंधित चर एक्स या वाई बढ़ाए जाते हैं।







सुरक्षा

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

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

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

agent sieve(inp, out: stream);
var more: boolean; x, y: integer;
  succ: stream;
begin
    poll
        inp?int(x) -> +succ; 
            sieve(succ, out); more := true |
        inp?eos    -> out!eos; more := false
    end;
    while more do
        poll
            inp?int(y) ->
                if y mod x <> 0 then succ!int(y) |
            inp?eos    -> out!int(x);
                succ!eos; more := false
        end;
end;

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

agent primes;
use generate, sieve, print;
var a, b: stream;
begin
    +a; +b; generate(a, 3, 2, 4999);
    sieve(a, b); print(b)
end;







कार्यान्वयन

ढेर आवंटन

एजेंट प्रक्रियाओं के समवर्ती निष्पादन के कारण, पारंपरिक अनुक्रमिक ढेर (अमूर्त डेटा प्रकार) आवंटन योजना का उपयोग नहीं किया जा सकता है जिससेकि एजेंट कॉल के सक्रियण रिकॉर्ड लास्ट-इन फर्स्ट-आउट पैटर्न का पालन नहीं करते हैं। इसके अतिरिक्त, क्रिएटर-सबजेंट संबंध ट्री-स्ट्रक्चर्ड ढेर बनाते हैं। इस व्यवहार को प्रयुक्त करने के लिए सरल योजना का उपयोग किया जाता है, जो ढेर के शीर्ष पर नए सक्रियण रिकॉर्ड आवंटित करके और उप-एजेंट के सक्रियण रिकॉर्ड को उनके निर्माता के रिकॉर्ड से जोड़कर कार्य करता है। यह रिकॉर्ड तभी मुक्त होते हैं जब एजेंट समाप्त हो जाता है और वह ढेर के शीर्ष पर होते हैं।[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