जॉयस (प्रोग्रामिंग भाषा)
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
(Learn how and when to remove this template message)
|
Paradigm | concurrent, imperative, structured |
---|---|
परिवार | Wirth Pascal |
द्वारा डिज़ाइन किया गया | Per Brinch Hansen |
पहली प्रस्तुति | 1987 |
Stable release | 1
/ 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.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.
- ↑ Hansen, Brinch (June 1989). "द जॉयस लैंग्वेज रिपोर्ट". Software: Practice and Experience. John Wiley & Sons. 19 (6): 553–578. doi:10.1002/spe.4380190606. S2CID 30474491.
- ↑ 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