सुपरपास्कल

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

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

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


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

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

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

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

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

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

चैनल और संचार
समानांतर प्रक्रियाएं गतिशील रूप से बनाए गए चैनलों के माध्यम से टाइप किए गए संदेशों को भेजकर संचार करती हैं। चैनल अपने आप में वेरिएबल्स नहीं हैं, लेकिन चैनल संदर्भ के रूप में ज्ञात एक अद्वितीय मान द्वारा पहचाने जाते हैं, जो चैनल चर द्वारा आयोजित किए जाते हैं। एक चैनल घोषित किया जाता है, उदाहरण के लिए, घोषणा द्वारा जो एक नए (मिश्रित) प्रकार के नाम वाले चैनल और इस प्रकार के एक चर को परिभाषित करता है जिसका नाम c है। एक मिश्रित प्रकार का चैनल केवल निर्दिष्ट प्रकारों को प्रसारित करने के लिए प्रतिबंधित है, इस मामले में बूलियन और पूर्णांक मान। चैनल सी द्वारा आरंभ किया गया है  कथन:  खुला (सी)  संदेश संचार तब के साथ हासिल किया जाता है  और   बयान। के लिए मान प्रदान करने वाला व्यंजक या चर , और चर में  , दोनों पहले चैनल तर्क के समान प्रकार के होने चाहिए। निम्न उदाहरण इन कार्यों के उपयोग को एक प्रक्रिया में दिखाता है जो बाएं चैनल से एक मान प्राप्त करता है और इसे दाईं ओर आउटपुट करता है। कार्य  और   दोनों क्रमशः एकाधिक इनपुट और आउटपुट तर्क ले सकते हैं:  भेजें (चैनल, ई1, ई2,..., एन); प्राप्त करें (चैनल, v1, v2,..., vn) 

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

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

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

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

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

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

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

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

जीपीसी के लिए, file  गैर मानक का उपयोग करता है   फ़ंक्शन (पंक्ति 1786), जिसका उपयोग सिस्टम समय प्राप्त करने के लिए किया जाता है। इसके बजाय, विस्तारित पास्कल   फ़ंक्शन का उपयोग किया जा सकता है (जो जीएनयू पास्कल कंपाइलर द्वारा समर्थित है), प्रकार के एक चर घोषित करके , वर्तमान समय के उपयोग के साथ इसे सेट करना   और आवंटित करना   का क्षेत्र   चर के लिए.

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

बाहरी संबंध

 * , 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.
 * , 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