सुपरपास्कल: Difference between revisions
(→समानता) |
|||
Line 46: | Line 46: | ||
सुपरपास्कल की समानांतर विशेषताएं गतिशील प्रक्रिया सरणियों और पुनरावर्ती समानांतर प्रक्रियाओं की अतिरिक्त सामान्यता के साथ [[ओकैम (प्रोग्रामिंग भाषा)|ओकैम]] 2 का एक उपसमूह हैं।<ref name='Hansen2002' /> | सुपरपास्कल की समानांतर विशेषताएं गतिशील प्रक्रिया सरणियों और पुनरावर्ती समानांतर प्रक्रियाओं की अतिरिक्त सामान्यता के साथ [[ओकैम (प्रोग्रामिंग भाषा)|ओकैम]] 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> | ||
जो एक नए (मिश्रित) प्रकार के नाम वाले चैनल और इस प्रकार के | जो एक नए (मिश्रित) प्रकार के नाम वाले चैनल और इस प्रकार के चर को परिभाषित करता है जिसका नाम सी है। मिश्रित प्रकार का चैनल केवल निर्दिष्ट प्रकारों को प्रसारित करने के लिए प्रतिबंधित है, इस मामले में बूलियन और पूर्णांक मान। चैनल सी द्वारा आरंभ किया गया है <code>open</code> संदेश संचार तब के साथ हासिल किया जाता है <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 73: | Line 70: | ||
send(right, a) | send(right, a) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
कार्य <code>send</code> और <code>receive</code> दोनों क्रमशः एकाधिक इनपुट और आउटपुट तर्क ले सकते हैं: | '''कार्य''' <code>send</code> और <code>receive</code> दोनों क्रमशः एकाधिक इनपुट और आउटपुट तर्क ले सकते हैं: | ||
<पूर्व> | <पूर्व> | ||
भेजें (चैनल, ई1, ई2,..., एन) | भेजें (चैनल, ई1, ई2,..., एन) प्राप्त करें (चैनल, v1, v2,..., vn) | ||
प्राप्त करें (चैनल, v1, v2,..., vn) | |||
</पूर्व> | </पूर्व> | ||
Revision as of 20:36, 6 June 2023
This article relies excessively on references to primary sources. (June 2018) (Learn how and when to remove this template message) |
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
संदेश संचार तब के साथ हासिल किया जाता है send(channel, value)
और receive(channel, variable)
बयान। के लिए मान प्रदान करने वाला व्यंजक या चर send
, और चर में receive
, दोनों पहले चैनल तर्क के समान प्रकार के होने चाहिए। निम्न उदाहरण इन कार्यों के उपयोग को एक प्रक्रिया में दिखाता है जो बाएं चैनल से मान प्राप्त करता है और इसे दाईं ओर आउटपुट करता है।
var left, right: channel; a: number;
receive(left, a);
send(right, a)
कार्य send
और receive
दोनों क्रमशः एकाधिक इनपुट और आउटपुट तर्क ले सकते हैं:
<पूर्व>
भेजें (चैनल, ई1, ई2,..., एन) प्राप्त करें (चैनल, 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
कोड में निम्नलिखित संबंधित छोटे संशोधनों के साथ स्विच करें।
जीपीसी के लिए, file interpret.p
गैर मानक का उपयोग करता है clock
फ़ंक्शन (पंक्ति 1786), जिसका उपयोग सिस्टम समय प्राप्त करने के लिए किया जाता है। इसके बजाय, विस्तारित पास्कल getTimeStamp
फ़ंक्शन का उपयोग किया जा सकता है (जो जीएनयू पास्कल कंपाइलर द्वारा समर्थित है), प्रकार के एक चर घोषित करके TimeStamp
, वर्तमान समय के उपयोग के साथ इसे सेट करना getTimeStamp
और आवंटित करना Second
का क्षेत्र TimeStamp
चर के लिए t
.
64-बिट ऑपरेटिंग सिस्टम पर GPC के संबंध में; जीएनयू पास्कल कंपाइलर को स्रोत कोड से संकलित और स्थापित किया जाना चाहिए।[10]
नि: शुल्क पास्कल को उपरोक्त घड़ी की समस्या के समाधान की भी आवश्यकता है (विंडोज़ पर, घड़ी के नाम के साथ बाहरी के रूप में gettickcount घोषित करें)। इसके अलावा, स्रोत कोड में गैर-मानक के रूप में चिह्नित रीसेट/पुनर्लेखन को असाइन/रीसेट (या पुनर्लेखन) जोड़े में बदला जाना चाहिए। (जीपीसी शायद इस पर केवल त्रुटियां हैं यदि आप सख्त झंडे सक्षम करते हैं), और सी प्रीप्रोसेसर कमांड #include 'xx' को {$include '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