प्रभाव प्रणाली: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 5: Line 5:
प्रभाव प्रणाली प्रायः एक प्रकार की प्रणाली का विस्तार होती है। इस स्थिति में कभी-कभी "'''प्रकार और प्रभाव प्रणाली'''" शब्द का प्रयोग किया जाता है। प्रायः, किसी प्रकार के मान को उसके प्रभाव के साथ प्रकार के रूप में दर्शाया जाता है! प्रभाव, जहां प्रकार घटक और प्रभाव घटक दोनों कुछ क्षेत्रों (उदाहरण के लिए, परिवर्तनीय मेमोरी सेल का प्रकार उस मेमोरी क्षेत्र के लेबल द्वारा पैरामिट्रीकृत किया जाता है जिसमें सेल रहता है) का उल्लेख करते हैं। शब्द "बीजगणितीय प्रभाव" ''[[प्रकार प्रणाली]]'' से आता है।  
प्रभाव प्रणाली प्रायः एक प्रकार की प्रणाली का विस्तार होती है। इस स्थिति में कभी-कभी "'''प्रकार और प्रभाव प्रणाली'''" शब्द का प्रयोग किया जाता है। प्रायः, किसी प्रकार के मान को उसके प्रभाव के साथ प्रकार के रूप में दर्शाया जाता है! प्रभाव, जहां प्रकार घटक और प्रभाव घटक दोनों कुछ क्षेत्रों (उदाहरण के लिए, परिवर्तनीय मेमोरी सेल का प्रकार उस मेमोरी क्षेत्र के लेबल द्वारा पैरामिट्रीकृत किया जाता है जिसमें सेल रहता है) का उल्लेख करते हैं। शब्द "बीजगणितीय प्रभाव" ''[[प्रकार प्रणाली]]'' से आता है।  


