सुपरपास्कल: Difference between revisions
(Created page with "{{Short description|Programming language}} {{primary sources|date=June 2018}} {{Infobox programming language |name = SuperPascal |logo = |paradigm = Concurrent computing|con...") |
No edit summary |
||
(20 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{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> यह ''प्रकाशन लैंग्वेज'' के रूप में डिजाइन किया गया था समानांतर प्रोग्रामिंग में अवधारणाओं की स्पष्ट और संक्षिप्त अभिव्यक्ति को सक्षम करने के लिए विचार उपकरण। यह कार्यान्वयन लैंग्वेज के विपरीत है जो अधिकांशतः मशीन विवरण और ऐतिहासिक सम्मेलनों से जटिल होती हैं। यह समानांतर प्रकाशन लैंग्वेज के समय की आवश्यकता को पूरा करने के लिए बनाया गया था। यकीनन, आज कुछ लैंग्वेज अभिव्यंजक और संक्षिप्त हैं जिनका उपयोग विचार उपकरण के रूप में किया जा सकता है। | ||
== इतिहास और विकास == | == इतिहास और विकास == | ||
सुपरपास्कल [[निकोलस विर्थ]] की अनुक्रमिक | सुपरपास्कल [[निकोलस विर्थ|निक्लॉस विर्थ]] की अनुक्रमिक लैंग्वेज [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल]] पर आधारित है, इसे सुरक्षित और कुशल संगामिति के लिए सुविधाओं के साथ विस्तारित किया गया है। 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> इस प्रयोग ने उन्हें वैज्ञानिक समांतर कंप्यूटिंग के भविष्य के बारे में निम्नलिखित निष्कर्ष निकालने की अनुमति दी | ||
* भविष्य के समानांतर कंप्यूटर सामान्य-उद्देश्य वाले होंगे, जिससे प्रोग्रामर समस्या-उन्मुख प्रक्रिया विन्यास के संदर्भ में सोच सकेंगे। यह | * भविष्य के समानांतर कंप्यूटर ''सामान्य-उद्देश्य'' वाले होंगे, जिससे प्रोग्रामर ''समस्या-उन्मुख प्रक्रिया'' विन्यास के संदर्भ में सोच सकेंगे। यह [[ 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> | ||
=== सुरक्षा === | === सुरक्षा === | ||
{{Further| | {{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' /> | ||
=== समानता === | |||
सुपरपास्कल की समानांतर विशेषताएं गतिशील प्रक्रिया सरणियों और पुनरावर्ती समानांतर प्रक्रियाओं की अतिरिक्त सामान्यता के साथ [[ओकैम (प्रोग्रामिंग भाषा)|ओकैम]] 2 का एक उपसमूह हैं।<ref name='Hansen2002' /> | |||
<code>parallel</code> विवरण यह दर्शाता है कि इसमें सम्मिलित बयानों की निश्चित संख्या को समानांतर में निष्पादित किया जाना चाहिए। उदाहरण के लिए<syntaxhighlight lang="plsql"> | |||
parallel | |||
source() | | |||
sink() | |||
end | |||
</syntaxhighlight><code>forall</code> विवरण प्रक्रियाओं की गतिशील संख्या द्वारा बयान के समानांतर निष्पादन को दर्शाता है, उदाहरण के लिए<syntaxhighlight> | |||
< | |||
forall i := 0 to 10 do | forall i := 0 to 10 do | ||
something() | |||
</ | |||
</syntaxhighlight> | |||
==== चैनल और संचार ==== | ==== चैनल और संचार ==== | ||
समानांतर प्रक्रियाएं गतिशील रूप से बनाए गए चैनलों के माध्यम से टाइप किए गए संदेशों को भेजकर संचार करती हैं। चैनल अपने आप में | समानांतर प्रक्रियाएं गतिशील रूप से बनाए गए चैनलों के माध्यम से टाइप किए गए संदेशों को भेजकर संचार करती हैं। चैनल अपने आप में चर नहीं हैं, लेकिन ''चैनल संदर्भ'' के रूप में ज्ञात अद्वितीय मान द्वारा पहचाने जाते हैं, जो ''चैनल चर'' द्वारा आयोजित किए जाते हैं। चैनल घोषित किया जाता है, उदाहरण के लिए, घोषणा द्वारा | ||
<syntaxhighlight lang="pascal"> | |||
type channel = *(boolean, integer); | type channel = *(boolean, integer); | ||
var c: channel; | var c: channel; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
जो एक नए (मिश्रित) प्रकार के नाम वाले चैनल और इस प्रकार के | जो एक नए (मिश्रित) प्रकार के नाम वाले चैनल और इस प्रकार के चर को परिभाषित करता है जिसका नाम सी है। मिश्रित प्रकार का चैनल केवल निर्दिष्ट प्रकारों को प्रसारित करने के लिए प्रतिबंधित है, इस मामले में बूलियन और पूर्णांक मान। चैनल सी द्वारा आरंभ किया गया है<syntaxhighlight lang="pascal"> | ||
open(c) | |||
</ | </syntaxhighlight>संदेश संचार तब <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> करने वाले कार्य दोनों क्रमशः कई इनपुट और आउटपुट तर्क ले सकते हैं:<syntaxhighlight> | |||
< | send(channel, e1, e2,..., en); | ||
receive(channel, v1, v2,..., vn) | |||
</syntaxhighlight>निम्नलिखित [[रनटाइम (कार्यक्रम जीवनचक्र चरण)|रनटाइम]] संचार त्रुटियाँ हो सकती हैं: | |||
</ | * ''चैनल विवाद'' तब होता है जब दो समानांतर प्रक्रियाएं एक ही चैनल पर एक साथ भेजने या प्राप्त करने का प्रयास करती हैं। | ||
* ''संदेश प्रकार त्रुटि'' तब होती है जब दो समानांतर प्रक्रियाएं एक ही चैनल के माध्यम से संचार करने का प्रयास करती हैं और आउटपुट अभिव्यक्ति और इनपुट चर विभिन्न प्रकार के होते हैं। | |||
निम्नलिखित [[रनटाइम (कार्यक्रम जीवनचक्र चरण)]] संचार त्रुटियाँ हो सकती हैं: | * ''गतिरोध'' तब होता है जब कोई भेजने या प्राप्त करने का ऑपरेशन पूरा होने के लिए अनिश्चित काल तक प्रतीक्षा करता है। | ||
* चैनल विवाद तब होता है जब दो समानांतर प्रक्रियाएं एक ही चैनल पर एक साथ भेजने या प्राप्त करने का प्रयास करती हैं। | |||
* | |||
* गतिरोध तब होता है जब कोई भेजने या प्राप्त करने का ऑपरेशन पूरा होने के लिए अनिश्चित काल तक प्रतीक्षा करता है। | |||
==== समानांतर पुनरावर्तन ==== | ==== समानांतर पुनरावर्तन ==== | ||
{{Further| | {{Further|पुनरावर्तन (कंप्यूटर विज्ञान)}} | ||
समानांतर पुनरावर्ती प्रक्रियाओं को बनाने के लिए पुनरावर्ती प्रक्रियाओं को <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" />उदाहरण के लिए, | सुपरपास्कल समय-निर्भर त्रुटियों को कम करने या समाप्त करने के लिए चर और संचार के उपयोग पर कुछ प्रतिबंध लागू करता है। चर के साथ, एक सरल नियम की आवश्यकता होती है: समानांतर प्रक्रियाएं केवल चर के असंबद्ध सेट को अद्यतन कर सकती हैं।<ref name="Hansen1993" /> उदाहरण के लिए, <code>parallel</code> बयान में लक्ष्य चर को एक से अधिक प्रक्रियाओं द्वारा अद्यतन नहीं किया जा सकता है, लेकिन एक अभिव्यक्ति चर (जिसे अद्यतन नहीं किया जा सकता है) का उपयोग कई प्रक्रियाओं द्वारा किया जा सकता है। कुछ परिस्थितियों में, जब एक चर जैसे कि एक सरणी कई समानांतर प्रक्रियाओं का लक्ष्य होता है, और प्रोग्रामर जानता है कि इसका तत्व-वार उपयोग असंबद्ध है, तो विसंबद्धता प्रतिबंध को पूर्ववर्ती <code>[sic]</code> कथन से ओवरराइड किया जा सकता है । | ||
== संरचना और वाक्य रचना == | == संरचना और वाक्य रचना == | ||
सुपरपास्कल | सुपरपास्कल [[ब्लॉक (प्रोग्रामिंग)|ब्लॉक]] संरचित लैंग्वेज है, जिसमें पास्कल के समान मूल सिंटैक्स है। प्रोग्राम में ''हेडर, वैश्विक चर परिभाषाएँ, कार्य या प्रक्रिया'' परिभाषाएँ और ''मुख्य'' प्रक्रिया होती है। कार्यों और प्रक्रियाओं में ''ब्लॉक'' होते हैं, जहां ब्लॉक स्टेटमेंट का एक सेट होता है। [[ सी (प्रोग्रामिंग भाषा) |सी]] या [[ जावा (प्रोग्रामिंग भाषा) |जावा]] जैसी लैंग्वेज के विपरीत, जहां उन्हें अर्धविरामों द्वारा ''अलग'' किया जाता है। | ||
निम्नलिखित | निम्नलिखित पूर्ण सुपरपास्कल प्रोग्राम का उदाहरण है, जो 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> को असाइन करके। | |||
जीपीसी के | [[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> | ||
नि: शुल्क पास्कल को उपरोक्त "घड़ी" समस्या के समाधान की भी आवश्यकता है (विंडोज़ पर, "घड़ी" के नाम के साथ बाहरी के रूप में gettickcount घोषित करें)। इसके अलावा, स्रोत कोड में गैर-मानक के रूप में चिह्नित रीसेट/पुनर्लेखन को असाइन/रीसेट (या पुनर्लेखन) जोड़े में बदला जाना चाहिए। (जीपीसी शायद इस पर केवल त्रुटियां हैं यदि आप सख्त झंडे सक्षम करते हैं), और सी प्रीप्रोसेसर कमांड #सम्मिलित 'xx' को {$सम्मिलित '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 | ||
[[Category:1993 में बनाई गई प्रोग्रामिंग लैंग्वेज]] | |||
[[Category: | [[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: | |||
[[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
Paradigm | concurrent, imperative, structured |
---|---|
परिवार | Wirth Pascal |
द्वारा डिज़ाइन किया गया | Per Brinch Hansen |
पहली प्रस्तुति | 1993 |
Stable release | 1
/ 1993 |
टाइपिंग अनुशासन | Strong |
वेबसाइट | brinch-hansen |
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.0 1.1 Hansen, Per Brinch (1993), SuperPascal: a publication language for parallel scientific computing
- ↑ Welsh, Jim (1980). संरचित सिस्टम प्रोग्रामिंग. Upper Saddle River, NJ, USA: Prentice-Hall. ISBN 0-13-854562-6.
- ↑ Tennent, R. D. (1981). प्रोग्रामिंग भाषाओं के सिद्धांत. Upper Saddle River, NJ, USA: Prentice-Hall. ISBN 0-13-709873-1.
- ↑ Hansen, Brinch (1977). समवर्ती कार्यक्रमों की वास्तुकला. Prentice-Hall. ISBN 978-0130446282.
- ↑ Hansen, Brinch (May 1993), "Model programs for computational science: A programming methodology for multicomputers", Concurrency: Practice and Experience, pp. 407–423
- ↑ 6.0 6.1 Hansen, Brinch (1994). "प्रोग्रामिंग भाषा सुपरपास्कल". Software: Practice and Experience. 24, 5: 399–406.
- ↑ 7.0 7.1 Hansen, Brinch (1977). समवर्ती प्रोग्रामिंग का आविष्कार. New York: Springer-Verlag. ISBN 0-387-95401-5.
- ↑ Hoare, C. A. R. (1974). "प्रोग्रामिंग भाषा डिजाइन पर संकेत". Computer System Reliability: 505–534.
- ↑ Hayden, C.C. (2008-06-11). "प्रति ब्रिन्च हैनसेन आर्काइव". Retrieved 2020-03-03.
- ↑ "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