सुपरपास्कल: Difference between revisions

From Vigyanwiki
No edit summary
 
(17 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Short description|Programming language}}
{{primary sources|date=June 2018}}
{{Infobox programming language
{{Infobox programming language
|name = SuperPascal
| name = सुपरपास्कल (SuperPascal)
|logo =
| logo =  
|paradigm = [[Concurrent computing|concurrent]], [[Imperative programming|imperative]], [[Structured programming|structured]]
| paradigm = [[Concurrent computing|concurrent]], [[Imperative programming|imperative]], [[Structured programming|structured]]
| family = [[Niklaus Wirth|Wirth]] [[Pascal (programming language)|Pascal]]
| family = [[Niklaus Wirth|Wirth]] [[Pascal (programming language)|Pascal]]
|designer = [[Per Brinch Hansen]]
| designer = [[Per Brinch Hansen]]
|developer =  
| developer =  
|released = {{Start date and age|1993}}
| released = {{Start date and age|1993}}
|latest release version = 1
| latest release version = 1
|latest release date = {{Start date and age|1993}}
| latest release date = {{Start date and age|1993}}
|typing = [[Type system|Strong]]
| typing = [[Type system|Strong]]
|website = {{URL|brinch-hansen.net}}
| website = {{URL|brinch-hansen.net}}
|implementations =  
| implementations =  
|dialects =  
| dialects =  
|influenced by = [[Communicating sequential processes]], [[Pascal (programming language)|Pascal]], [[Concurrent Pascal]], [[Joyce (programming language)|Joyce]], [[occam (programming language)|occam]]
| influenced by = [[Communicating sequential processes]], [[Pascal (programming language)|Pascal]], [[Concurrent Pascal]], [[Joyce (programming language)|Joyce]], [[occam (programming language)|occam]]
|influenced =
| influenced =  
}}
}}


सुपरपास्कल अनिवार्य, [[समवर्ती कंप्यूटिंग]] [[प्रोग्रामिंग भाषा]] है जिसे [[प्रति ब्रिन्च हैनसेन]] द्वारा विकसित किया गया है।<ref name="Hansen1993">{{citation |last=Hansen |first=Per Brinch |author-link=Per Brinch Hansen |title=SuperPascal: a publication language for parallel scientific computing |date=1993}}</ref> यह एक प्रकाशन भाषा के रूप में डिजाइन किया गया था समानांतर प्रोग्रामिंग में अवधारणाओं की स्पष्ट और संक्षिप्त अभिव्यक्ति को सक्षम करने के लिए विचार उपकरण। यह कार्यान्वयन भाषाओं के विपरीत है जो अक्सर मशीन विवरण और ऐतिहासिक सम्मेलनों से जटिल होती हैं। यह समानांतर प्रकाशन भाषा के समय की आवश्यकता को पूरा करने के लिए बनाया गया था। यकीनन, आज कुछ भाषाएँ अभिव्यंजक और संक्षिप्त हैं जिनका उपयोग सोच उपकरण के रूप में किया जा सकता है।
'''सुपरपास्कल''' आदेशात्मक, [[समवर्ती कंप्यूटिंग]] [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] है जिसे [[प्रति ब्रिन्च हैनसेन|पर ब्रिन्च हैनसेन]] द्वारा विकसित किया गया है।<ref name="Hansen1993">{{citation |last=Hansen |first=Per Brinch |author-link=Per Brinch Hansen |title=SuperPascal: a publication language for parallel scientific computing |date=1993}}</ref> यह ''प्रकाशन लैंग्वेज'' के रूप में डिजाइन किया गया था समानांतर प्रोग्रामिंग में अवधारणाओं की स्पष्ट और संक्षिप्त अभिव्यक्ति को सक्षम करने के लिए विचार उपकरण। यह कार्यान्वयन लैंग्वेज के विपरीत है जो अधिकांशतः मशीन विवरण और ऐतिहासिक सम्मेलनों से जटिल होती हैं। यह समानांतर प्रकाशन लैंग्वेज के समय की आवश्यकता को पूरा करने के लिए बनाया गया था। यकीनन, आज कुछ लैंग्वेज अभिव्यंजक और संक्षिप्त हैं जिनका उपयोग विचार उपकरण के रूप में किया जा सकता है।