प्रभाव प्रणालियों का उपयोग कुछ आंतरिक अशुद्ध परिभाषाओं की बाहरी [[शुद्ध कार्य|शुद्धता]] को सिद्ध करने के लिए किया जा सकता है- उदाहरण के लिए, यदि कोई फलन आंतरिक रूप से मेमोरी के क्षेत्र को आवंटित और संशोधित करता है, लेकिन फलन के प्रकार में क्षेत्र का उल्लेख नहीं है, तो संबंधित प्रभाव को फलन के प्रभाव से मिटाया जा सकता है।<ref>{{Cite book|last=Albin.|first=Turbak, Franklyn|url=http://worldcat.org/oclc/1261053520|title=प्रोग्रामिंग भाषाओं में डिज़ाइन अवधारणाएँ|date=2010|publisher=PHI Learning|isbn=978-81-203-3996-5|oclc=1261053520}}</ref>  
प्रभाव प्रणालियों का उपयोग कुछ आंतरिक अशुद्ध परिभाषाओं की बाहरी [[शुद्ध कार्य|शुद्धता]] को सिद्ध करने के लिए किया जा सकता है- उदाहरण के लिए, यदि कोई फ़ंक्शन आंतरिक रूप से मेमोरी के क्षेत्र को आवंटित और संशोधित करता है, लेकिन फ़ंक्शन के प्रकार में क्षेत्र का उल्लेख नहीं है, तो संबंधित प्रभाव को फ़ंक्शन के प्रभाव से मिटाया जा सकता है।<ref>{{Cite book|last=Albin.|first=Turbak, Franklyn|url=http://worldcat.org/oclc/1261053520|title=प्रोग्रामिंग भाषाओं में डिज़ाइन अवधारणाएँ|date=2010|publisher=PHI Learning|isbn=978-81-203-3996-5|oclc=1261053520}}</ref>  
== उदाहरण ==
== उदाहरण ==
व्यवहार के कुछ उदाहरण जिन्हें प्रभाव प्रणालियों द्वारा वर्णित किया जा सकता है उनमें सम्मिलित हैं-
व्यवहार के कुछ उदाहरण जिन्हें प्रभाव प्रणालियों द्वारा वर्णित किया जा सकता है उनमें सम्मिलित हैं-
* मेमोरी को पढ़ना, लिखना या आवंटित करना- प्रभाव का प्रकार पढ़ना, लिखना, आवंटित करना या मुक्त करना है, और क्षेत्र प्रोग्राम का वह बिंदु है जहां निर्धारण किया गया था (अर्थात, प्रत्येक प्रोग्राम बिंदु जहां आवंटन किया जाता है, उसे एक अद्वितीय लेबल सौंपा जाता है, और क्षेत्र की जानकारी डेटा प्रवाह के साथ स्थिर रूप से प्रसारित की जाती है)। मेमोरी के साथ काम करने वाले अधिकांश फलन वास्तव में क्षेत्र चर में बहुरूपी होंगे- उदाहरण के लिए, फलन जो मेमोरी में दो स्थानों की अदला-बदली करता है उसका प्रकार {{code|forall r1 r2, unit ! {{mset|read r1, read r2, write r1, write r2}}}} होगा।
* मेमोरी को पढ़ना, लिखना या आवंटित करना- प्रभाव का प्रकार पढ़ना, लिखना, आवंटित करना या मुक्त करना है, और क्षेत्र प्रोग्राम का वह बिंदु है जहां निर्धारण किया गया था (अर्थात, प्रत्येक प्रोग्राम बिंदु जहां आवंटन किया जाता है, उसे एक अद्वितीय लेबल सौंपा जाता है, और क्षेत्र की जानकारी डेटा प्रवाह के साथ स्थिर रूप से प्रसारित की जाती है)। मेमोरी के साथ काम करने वाले अधिकांश फ़ंक्शन वास्तव में क्षेत्र चर में बहुरूपी होंगे- उदाहरण के लिए, फ़ंक्शन जो मेमोरी में दो स्थानों की अदला-बदली करता है उसका प्रकार {{code|forall r1 r2, unit ! {{mset|read r1, read r2, write r1, write r2}}}} होगा।
*फ़ाइलों जैसे संसाधनों के साथ कार्य करना- उदाहरण के लिए, प्रभाव प्रकार विवृत, पढ़ा और संवृत हो सकता है, और फिर, क्षेत्र प्रोग्राम का वह बिंदु है जहां संसाधन विवृत है।  
*फ़ाइलों जैसे संसाधनों के साथ कार्य करना- उदाहरण के लिए, प्रभाव प्रकार विवृत, पढ़ा और संवृत हो सकता है, और फिर, क्षेत्र प्रोग्राम का वह बिंदु है जहां संसाधन विवृत है।  
*निरंतरता और लंबे विषयांतर के साथ नियंत्रण स्थानांतरण- प्रभाव का प्रकार [[ के लिए जाओ |''गोटो'']] हो सकता है (अर्थात कोड का भाग विषयांतर लगा सकता है) और [[से आते हैं|''कमफ्रॉम'']] (अर्थात कोड का भाग विषयांतर का लक्ष्य हो सकता है), और यह क्षेत्र प्रोग्राम के उस बिंदु को दर्शाता है जहां से या जिस पर विषयांतर लगाया जा सकता है।
*निरंतरता और लंबे विषयांतर के साथ नियंत्रण स्थानांतरण- प्रभाव का प्रकार [[ के लिए जाओ |''गोटो'']] हो सकता है (अर्थात कोड का भाग विषयांतर लगा सकता है) और [[से आते हैं|''कमफ्रॉम'']] (अर्थात कोड का भाग विषयांतर का लक्ष्य हो सकता है), और यह क्षेत्र प्रोग्राम के उस बिंदु को दर्शाता है जहां से या जिस पर विषयांतर लगाया जा सकता है।
Line 26: Line 26:
=== आंशिक समर्थन और प्रोटोटाइप ===
=== आंशिक समर्थन और प्रोटोटाइप ===
* स्काला 3.1 एक सांख्यिकीय रूप से टाइप की गई, कार्यात्मक और [[ वस्तु के उन्मुख |ऑब्जेक्ट ओरिएंटेड]] प्रोग्रामिंग भाषा है जो <code>CanThrow</code> क्षमता के रूप में [[अपवाद (कंप्यूटर विज्ञान)|अपवादों]] तक सीमित प्रभावों के लिए प्रयोगात्मक समर्थन प्रदान करती है।<ref>{{Cite web|title=फेंक सकने की क्षमताएँ|url=https://docs.scala-lang.org/scala3/reference/experimental/canthrow.html|access-date=2021-12-07|website=Scala Documentation}}</ref>
* स्काला 3.1 एक सांख्यिकीय रूप से टाइप की गई, कार्यात्मक और [[ वस्तु के उन्मुख |ऑब्जेक्ट ओरिएंटेड]] प्रोग्रामिंग भाषा है जो <code>CanThrow</code> क्षमता के रूप में [[अपवाद (कंप्यूटर विज्ञान)|अपवादों]] तक सीमित प्रभावों के लिए प्रयोगात्मक समर्थन प्रदान करती है।<ref>{{Cite web|title=फेंक सकने की क्षमताएँ|url=https://docs.scala-lang.org/scala3/reference/experimental/canthrow.html|access-date=2021-12-07|website=Scala Documentation}}</ref>
*[[जावा (प्रोग्रामिंग भाषा)|जावा]] सांख्यिकीय रूप से टाइप की गई, ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा है इसके जाँचे गए अपवाद किसी प्रभाव प्रणाली का अपेक्षाकृत सीमित उदाहरण हैं। केवल प्रभाव प्रकार - <code>throws</code> - उपलब्ध है, किसी मान के साथ फिर से प्रारम्भ करने का कोई तरीका नहीं है, और उनका उपयोग फलनों (केवल विधियों) के साथ नहीं किया जा सकता है जब तक कि फलन कस्टम <code>@FunctionalInterface</code> लागू नहीं करता है।<ref>{{Cite web|title=Java 8 Lambda function that throws exception?|url=https://stackoverflow.com/questions/18198176/java-8-lambda-function-that-throws-exception|access-date=2021-12-25|website=Stack Overflow}}</ref>
*[[जावा (प्रोग्रामिंग भाषा)|जावा]] सांख्यिकीय रूप से टाइप की गई, ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा है इसके जाँचे गए अपवाद किसी प्रभाव प्रणाली का अपेक्षाकृत सीमित उदाहरण हैं। केवल प्रभाव प्रकार - <code>throws</code> - उपलब्ध है, किसी मान के साथ फिर से प्रारम्भ करने का कोई तरीका नहीं है, और उनका उपयोग फ़ंक्शनों (केवल विधियों) के साथ नहीं किया जा सकता है जब तक कि फ़ंक्शन कस्टम <code>@FunctionalInterface</code> लागू नहीं करता है।<ref>{{Cite web|title=Java 8 Lambda function that throws exception?|url=https://stackoverflow.com/questions/18198176/java-8-lambda-function-that-throws-exception|access-date=2021-12-25|website=Stack Overflow}}</ref>
*[[जावास्क्रिप्ट]] एक गतिशील रूप से टाइप की जाने वाली भाषा है, इसमें एक प्रस्ताव है जो बीजगणितीय प्रभावों को लागू करता है।<ref>{{cite web |last1=Macabeus |first1=Bruno |title=macabeus/js-proposal-algebraic-effects: 📐Let there be algebraic effects in JS |url=https://github.com/macabeus/js-proposal-algebraic-effects |website=GitHub |date=16 September 2020}}</ref>
*[[जावास्क्रिप्ट]] एक गतिशील रूप से टाइप की जाने वाली भाषा है, इसमें एक प्रस्ताव है जो बीजगणितीय प्रभावों को लागू करता है।<ref>{{cite web |last1=Macabeus |first1=Bruno |title=macabeus/js-proposal-algebraic-effects: 📐Let there be algebraic effects in JS |url=https://github.com/macabeus/js-proposal-algebraic-effects |website=GitHub |date=16 September 2020}}</ref>
==संदर्भ==
==संदर्भ==

Revision as of 17:10, 17 July 2023

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

प्रभाव प्रणाली प्रकार की धारणा को "प्रभाव" घटक तक विस्तारित करती है, जिसमें प्रभाव प्रकार और क्षेत्र सम्मिलित होता है। प्रभाव प्रकार वर्णन करता है कि क्या किया जा रहा है, और क्षेत्र यह वर्णन करता है कि यह किस (मापदंडों) के साथ किया जा रहा है।

प्रभाव प्रणाली प्रायः एक प्रकार की प्रणाली का विस्तार होती है। इस स्थिति में कभी-कभी "प्रकार और प्रभाव प्रणाली" शब्द का प्रयोग किया जाता है। प्रायः, किसी प्रकार के मान को उसके प्रभाव के साथ प्रकार के रूप में दर्शाया जाता है! प्रभाव, जहां प्रकार घटक और प्रभाव घटक दोनों कुछ क्षेत्रों (उदाहरण के लिए, परिवर्तनीय मेमोरी सेल का प्रकार उस मेमोरी क्षेत्र के लेबल द्वारा पैरामिट्रीकृत किया जाता है जिसमें सेल रहता है) का उल्लेख करते हैं। शब्द "बीजगणितीय प्रभाव" प्रकार प्रणाली से आता है।

प्रभाव प्रणालियों का उपयोग कुछ आंतरिक अशुद्ध परिभाषाओं की बाहरी शुद्धता को सिद्ध करने के लिए किया जा सकता है- उदाहरण के लिए, यदि कोई फ़ंक्शन आंतरिक रूप से मेमोरी के क्षेत्र को आवंटित और संशोधित करता है, लेकिन फ़ंक्शन के प्रकार में क्षेत्र का उल्लेख नहीं है, तो संबंधित प्रभाव को फ़ंक्शन के प्रभाव से मिटाया जा सकता है।[1]

उदाहरण

व्यवहार के कुछ उदाहरण जिन्हें प्रभाव प्रणालियों द्वारा वर्णित किया जा सकता है उनमें सम्मिलित हैं-

  • मेमोरी को पढ़ना, लिखना या आवंटित करना- प्रभाव का प्रकार पढ़ना, लिखना, आवंटित करना या मुक्त करना है, और क्षेत्र प्रोग्राम का वह बिंदु है जहां निर्धारण किया गया था (अर्थात, प्रत्येक प्रोग्राम बिंदु जहां आवंटन किया जाता है, उसे एक अद्वितीय लेबल सौंपा जाता है, और क्षेत्र की जानकारी डेटा प्रवाह के साथ स्थिर रूप से प्रसारित की जाती है)। मेमोरी के साथ काम करने वाले अधिकांश फ़ंक्शन वास्तव में क्षेत्र चर में बहुरूपी होंगे- उदाहरण के लिए, फ़ंक्शन जो मेमोरी में दो स्थानों की अदला-बदली करता है उसका प्रकार forall r1 r2, unit ! {read r1, read r2, write r1, write r2} होगा।
  • फ़ाइलों जैसे संसाधनों के साथ कार्य करना- उदाहरण के लिए, प्रभाव प्रकार विवृत, पढ़ा और संवृत हो सकता है, और फिर, क्षेत्र प्रोग्राम का वह बिंदु है जहां संसाधन विवृत है।
  • निरंतरता और लंबे विषयांतर के साथ नियंत्रण स्थानांतरण- प्रभाव का प्रकार गोटो हो सकता है (अर्थात कोड का भाग विषयांतर लगा सकता है) और कमफ्रॉम (अर्थात कोड का भाग विषयांतर का लक्ष्य हो सकता है), और यह क्षेत्र प्रोग्राम के उस बिंदु को दर्शाता है जहां से या जिस पर विषयांतर लगाया जा सकता है।

प्रोग्रामर के दृष्टिकोण से, प्रभाव उपयोगी होते हैं क्योंकि यह विशिष्ट कार्यों के कार्यान्वयन (कैसे) को कौन से कार्यों को निष्पादित करना है इसके विनिर्देशन से अलग करने की अनुमति देता है। उदाहरण के लिए, आस्क नाम प्रभाव या तो कंसोल से पढ़ सकता है, विंडो पॉप कर सकता है, या केवल डिफ़ॉल्ट मान वापस कर सकता है। नियंत्रण प्रवाह को प्राप्ति के मिश्रण (जिसमें निष्पादन जारी रहता है) के रूप में वर्णित किया जा सकता है और थ्रो (जिसमें अनियंत्रित प्रभाव नियंत्रित होने तक नीचे की ओर प्रसारित होता है)।[2]

कार्यान्वयन

मुख्य विशेषता

  • कोका सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जिसमें मुख्य विशेषता के रूप में बीजगणितीय प्रभाव प्रबंधकर्ता हैं।[3]
  • ईएफएफ (Eff) एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जो बीजगणितीय प्रभाव प्रबंधकर्ताओं पर केंद्रित है।[4]
  • यूनिसन एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जिसमें बीजगणितीय प्रभाव प्रबंधकर्ता (भाषा में "क्षमताएं" कहा जाता है) टाइप प्रणाली के मुख्य भाग के रूप में है।[5]
  • इफ़ेक्ट (Effekt) एक शोध भाषा है जो प्रभाव संचालकों और बहुरूपी प्रभावों पर केंद्रित है।[6]

पूर्ण समर्थन

  • हास्केल एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जिसमें कई पैकेज हैं जो प्रभावों को एन्कोड करने की अनुमति देते हैं।[7] हालाँकि, हास्केल प्रायः अभेद्य वस्तुओं पर अधिक ध्यान केंद्रित करता है।
  • ओकैमल (OCaml) 5.0 ने भविष्य में उचित उच्च-स्तरीय सिंटैक्स पेश करने की योजना के साथ, प्रयोगात्मक प्रभाव प्रबंधकर्ता साधारण के लिए समर्थन पेश किया था।[8]

आंशिक समर्थन और प्रोटोटाइप

  • स्काला 3.1 एक सांख्यिकीय रूप से टाइप की गई, कार्यात्मक और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा है जो CanThrow क्षमता के रूप में अपवादों तक सीमित प्रभावों के लिए प्रयोगात्मक समर्थन प्रदान करती है।[9]
  • जावा सांख्यिकीय रूप से टाइप की गई, ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा है इसके जाँचे गए अपवाद किसी प्रभाव प्रणाली का अपेक्षाकृत सीमित उदाहरण हैं। केवल प्रभाव प्रकार - throws - उपलब्ध है, किसी मान के साथ फिर से प्रारम्भ करने का कोई तरीका नहीं है, और उनका उपयोग फ़ंक्शनों (केवल विधियों) के साथ नहीं किया जा सकता है जब तक कि फ़ंक्शन कस्टम @FunctionalInterface लागू नहीं करता है।[10]
  • जावास्क्रिप्ट एक गतिशील रूप से टाइप की जाने वाली भाषा है, इसमें एक प्रस्ताव है जो बीजगणितीय प्रभावों को लागू करता है।[11]

संदर्भ

  1. Albin., Turbak, Franklyn (2010). प्रोग्रामिंग भाषाओं में डिज़ाइन अवधारणाएँ. PHI Learning. ISBN 978-81-203-3996-5. OCLC 1261053520.{{cite book}}: CS1 maint: multiple names: authors list (link)
  2. Abramov, Dan. "हममें से बाकी लोगों के लिए बीजगणितीय प्रभाव". overreacted.io (in English).
  3. "कोका मैनुअल". koka-lang.github.io.
  4. Pretnar, Matija (2021-12-07), Eff, retrieved 2021-12-11
  5. "यूनिसन भाषा". www.unisonweb.org. Retrieved 2021-12-07.
  6. team, the Effekt research. "Effekt Language: Concepts and Features". Effekt Language. Retrieved 2023-06-13.
  7. Vera, Josh (18 April 2020). "joshvera/freemonad-benchmark". GitHub. A benchmark comparing the performance of different free monad implementations.
  8. "OCaml - भाषा एक्सटेंशन". v2.ocaml.org. Retrieved 2023-06-13.
  9. "फेंक सकने की क्षमताएँ". Scala Documentation. Retrieved 2021-12-07.
  10. "Java 8 Lambda function that throws exception?". Stack Overflow. Retrieved 2021-12-25.
  11. Macabeus, Bruno (16 September 2020). "macabeus/js-proposal-algebraic-effects: 📐Let there be algebraic effects in JS". GitHub.

पाठ्यपुस्तक अध्याय

  • Hankin, Chris; Nielson, Flemming; Nielson, Hanne Riis (1999). कार्यक्रम विश्लेषण के सिद्धांत. Berlin: Springer. ISBN 978-3-540-65410-0.
  • Gifford, David; Turbak, Franklyn A.; Sheldon, Mark A. (2008). "16". प्रोग्रामिंग भाषाओं में डिज़ाइन अवधारणाएँ. Cambridge, Mass: MIT Press. ISBN 978-0-262-20175-9.

अवलोकन कागजात

अग्रिम पठन