== इतिहास और विकास ==
== इतिहास और विकास ==
सुपरपास्कल [[निकोलस विर्थ|निक्लॉस विर्थ]] की अनुक्रमिक भाषा [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल]] पर आधारित है, इसे सुरक्षित और कुशल संगामिति के लिए सुविधाओं के साथ विस्तारित किया गया है। 1970 के दशक में खुद पास्कल का प्रकाशन भाषा के रूप में भारी इस्तेमाल किया गया था। इसका उपयोग [[संरचित प्रोग्रामिंग]] प्रथाओं को सिखाने के लिए किया गया था और पाठ्य पुस्तकों में चित्रित किया गया था, उदाहरण के लिए, [[ संकलक | संकलनकर्ता]]<ref name='Welsh1980'>{{cite book |last=Welsh |first=Jim |title=संरचित सिस्टम प्रोग्रामिंग|publisher=Prentice-Hall |year=1980 |location=Upper Saddle River, NJ, USA |url=https://archive.org/details/structuredsystem0000wels |url-access=registration |isbn=0-13-854562-6}}</ref> और प्रोग्रामिंग भाषाओं।<ref name='Tennent1981'>{{cite book |last=Tennent |first= R. D. |title=प्रोग्रामिंग भाषाओं के सिद्धांत|publisher=Prentice-Hall |year=1981 |location=Upper Saddle River, NJ, USA |url=https://archive.org/details/principlesofprog0000tenn |url-access=registration |isbn= 0-13-709873-1}}</ref> हैनसेन ने पहले [[समवर्ती पास्कल]] भाषा विकसित की थी,<ref>{{cite book |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |title=समवर्ती कार्यक्रमों की वास्तुकला|publisher=Prentice-Hall |year=1977 |isbn=978-0130446282}}</ref> [[ऑपरेटिंग सिस्टम]] और [[ रीयल-टाइम कंप्यूटिंग | रीयल-टाइम]] नियंत्रण प्रणाली के डिजाइन के लिए सबसे शुरुआती समवर्ती भाषाओं में से एक।
सुपरपास्कल [[निकोलस विर्थ|निक्लॉस विर्थ]] की अनुक्रमिक लैंग्वेज [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल]] पर आधारित है, इसे सुरक्षित और कुशल संगामिति के लिए सुविधाओं के साथ विस्तारित किया गया है। 1970 के दशक में खुद पास्कल का प्रकाशन लैंग्वेज के रूप में बहुत अधिक इस्तेमाल किया गया था। इसका उपयोग [[संरचित प्रोग्रामिंग]] प्रथाओं को सिखाने के लिए किया गया था और पाठ्य पुस्तकों में चित्रित किया गया था, उदाहरण के लिए, [[ संकलक | संकलनकर्ता]]<ref name='Welsh1980'>{{cite book |last=Welsh |first=Jim |title=संरचित सिस्टम प्रोग्रामिंग|publisher=Prentice-Hall |year=1980 |location=Upper Saddle River, NJ, USA |url=https://archive.org/details/structuredsystem0000wels |url-access=registration |isbn=0-13-854562-6}}</ref> और प्रोग्रामिंग लैंग्वेज।<ref name='Tennent1981'>{{cite book |last=Tennent |first= R. D. |title=प्रोग्रामिंग भाषाओं के सिद्धांत|publisher=Prentice-Hall |year=1981 |location=Upper Saddle River, NJ, USA |url=https://archive.org/details/principlesofprog0000tenn |url-access=registration |isbn= 0-13-709873-1}}</ref> हैनसेन ने पहले [[समवर्ती पास्कल]] लैंग्वेज विकसित की थी,<ref>{{cite book |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |title=समवर्ती कार्यक्रमों की वास्तुकला|publisher=Prentice-Hall |year=1977 |isbn=978-0130446282}}</ref> [[ऑपरेटिंग सिस्टम]] और [[ रीयल-टाइम कंप्यूटिंग | रीयल-टाइम]] नियंत्रण प्रणाली के डिजाइन के लिए सबसे प्रारम्भी समवर्ती लैंग्वेज में से एक।


सुपरपास्कल की आवश्यकताएँ मॉडल समानांतर कार्यक्रमों के सेट को विकसित करने में हैनसेन द्वारा प्राप्त अनुभव पर आधारित थीं, जिसने [[कंप्यूटर विज्ञान]] में सामान्य समस्याओं के लिए विधियों को लागू किया।<ref>{{Citation |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |contribution=Model programs for computational science: A programming methodology for multicomputers |title=Concurrency: Practice and Experience |pages=407–423 |date=May 1993 }}</ref> इस प्रयोग ने उन्हें वैज्ञानिक समांतर कंप्यूटिंग के भविष्य के बारे में निम्नलिखित निष्कर्ष निकालने की अनुमति दी
सुपरपास्कल की आवश्यकताएँ मॉडल समानांतर कार्यक्रमों के सेट को विकसित करने में हैनसेन द्वारा प्राप्त अनुभव पर आधारित थीं, जिसने [[कंप्यूटर विज्ञान]] में सामान्य समस्याओं के लिए विधियों को लागू किया।<ref>{{Citation |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |contribution=Model programs for computational science: A programming methodology for multicomputers |title=Concurrency: Practice and Experience |pages=407–423 |date=May 1993 }}</ref> इस प्रयोग ने उन्हें वैज्ञानिक समांतर कंप्यूटिंग के भविष्य के बारे में निम्नलिखित निष्कर्ष निकालने की अनुमति दी


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


इसके बाद समानांतर प्रकाशन भाषा के लिए निम्नलिखित आवश्यकताओं का नेतृत्व किया गया
इसके बाद समानांतर प्रकाशन लैंग्वेज के लिए निम्नलिखित आवश्यकताओं का नेतृत्व किया गया
* भाषा को नियतात्मक समानता और संदेश संचार के ''साथ व्यापक रूप से इस्तेमाल की जाने वाली मानक भाषा का विस्तार'' ''करना चाहिए''। विस्तार मानक भाषा की भावना में होना चाहिए।
* लैंग्वेज को ''नियतात्मक समानता'' और ''संदेश संचार'' के ''साथ व्यापक रूप से इस्तेमाल की जाने वाली मानक लैंग्वेज का विस्तार'' ''करना चाहिए''। विस्तार मानक लैंग्वेज की भावना में होना चाहिए।
* भाषा को संचार चैनलों से जुड़े समांतर प्रक्रियाओं के मनमाना विन्यास प्रोग्राम करना संभव बनाना चाहिए। इन विन्यासों को पुनरावृत्ति या पुनरावर्ती रूप से परिभाषित किया जा सकता है और गतिशील रूप से बनाया जा सकता है।
* लैंग्वेज को संचार चैनलों से जुड़े समांतर प्रक्रियाओं के ''मनमाना विन्यास'' प्रोग्राम करना संभव बनाना चाहिए। इन विन्यासों को पुनरावृत्ति या पुनरावर्ती रूप से परिभाषित किया जा सकता है और गतिशील रूप से बनाया जा सकता है।
* '''भाषा''' को [[सिंगल-पास कंपाइलर]] को यह जांचने में सक्षम बनाना चाहिए कि समांतर प्रक्रियाएं समय-निर्भर तरीके से हस्तक्षेप नहीं करती हैं।
* लैंग्वेज को [[सिंगल-पास कंपाइलर|सिंगल-पास संकलक]] को यह जांचने में सक्षम बनाना चाहिए कि समांतर प्रक्रियाएं समय-निर्भर तरीके से हस्तक्षेप नहीं करती हैं।


== सुविधाएँ ==
== सुविधाएँ ==
सुपरपास्कल के डिजाइन में प्रमुख विचार समानता के लिए अमूर्त अवधारणाओं के साथ एक सुरक्षित प्रोग्रामिंग प्रदान करना था।<ref name='Hansen1994'>{{cite journal |title=प्रोग्रामिंग भाषा सुपरपास्कल|journal=Software: Practice and Experience |year=1994 |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |volume=24,5 |pages=399–406 }}</ref><ref name='Hansen2002'>{{cite book |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |title=समवर्ती प्रोग्रामिंग का आविष्कार|publisher=Springer-Verlag |year=1977 |location=New York |isbn=0-387-95401-5}}</ref>
सुपरपास्कल के डिजाइन में प्रमुख विचार समानता के लिए अमूर्त अवधारणाओं के साथ सुरक्षित प्रोग्रामिंग प्रदान करना था।<ref name='Hansen1994'>{{cite journal |title=प्रोग्रामिंग भाषा सुपरपास्कल|journal=Software: Practice and Experience |year=1994 |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |volume=24,5 |pages=399–406 }}</ref><ref name='Hansen2002'>{{cite book |last=Hansen |first=Brinch |author-link=Per Brinch Hansen |title=समवर्ती प्रोग्रामिंग का आविष्कार|publisher=Springer-Verlag |year=1977 |location=New York |isbn=0-387-95401-5}}</ref>
 


=== सुरक्षा ===
=== सुरक्षा ===
{{Further|Defensive programming}}
{{Further|डिफेंसिव प्रोग्रामिंग}}


सुपरपास्कल इस मायने में सुरक्षित है कि इसे अपने कंपाइलर और [[रनटाइम सिस्टम]] को अधिक से अधिक मामलों का पता लगाने में सक्षम बनाना चाहिए जिसमें भाषा की अवधारणाएं टूट जाती हैं और अर्थहीन परिणाम उत्पन्न करती हैं।<ref name='Hoare1974'>{{cite journal |title=प्रोग्रामिंग भाषा डिजाइन पर संकेत|journal=Computer System Reliability |year=1974 |first=C. A. R. |last=Hoare |author-link=Tony Hoare |pages=505–534 }}</ref> सुपरपास्कल वेरिएबल्स के उपयोग पर प्रतिबंध लगाता है जो सिंगल-पास कंपाइलर को यह जांचने में सक्षम बनाता है कि समांतर प्रक्रियाएं अलग-अलग हैं, भले ही प्रक्रियाएं वैश्विक चर के साथ प्रक्रियाओं का उपयोग करती हैं, समय-निर्भर त्रुटियों को समाप्त करती हैं। पास्कल में कई विशेषताएं अस्पष्ट या असुरक्षित थीं और सुपरपास्कल से हटा दी गई थीं, जैसे लेबल और <code>goto</code> बयान, संकेत और आगे की घोषणा।<ref name='Hansen1994' />
सुपरपास्कल इस मायने में ''सुरक्षित'' है कि इसे अपने कंपाइलर और [[रनटाइम सिस्टम|क्रम प्रणाली]] को अधिक से अधिक मामलों का पता लगाने में सक्षम बनाना चाहिए जिसमें लैंग्वेज की अवधारणाएं टूट जाती हैं और अर्थहीन परिणाम उत्पन्न करती हैं।<ref name='Hoare1974'>{{cite journal |title=प्रोग्रामिंग भाषा डिजाइन पर संकेत|journal=Computer System Reliability |year=1974 |first=C. A. R. |last=Hoare |author-link=Tony Hoare |pages=505–534 }}</ref> सुपरपास्कल चर के उपयोग पर प्रतिबंध लगाता है जो सिंगल-पास संकलक को यह जांचने में सक्षम बनाता है कि समांतर प्रक्रियाएं अलग-अलग हैं, भले ही प्रक्रियाएं वैश्विक चर के साथ प्रक्रियाओं का उपयोग करती हैं, समय-निर्भर त्रुटियों को समाप्त करती हैं। पास्कल में कई विशेषताएं अस्पष्ट या असुरक्षित थीं और सुपरपास्कल से हटा दी गई थीं, जैसे लेबल और <code>goto</code> विवरण, संकेत और आगे की घोषणा।<ref name='Hansen1994' />


=== समानता ===
सुपरपास्कल की समानांतर विशेषताएं गतिशील प्रक्रिया सरणियों और पुनरावर्ती समानांतर प्रक्रियाओं की अतिरिक्त सामान्यता के साथ [[ओकैम (प्रोग्रामिंग भाषा)|ओकैम]]  2 का एक उपसमूह हैं।<ref name='Hansen2002' />


=== समानता ===
<code>parallel</code> विवरण यह दर्शाता है कि इसमें सम्मिलित बयानों की निश्चित संख्या को समानांतर में निष्पादित किया जाना चाहिए। उदाहरण के लिए<syntaxhighlight lang="plsql">
सुपरपास्कल की समानांतर विशेषताएं गतिशील प्रक्रिया सरणियों और पुनरावर्ती समानांतर प्रक्रियाओं की अतिरिक्त सामान्यता के साथ [[ओकैम (प्रोग्रामिंग भाषा)]] 2 का एक उपसमूह हैं।<ref name='Hansen2002' />
parallel
    source() |
    sink()
end


A <code>parallel</code> बयान दर्शाता है कि इसमें शामिल बयानों की निश्चित संख्या को समानांतर में निष्पादित किया जाना चाहिए। उदाहरण के लिए:
</syntaxhighlight><code>forall</code> विवरण प्रक्रियाओं की गतिशील संख्या द्वारा बयान के समानांतर निष्पादन को दर्शाता है, उदाहरण के लिए<syntaxhighlight>
<पूर्व>
समानांतर
    स्रोत () |
    डूबना()
अंत
</पूर्व>
<code>forall</code> बयान प्रक्रियाओं की एक गतिशील संख्या द्वारा एक बयान के समानांतर निष्पादन को दर्शाता है, उदाहरण के लिए:
<पूर्व>
forall i := 0 to 10 do
forall i := 0 to 10 do
     कुछ()
     something()
</पूर्व>
 
</syntaxhighlight>


==== चैनल और संचार ====
==== चैनल और संचार ====
समानांतर प्रक्रियाएं गतिशील रूप से बनाए गए चैनलों के माध्यम से टाइप किए गए संदेशों को भेजकर संचार करती हैं। चैनल अपने आप में वेरिएबल्स नहीं हैं, लेकिन चैनल संदर्भ के रूप में ज्ञात एक अद्वितीय मान द्वारा पहचाने जाते हैं, जो चैनल चर द्वारा आयोजित किए जाते हैं। एक चैनल घोषित किया जाता है, उदाहरण के लिए, घोषणा द्वारा
समानांतर प्रक्रियाएं गतिशील रूप से बनाए गए चैनलों के माध्यम से टाइप किए गए संदेशों को भेजकर संचार करती हैं। चैनल अपने आप में चर नहीं हैं, लेकिन ''चैनल संदर्भ'' के रूप में ज्ञात अद्वितीय मान द्वारा पहचाने जाते हैं, जो ''चैनल चर'' द्वारा आयोजित किए जाते हैं। चैनल घोषित किया जाता है, उदाहरण के लिए, घोषणा द्वारा
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
type channel = *(boolean, integer);
type channel = *(boolean, integer);
var c: channel;
var c: channel;
</syntaxhighlight>
</syntaxhighlight>
जो एक नए (मिश्रित) प्रकार के नाम वाले चैनल और इस प्रकार के एक चर को परिभाषित करता है जिसका नाम c है। एक मिश्रित प्रकार का चैनल केवल निर्दिष्ट प्रकारों को प्रसारित करने के लिए प्रतिबंधित है, इस मामले में बूलियन और पूर्णांक मान। चैनल सी द्वारा आरंभ किया गया है <code>open</code> कथन:
जो एक नए (मिश्रित) प्रकार के नाम वाले चैनल और इस प्रकार के चर को परिभाषित करता है जिसका नाम सी है। मिश्रित प्रकार का चैनल केवल निर्दिष्ट प्रकारों को प्रसारित करने के लिए प्रतिबंधित है, इस मामले में बूलियन और पूर्णांक मान। चैनल सी द्वारा आरंभ किया गया है<syntaxhighlight lang="pascal">
<पूर्व>
open(c)
खुला (सी)
 
</पूर्व>
</syntaxhighlight>संदेश संचार तब <code>send(channel, value)</code> और <code>receive(channel, variable)</code> के साथ हासिल किया जाता है <code>send</code> के लिए मान प्रदान करने वाला व्यंजक या चर , और <code>receive</code> करने में चर , दोनों पहले चैनल तर्क के समान प्रकार के होने चाहिए। निम्न उदाहरण इन कार्यों के उपयोग को प्रक्रिया में दिखाता है जो ''बाएं'' चैनल से मान प्राप्त करता है और इसे ''दाईं'' ओर आउटपुट करता है।
संदेश संचार तब के साथ हासिल किया जाता है <code>send(channel, value)</code> और <code>receive(channel, variable)</code> बयान। के लिए मान प्रदान करने वाला व्यंजक या चर <code>send</code>, और चर में <code>receive</code>, दोनों पहले चैनल तर्क के समान प्रकार के होने चाहिए। निम्न उदाहरण इन कार्यों के उपयोग को एक प्रक्रिया में दिखाता है जो बाएं चैनल से एक मान प्राप्त करता है और इसे दाईं ओर आउटपुट करता है।
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
var left, right: channel; a: number;
var left, right: channel; a: number;
Line 77: Line 71:
send(right, a)
send(right, a)
</syntaxhighlight>
</syntaxhighlight>
कार्य <code>send</code> और <code>receive</code> दोनों क्रमशः एकाधिक इनपुट और आउटपुट तर्क ले सकते हैं:
<code>send</code> और <code>receive</code> करने वाले कार्य दोनों क्रमशः कई इनपुट और आउटपुट तर्क ले सकते हैं:<syntaxhighlight>
<पूर्व>
send(channel, e1, e2,..., en);
भेजें (चैनल, ई1, ई2,..., एन);
receive(channel, v1, v2,..., vn)
प्राप्त करें (चैनल, v1, v2,..., vn)
</syntaxhighlight>निम्नलिखित [[रनटाइम (कार्यक्रम जीवनचक्र चरण)|रनटाइम]] संचार त्रुटियाँ हो सकती हैं:
</पूर्व>
* ''चैनल विवाद'' तब होता है जब दो समानांतर प्रक्रियाएं एक ही चैनल पर एक साथ भेजने या प्राप्त करने का प्रयास करती हैं।
 
* ''संदेश प्रकार त्रुटि'' तब होती है जब दो समानांतर प्रक्रियाएं एक ही चैनल के माध्यम से संचार करने का प्रयास करती हैं और आउटपुट अभिव्यक्ति और इनपुट चर विभिन्न प्रकार के होते हैं।
निम्नलिखित [[रनटाइम (कार्यक्रम जीवनचक्र चरण)]] संचार त्रुटियाँ हो सकती हैं:
* ''गतिरोध'' तब होता है जब कोई भेजने या प्राप्त करने का ऑपरेशन पूरा होने के लिए अनिश्चित काल तक प्रतीक्षा करता है।
* चैनल विवाद तब होता है जब दो समानांतर प्रक्रियाएं एक ही चैनल पर एक साथ भेजने या प्राप्त करने का प्रयास करती हैं।
* एक संदेश प्रकार की त्रुटि तब होती है जब दो समानांतर प्रक्रियाएं एक ही चैनल के माध्यम से संचार करने का प्रयास करती हैं और आउटपुट अभिव्यक्ति और इनपुट चर विभिन्न प्रकार के होते हैं।
* गतिरोध तब होता है जब कोई भेजने या प्राप्त करने का ऑपरेशन पूरा होने के लिए अनिश्चित काल तक प्रतीक्षा करता है।


==== समानांतर पुनरावर्तन ====
==== समानांतर पुनरावर्तन ====
{{Further|Recursion (computer science)}}
{{Further|पुनरावर्तन (कंप्यूटर विज्ञान)}}


पुनरावर्तन (कंप्यूटर विज्ञान) प्रक्रियाओं के साथ जोड़ा जा सकता है <code>parallel</code> और <code>forall</code> बयान समानांतर पुनरावर्ती प्रक्रियाओं को बनाने के लिए। निम्नलिखित उदाहरण दिखाता है कि कैसे प्रक्रियाओं की एक पाइपलाइन को एक का उपयोग करके पुनरावर्ती रूप से परिभाषित किया जा सकता है <code>parallel</code> कथन।
समानांतर पुनरावर्ती प्रक्रियाओं को बनाने के लिए पुनरावर्ती प्रक्रियाओं को  <code>parallel</code> और <code>forall</code> के साथ जोड़ा जा सकता है। निम्नलिखित उदाहरण दिखाता है कि <code>parallel</code> कथन का उपयोग करके कैसे प्रक्रियाओं की ''पाइपलाइन'' को पुनरावर्ती रूप से कैसे परिभाषित किया जा सकता है


<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
Line 108: Line 99:
end;
end;
</syntaxhighlight>
</syntaxhighlight>
एक अन्य उदाहरण एक प्रक्रिया वृक्ष की पुनरावर्ती परिभाषा है:
अन्य उदाहरण प्रक्रिया ''ट्री'' की पुनरावर्ती परिभाषा है:


<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
Line 125: Line 116:
   else leaf(bottom)
   else leaf(bottom)
</syntaxhighlight>
</syntaxhighlight>


== हस्तक्षेप नियंत्रण ==
== हस्तक्षेप नियंत्रण ==
समवर्ती प्रोग्रामिंग का सबसे कठिन पहलू अप्रत्याशित या गैर-पुनरुत्पादन योग्य व्यवहार है जो समय-निर्भर त्रुटियों के कारण होता है। समय-निर्भर त्रुटियाँ चर अद्यतनों या चैनल विरोधों के कारण समानांतर प्रक्रियाओं के बीच हस्तक्षेप के कारण होती हैं। यदि प्रक्रियाएं एक चर साझा करती हैं, तो इसे अप्रत्याशित समय पर अपडेट करें, कार्यक्रम का परिणामी व्यवहार समय-निर्भर है। इसी तरह, यदि दो प्रक्रियाएं एक साथ साझा चैनल पर भेजने या प्राप्त करने का प्रयास करती हैं, तो परिणामी प्रभाव समय-निर्भर होता है।
समवर्ती प्रोग्रामिंग का सबसे कठिन पहलू ''अप्रत्याशित या गैर-पुनरुत्पादन योग्य'' व्यवहार है जो समय-निर्भर त्रुटियों के कारण होता है। ''समय-निर्भर'' त्रुटियाँ चर अद्यतनों या चैनल विरोधों के कारण समानांतर प्रक्रियाओं के बीच हस्तक्षेप के कारण होती हैं। यदि प्रक्रियाएं चर साझा करती हैं, तो इसे अप्रत्याशित समय पर अपडेट करें, कार्यक्रम का परिणामी व्यवहार समय-निर्भर है। इसी तरह, यदि दो प्रक्रियाएं एक साथ साझा चैनल पर भेजने या प्राप्त करने का प्रयास करती हैं, तो परिणामी प्रभाव समय-निर्भर होता है।


सुपरपास्कल समय-निर्भर त्रुटियों को कम करने या समाप्त करने के लिए चर और संचार के उपयोग पर कुछ प्रतिबंध लागू करता है। चर के साथ, एक सरल नियम की आवश्यकता होती है: समानांतर प्रक्रियाएं केवल चर के असंबद्ध सेट को अद्यतन कर सकती हैं।<ref name="Hansen1993" />उदाहरण के लिए, ए में <code>parallel</code> बयान एक लक्ष्य चर को एक से अधिक प्रक्रियाओं द्वारा अद्यतन नहीं किया जा सकता है, लेकिन एक अभिव्यक्ति चर (जिसे अद्यतन नहीं किया जा सकता है) का उपयोग कई प्रक्रियाओं द्वारा किया जा सकता है। कुछ परिस्थितियों में, जब एक चर जैसे कि एक सरणी कई समानांतर प्रक्रियाओं का लक्ष्य है, और प्रोग्रामर जानता है कि इसका तत्व-वार उपयोग असंबद्ध है, तो विसंबद्धता प्रतिबंध को पूर्ववर्ती के साथ ओवरराइड किया जा सकता है <code>[sic]</code> कथन।
सुपरपास्कल समय-निर्भर त्रुटियों को कम करने या समाप्त करने के लिए चर और संचार के उपयोग पर कुछ प्रतिबंध लागू करता है। चर के साथ, एक सरल नियम की आवश्यकता होती है: समानांतर प्रक्रियाएं केवल चर के असंबद्ध सेट को अद्यतन कर सकती हैं।<ref name="Hansen1993" /> उदाहरण के लिए, <code>parallel</code> बयान में लक्ष्य चर को एक से अधिक प्रक्रियाओं द्वारा अद्यतन नहीं किया जा सकता है, लेकिन एक अभिव्यक्ति चर (जिसे अद्यतन नहीं किया जा सकता है) का उपयोग कई प्रक्रियाओं द्वारा किया जा सकता है। कुछ परिस्थितियों में, जब एक चर जैसे कि एक सरणी कई समानांतर प्रक्रियाओं का लक्ष्य होता है, और प्रोग्रामर जानता है कि इसका तत्व-वार उपयोग असंबद्ध है, तो विसंबद्धता प्रतिबंध को पूर्ववर्ती <code>[sic]</code> कथन से ओवरराइड किया जा सकता है ।


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


निम्नलिखित एक पूर्ण सुपरपास्कल प्रोग्राम का एक उदाहरण है, जो 100 नोड्स के साथ पाइपलाइन संचार संरचना का निर्माण करता है। एक मास्टर नोड पहले नोड को एक पूर्णांक टोकन भेजता है, फिर इसे पाइपलाइन के साथ पारित किया जाता है और प्रत्येक चरण में वृद्धि की जाती है, और अंत में मास्टर नोड द्वारा प्राप्त किया जाता है और प्रिंट आउट किया जाता है।
निम्नलिखित पूर्ण सुपरपास्कल प्रोग्राम का उदाहरण है, जो 100 नोड्स के साथ पाइपलाइन संचार संरचना का निर्माण करता है। मास्टर नोड पहले नोड को एक पूर्णांक प्रतीक भेजता है, फिर इसे पाइपलाइन के साथ पारित किया जाता है और प्रत्येक चरण में वृद्धि की जाती है, और अंत में मास्टर नोड द्वारा प्राप्त किया जाता है और प्रिंट आउट किया जाता है।
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
program pipeline;
program pipeline;
Line 181: Line 171:
</syntaxhighlight>
</syntaxhighlight>


== कार्यान्वयन ==
सुपरपास्कल सॉफ्टवेयर को ब्रिन्च हैनसेन आर्काइव से स्वतंत्र रूप से एक्सेस किया जा सकता है।<ref>{{Cite web |url=http://brinch-hansen.net/ |title=प्रति ब्रिन्च हैनसेन आर्काइव|last=Hayden |first=C.C. |date=2008-06-11 |access-date=2020-03-03}}</ref> इसमें एक संकलक और अनुवादक होता है, जो दोनों सामान्य, अनुक्रमिक पास्कल (आईएसओ स्तर 1 मानक पास्कल) में लिखे जाते हैं। यह जीएनयू पास्कल कंपाइलर और [[ फ़्री पास्कल ]] कंपाइलर (2.7.1+) के नए संस्करणों द्वारा  <code>-Miso</code>  स्विच के साथ कोड में निम्नलिखित संबंधित छोटे संशोधनों के साथ समर्थित है।


== कार्यान्वयन ==
जीपीसी के लिए, फाइल <code>interpret.p</code> गैर-मानक <code>clock</code> कार्य (पंक्ति 1786) का उपयोग करता है , जिसका उपयोग सिस्टम समय प्राप्त करने के लिए किया जाता है। इसके बजाय, विस्तारित पास्कल <code>getTimeStamp</code> कार्य का उपयोग किया जा सकता है (जो जीएनयू पास्कल कंपाइलर द्वारा समर्थित है), प्रकार <code>TimeStamp</code> के एक चर घोषित करके , वर्तमान समय के साथ <code>getTimeStamp</code>  का उपयोग करके और <code>TimeStamp</code>  के <code>Second</code> क्षेत्र को चर <code>t</code> को असाइन करके।
सुपरपास्कल सॉफ्टवेयर को ब्रिन्च हैनसेन आर्काइव से स्वतंत्र रूप से एक्सेस किया जा सकता है।<ref>{{Cite web |url=http://brinch-hansen.net/ |title=प्रति ब्रिन्च हैनसेन आर्काइव|last=Hayden |first=C.C. |date=2008-06-11 |access-date=2020-03-03}}</ref> इसमें एक संकलक और दुभाषिया होता है, जो दोनों सामान्य, अनुक्रमिक पास्कल (आईएसओ स्तर 1 मानक पास्कल) में लिखे जाते हैं। यह जीएनयू पास्कल कंपाइलर और [[ फ़्री पास्कल ]] कंपाइलर (2.7.1+) के नए संस्करणों द्वारा समर्थित है <code>-Miso</code> कोड में निम्नलिखित संबंधित छोटे संशोधनों के साथ स्विच करें।


जीपीसी के लिए, file <code>interpret.p</code> गैर मानक का उपयोग करता है <code>clock</code> फ़ंक्शन (पंक्ति 1786), जिसका उपयोग सिस्टम समय प्राप्त करने के लिए किया जाता है। इसके बजाय, विस्तारित पास्कल <code>getTimeStamp</code> फ़ंक्शन का उपयोग किया जा सकता है (जो जीएनयू पास्कल कंपाइलर द्वारा समर्थित है), प्रकार के एक चर घोषित करके <code>TimeStamp</code>, वर्तमान समय के उपयोग के साथ इसे सेट करना <code>getTimeStamp</code> और आवंटित करना <code>Second</code> का क्षेत्र <code>TimeStamp</code> चर के लिए <code>t</code>.
[[64-बिट]] ऑपरेटिंग सिस्टम पर जीपीसी के संबंध में, जीएनयू पास्कल कंपाइलर को स्रोत कोड से संकलित और स्थापित किया जाना चाहिए।<ref>{{Cite web |url=http://www.gnu-pascal.de/gpc/Compiling-GPC.html#Compiling-GPC |title=4.3 Compiling GPC |date=1996–2005 |website=GNU Pascal |access-date=2020-03-03}}</ref>


[[64-बिट]] ऑपरेटिंग सिस्टम पर GPC के संबंध में; जीएनयू पास्कल कंपाइलर को स्रोत कोड से संकलित और स्थापित किया जाना चाहिए।<ref>{{Cite web |url=http://www.gnu-pascal.de/gpc/Compiling-GPC.html#Compiling-GPC |title=4.3 Compiling GPC |date=1996–2005 |website=GNU Pascal |access-date=2020-03-03}}</ref>
नि: शुल्क पास्कल को उपरोक्त "घड़ी" समस्या के समाधान की भी आवश्यकता है (विंडोज़ पर, "घड़ी" के नाम के साथ बाहरी के रूप में gettickcount घोषित करें)। इसके अलावा, स्रोत कोड में गैर-मानक के रूप में चिह्नित रीसेट/पुनर्लेखन को असाइन/रीसेट (या पुनर्लेखन) जोड़े में बदला जाना चाहिए। (जीपीसी शायद इस पर केवल त्रुटियां हैं यदि आप सख्त झंडे सक्षम करते हैं), और सी प्रीप्रोसेसर कमांड #सम्मिलित 'xx' को {$सम्मिलित 'xx'} में बदला जाना चाहिए।<br>
नि: शुल्क पास्कल को उपरोक्त घड़ी की समस्या के समाधान की भी आवश्यकता है (विंडोज़ पर, घड़ी के नाम के साथ बाहरी के रूप में gettickcount घोषित करें)। इसके अलावा, स्रोत कोड में गैर-मानक के रूप में चिह्नित रीसेट/पुनर्लेखन को असाइन/रीसेट (या पुनर्लेखन) जोड़े में बदला जाना चाहिए। (जीपीसी शायद इस पर केवल त्रुटियां हैं यदि आप सख्त झंडे सक्षम करते हैं), और सी प्रीप्रोसेसर कमांड #include 'xx' को {$include 'xx'} में बदला जाना चाहिए।<br>
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
{ Time code for readtime in Freepascal on unix systems }
{ Time code for readtime in Freepascal on unix systems }
Line 210: Line 200:
* {{GitHub|octonion/superpascal}}, Christopher Long's modified version of the original SuperPascal implementation; compiles and runs under modern Free Pascal; program execution is faster than Perl 5 or 6, nearly as fast as Python 3
* {{GitHub|octonion/superpascal}}, Christopher Long's modified version of the original SuperPascal implementation; compiles and runs under modern Free Pascal; program execution is faster than Perl 5 or 6, nearly as fast as Python 3


{{Pascal programming language family}}
[[Category:1993 में बनाई गई प्रोग्रामिंग लैंग्वेज]]
[[Category: समवर्ती प्रोग्रामिंग भाषाएँ]] [[Category: प्रक्रियात्मक प्रोग्रामिंग भाषाएँ]] [[Category: पास्कल प्रोग्रामिंग भाषा परिवार]] [[Category: 1993 में बनाई गई प्रोग्रामिंग लैंग्वेज]]  
[[Category:All articles lacking reliable references]]
 
[[Category:Articles lacking reliable references from June 2018]]
 
[[Category:Articles with hatnote templates targeting a nonexistent page]]
 
[[Category:Collapse templates]]
[[Category: Machine Translated Page]]
[[Category:Created On 26/05/2023]]
[[Category:Created On 26/05/2023]]
[[Category:Lua-based templates]]
[[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:Pages with syntax highlighting errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia metatemplates]]
[[Category:पास्कल प्रोग्रामिंग भाषा परिवार]]
[[Category:प्रक्रियात्मक प्रोग्रामिंग भाषाएँ]]
[[Category:समवर्ती प्रोग्रामिंग भाषाएँ]]

Latest revision as of 13:07, 26 October 2023

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

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

इतिहास और विकास

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

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

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

इसके बाद समानांतर प्रकाशन लैंग्वेज के लिए निम्नलिखित आवश्यकताओं का नेतृत्व किया गया

  • लैंग्वेज को नियतात्मक समानता और संदेश संचार के साथ व्यापक रूप से इस्तेमाल की जाने वाली मानक लैंग्वेज का विस्तार करना चाहिए। विस्तार मानक लैंग्वेज की भावना में होना चाहिए।
  • लैंग्वेज को संचार चैनलों से जुड़े समांतर प्रक्रियाओं के मनमाना विन्यास प्रोग्राम करना संभव बनाना चाहिए। इन विन्यासों को पुनरावृत्ति या पुनरावर्ती रूप से परिभाषित किया जा सकता है और गतिशील रूप से बनाया जा सकता है।
  • लैंग्वेज को सिंगल-पास संकलक को यह जांचने में सक्षम बनाना चाहिए कि समांतर प्रक्रियाएं समय-निर्भर तरीके से हस्तक्षेप नहीं करती हैं।

सुविधाएँ

सुपरपास्कल के डिजाइन में प्रमुख विचार समानता के लिए अमूर्त अवधारणाओं के साथ सुरक्षित प्रोग्रामिंग प्रदान करना था।[6][7]

सुरक्षा

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

समानता

सुपरपास्कल की समानांतर विशेषताएं गतिशील प्रक्रिया सरणियों और पुनरावर्ती समानांतर प्रक्रियाओं की अतिरिक्त सामान्यता के साथ ओकैम 2 का एक उपसमूह हैं।[7]

parallel विवरण यह दर्शाता है कि इसमें सम्मिलित बयानों की निश्चित संख्या को समानांतर में निष्पादित किया जाना चाहिए। उदाहरण के लिए

parallel
    source() |
    sink()
end

forall विवरण प्रक्रियाओं की गतिशील संख्या द्वारा बयान के समानांतर निष्पादन को दर्शाता है, उदाहरण के लिए

forall i := 0 to 10 do
    something()

चैनल और संचार

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

type channel = *(boolean, integer);
var c: channel;

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

open(c)

संदेश संचार तब send(channel, value) और receive(channel, variable) के साथ हासिल किया जाता है send के लिए मान प्रदान करने वाला व्यंजक या चर , और receive करने में चर , दोनों पहले चैनल तर्क के समान प्रकार के होने चाहिए। निम्न उदाहरण इन कार्यों के उपयोग को प्रक्रिया में दिखाता है जो बाएं चैनल से मान प्राप्त करता है और इसे दाईं ओर आउटपुट करता है।

var left, right: channel; a: number;
receive(left, a);
send(right, a)

send और receive करने वाले कार्य दोनों क्रमशः कई इनपुट और आउटपुट तर्क ले सकते हैं:

send(channel, e1, e2,..., en);
receive(channel, v1, v2,..., vn)

निम्नलिखित रनटाइम संचार त्रुटियाँ हो सकती हैं:

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

समानांतर पुनरावर्तन

समानांतर पुनरावर्ती प्रक्रियाओं को बनाने के लिए पुनरावर्ती प्रक्रियाओं को parallel और forall के साथ जोड़ा जा सकता है। निम्नलिखित उदाहरण दिखाता है कि parallel कथन का उपयोग करके कैसे प्रक्रियाओं की पाइपलाइन को पुनरावर्ती रूप से कैसे परिभाषित किया जा सकता है ।

procedure pipeline(min, max: integer; left, right: channel);
var middle: channel;
begin
  if min < max then
    begin
      open(middle);
      parallel
        node(min, left, middle) |
        pipeline(min + 1, max, middle, right)
      end
    end
  else node(min, left, right)
end;

अन्य उदाहरण प्रक्रिया ट्री की पुनरावर्ती परिभाषा है:

procedure tree(depth: integer, bottom: channel);
var left, right: channel;
begin
  if depth > 0 then
    begin
      open(left, right);
      parallel
        tree(depth - 1, left) |
        tree(depth - 1, right) |
        root(bottom, left, right)
      end
    end
  else leaf(bottom)

हस्तक्षेप नियंत्रण

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

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

संरचना और वाक्य रचना

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

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

program pipeline;

const
    len = 100;

type
    channel = *(integer);

var
    left, right: channel;
    value: integer;

procedure node(i: integer; left, right: channel);
var value: integer;
begin
    receive(left, value);
    send(right, value+1)
end;

procedure create(left, right: channel);
type row = array [0..len] of channel;
var c: row; i: integer;
begin
    c[0] := left;
    c[len] := right;
    for i := 1 to len-1 do
        open(c[i]);
    forall i := 1 to len do
        node(i, c[i-1], c[i])
end;

begin
    open(left, right);

    parallel
        send(left, 0) |
        create(left, right) |
        receive(right, value)
    end;

    writeln('The resulting value is ', value)
end.

कार्यान्वयन

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

जीपीसी के लिए, फाइल interpret.p गैर-मानक clock कार्य (पंक्ति 1786) का उपयोग करता है , जिसका उपयोग सिस्टम समय प्राप्त करने के लिए किया जाता है। इसके बजाय, विस्तारित पास्कल getTimeStamp कार्य का उपयोग किया जा सकता है (जो जीएनयू पास्कल कंपाइलर द्वारा समर्थित है), प्रकार TimeStamp के एक चर घोषित करके , वर्तमान समय के साथ getTimeStamp का उपयोग करके और TimeStamp के Second क्षेत्र को चर t को असाइन करके।

64-बिट ऑपरेटिंग सिस्टम पर जीपीसी के संबंध में, जीएनयू पास्कल कंपाइलर को स्रोत कोड से संकलित और स्थापित किया जाना चाहिए।[10]

नि: शुल्क पास्कल को उपरोक्त "घड़ी" समस्या के समाधान की भी आवश्यकता है (विंडोज़ पर, "घड़ी" के नाम के साथ बाहरी के रूप में gettickcount घोषित करें)। इसके अलावा, स्रोत कोड में गैर-मानक के रूप में चिह्नित रीसेट/पुनर्लेखन को असाइन/रीसेट (या पुनर्लेखन) जोड़े में बदला जाना चाहिए। (जीपीसी शायद इस पर केवल त्रुटियां हैं यदि आप सख्त झंडे सक्षम करते हैं), और सी प्रीप्रोसेसर कमांड #सम्मिलित 'xx' को {$सम्मिलित 'xx'} में बदला जाना चाहिए।

{ Time code for readtime in Freepascal on unix systems }
Function  FpTime(var tloc : integer): integer; external name 'FPC_SYSC_TIME';

procedure readtime(
 var t:  integer);
begin
  { A nonstandard function reads
    the processor time in ms }
  t:=fptime(t);
end;


संदर्भ

  1. 1.0 1.1 Hansen, Per Brinch (1993), SuperPascal: a publication language for parallel scientific computing
  2. Welsh, Jim (1980). संरचित सिस्टम प्रोग्रामिंग. Upper Saddle River, NJ, USA: Prentice-Hall. ISBN 0-13-854562-6.
  3. Tennent, R. D. (1981). प्रोग्रामिंग भाषाओं के सिद्धांत. Upper Saddle River, NJ, USA: Prentice-Hall. ISBN 0-13-709873-1.
  4. Hansen, Brinch (1977). समवर्ती कार्यक्रमों की वास्तुकला. Prentice-Hall. ISBN 978-0130446282.
  5. Hansen, Brinch (May 1993), "Model programs for computational science: A programming methodology for multicomputers", Concurrency: Practice and Experience, pp. 407–423
  6. 6.0 6.1 Hansen, Brinch (1994). "प्रोग्रामिंग भाषा सुपरपास्कल". Software: Practice and Experience. 24, 5: 399–406.
  7. 7.0 7.1 Hansen, Brinch (1977). समवर्ती प्रोग्रामिंग का आविष्कार. New York: Springer-Verlag. ISBN 0-387-95401-5.
  8. Hoare, C. A. R. (1974). "प्रोग्रामिंग भाषा डिजाइन पर संकेत". Computer System Reliability: 505–534.
  9. Hayden, C.C. (2008-06-11). "प्रति ब्रिन्च हैनसेन आर्काइव". Retrieved 2020-03-03.
  10. "4.3 Compiling GPC". GNU Pascal. 1996–2005. Retrieved 2020-03-03.


बाहरी संबंध

  • Official website, Brinch Hansen Archive, a set of his papers and the SuperPascal software which can be downloaded in a compressed file; contains the full language specification and useful documentation.
  • superpascal on GitHub, Christopher Long's modified version of the original SuperPascal implementation; compiles and runs under modern Free Pascal; program execution is faster than Perl 5 or 6, nearly as fast as Python 3