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

From Vigyanwiki
(Created page with "{{More footnotes|date=September 2010}} कम्प्यूटिंग में, एक प्रभाव प्रणाली एक औपचारिक प्...")
 
No edit summary
Line 1: Line 1:
{{More footnotes|date=September 2010}}
[[ कम्प्यूटिंग |कंप्यूटिंग]] में, '''प्रभाव प्रणाली''' एक [[औपचारिक प्रणाली]] है जो कंप्यूटर प्रोग्राम के कम्प्यूटेशनल प्रभावों, जैसे दुष्प्रभावों का वर्णन करती है। प्रोग्राम के संभावित प्रभावों की संकलन-समय पर जांच प्रदान करने के लिए प्रभाव प्रणाली का उपयोग किया जा सकता है।  
[[ कम्प्यूटिंग ]] में, एक प्रभाव प्रणाली एक [[औपचारिक प्रणाली]] है जो कंप्यूटर प्रोग्राम के कम्प्यूटेशनल प्रभावों का वर्णन करती है, जैसे कि साइड इफेक्ट (कंप्यूटर विज्ञान)। कार्यक्रम के संभावित प्रभावों की संकलन-समय जांच प्रदान करने के लिए एक प्रभाव प्रणाली का उपयोग किया जा सकता है।


प्रभाव प्रणाली एक प्रभाव घटक के लिए प्रकार की धारणा का विस्तार करती है, जिसमें एक प्रभाव प्रकार और एक क्षेत्र शामिल होता है। प्रभाव प्रकार वर्णन करता है कि ''क्या'' किया जा रहा है, और क्षेत्र वर्णन करता है कि ''किस'' (मापदंडों) के साथ यह किया जा रहा है।
प्रभाव प्रणाली प्रकार की धारणा को "प्रभाव" घटक तक विस्तारित करती है, जिसमें '''प्रभाव प्रकार''' और '''क्षेत्र''' सम्मिलित होता है। प्रभाव प्रकार वर्णन करता है कि ''क्या'' किया जा रहा है, और क्षेत्र यह वर्णन करता है कि यह ''किस'' (मापदंडों) के साथ किया जा रहा है।  
 
एक प्रभाव प्रणाली आम तौर पर एक प्रकार की प्रणाली का विस्तार होती है। इस मामले में कभी-कभी प्रकार और प्रभाव प्रणाली शब्द का प्रयोग किया जाता है। अक्सर, किसी मान के एक प्रकार को उसके प्रभाव के साथ ''प्रकार'' के रूप में दर्शाया जाता है! प्रभाव'', जहां प्रकार घटक और प्रभाव घटक दोनों कुछ क्षेत्रों का उल्लेख करते हैं (उदाहरण के लिए, एक परिवर्तनशील मेमोरी सेल का एक प्रकार उस मेमोरी क्षेत्र के लेबल द्वारा पैरामीटराइज़ किया जाता है जिसमें सेल रहता है)। बीजगणितीय प्रभाव शब्द [[प्रकार प्रणाली]] से आता है।
 
प्रभाव प्रणालियों का उपयोग कुछ आंतरिक रूप से अशुद्ध परिभाषाओं के बाहरी [[शुद्ध कार्य]] को साबित करने के लिए किया जा सकता है: उदाहरण के लिए, यदि कोई फ़ंक्शन आंतरिक रूप से मेमोरी के क्षेत्र को आवंटित और संशोधित करता है, लेकिन फ़ंक्शन के प्रकार में क्षेत्र का उल्लेख नहीं है, तो संबंधित प्रभाव को मिटाया जा सकता है फ़ंक्शन का प्रभाव.<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}}}} होगा।
* फ़ाइलों जैसे संसाधनों के साथ कार्य करना: उदाहरण के लिए, प्रभाव प्रकार खुला, पढ़ा और बंद हो सकता है, और फिर, क्षेत्र प्रोग्राम का वह बिंदु है जहां संसाधन खोला जाता है।
*फ़ाइलों जैसे संसाधनों के साथ कार्य करना- उदाहरण के लिए, प्रभाव प्रकार विवृत, पढ़ा और संवृत हो सकता है, और फिर, क्षेत्र प्रोग्राम का वह बिंदु है जहां संसाधन विवृत है।  
* निरंतरता और लंबी छलांग के साथ नियंत्रण स्थानांतरण: प्रभाव का प्रकार [[ के लिए जाओ ]] (यानी कोड का टुकड़ा छलांग लगा सकता है) और [[से आते हैं]] (यानी कोड का टुकड़ा छलांग का लक्ष्य हो सकता है) हो सकता है, और क्षेत्र बिंदु को दर्शाता है वह प्रोग्राम जिससे या जिस पर छलांग लगाई जा सकती है।
*निरंतरता और लंबे विषयांतर के साथ नियंत्रण स्थानांतरण- प्रभाव का प्रकार [[ के लिए जाओ |''गोटो'']] हो सकता है (अर्थात कोड का भाग विषयांतर लगा सकता है) और [[से आते हैं|''कमफ्रॉम'']] (अर्थात कोड का भाग विषयांतर का लक्ष्य हो सकता है), और यह क्षेत्र प्रोग्राम के उस बिंदु को दर्शाता है जहां से या जिस पर विषयांतर लगाया जा सकता है।
 
एक प्रोग्रामर के दृष्टिकोण से, प्रभाव उपयोगी होते हैं क्योंकि यह विशिष्ट क्रियाओं के कार्यान्वयन (कैसे) को किस क्रिया को करने के विनिर्देश से अलग करने की अनुमति देता है। उदाहरण के लिए, एक आस्क नाम प्रभाव या तो कंसोल से पढ़ सकता है, एक विंडो पॉप कर सकता है, या बस एक डिफ़ॉल्ट मान लौटा सकता है। नियंत्रण प्रवाह को जेनरेटर (कंप्यूटर प्रोग्रामिंग) (जिसमें निष्पादन जारी रहता है) और अपवाद हैंडलिंग (जिसमें एक अनहैंडल प्रभाव नियंत्रित होने तक फैलता रहता है) के मिश्रण के रूप में वर्णित किया जा सकता है।<ref>{{cite web |last1=Abramov |first1=Dan |title=हममें से बाकी लोगों के लिए बीजगणितीय प्रभाव|url=https://overreacted.io/algebraic-effects-for-the-rest-of-us/ |website=overreacted.io |language=en}}</ref>
 


प्रोग्रामर के दृष्टिकोण से, प्रभाव उपयोगी होते हैं क्योंकि यह विशिष्ट कार्यों के कार्यान्वयन (''कैसे'') को कौन से कार्यों को निष्पादित करना है इसके विनिर्देशन से अलग करने की अनुमति देता है। उदाहरण के लिए, आस्क नाम प्रभाव या तो कंसोल से पढ़ सकता है, विंडो पॉप कर सकता है, या केवल डिफ़ॉल्ट मान वापस कर सकता है। नियंत्रण प्रवाह को ''प्राप्ति'' के मिश्रण (जिसमें निष्पादन जारी रहता है) के रूप में वर्णित किया जा सकता है और ''थ्रो'' (जिसमें अनियंत्रित प्रभाव नियंत्रित होने तक नीचे की ओर प्रसारित होता है)।<ref>{{cite web |last1=Abramov |first1=Dan |title=हममें से बाकी लोगों के लिए बीजगणितीय प्रभाव|url=https://overreacted.io/algebraic-effects-for-the-rest-of-us/ |website=overreacted.io |language=en}}</ref>
== कार्यान्वयन ==
== कार्यान्वयन ==


=== मुख्य विशेषता ===
=== मुख्य विशेषता ===
* [[कोका (प्रोग्रामिंग भाषा)]] एक सांख्यिकीय रूप से टाइप की गई [[कार्यात्मक प्रोग्रामिंग]] भाषा है जिसमें मुख्य विशेषता के रूप में बीजगणितीय प्रभाव हैंडलर हैं।<ref>{{cite web |title=कोका मैनुअल|url=https://koka-lang.github.io/koka/doc/kokaspec.html |website=koka-lang.github.io}}</ref>
* [[कोका (प्रोग्रामिंग भाषा)|कोका]] सांख्यिकीय रूप से टाइप की गई [[कार्यात्मक प्रोग्रामिंग]] भाषा है जिसमें मुख्य विशेषता के रूप में बीजगणितीय प्रभाव प्रबंधकर्ता हैं।<ref>{{cite web |title=कोका मैनुअल|url=https://koka-lang.github.io/koka/doc/kokaspec.html |website=koka-lang.github.io}}</ref>
* एफईएफ (प्रोग्रामिंग भाषा) एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जो बीजगणितीय प्रभाव हैंडलर पर केंद्रित है।<ref>{{Citation|last=Pretnar|first=Matija|title=Eff|date=2021-12-07|url=https://github.com/matijapretnar/eff|access-date=2021-12-11}}</ref>
*ईएफएफ (Eff) एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जो बीजगणितीय प्रभाव प्रबंधकर्ताओं पर केंद्रित है।<ref>{{Citation|last=Pretnar|first=Matija|title=Eff|date=2021-12-07|url=https://github.com/matijapretnar/eff|access-date=2021-12-11}}</ref>
* [[यूनिसन (प्रोग्रामिंग भाषा)]] एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जिसमें बीजगणितीय प्रभाव हैंडलर (भाषा में क्षमताएं कहा जाता है) टाइप सिस्टम के मुख्य भाग के रूप में हैं।<ref>{{Cite web|title=यूनिसन भाषा|url=https://www.unisonweb.org/|access-date=2021-12-07|website=www.unisonweb.org}}</ref>
*[[यूनिसन (प्रोग्रामिंग भाषा)|यूनिसन]] एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जिसमें बीजगणितीय प्रभाव प्रबंधकर्ता (भाषा में "क्षमताएं" कहा जाता है) टाइप प्रणाली के मुख्य भाग के रूप में है।<ref>{{Cite web|title=यूनिसन भाषा|url=https://www.unisonweb.org/|access-date=2021-12-07|website=www.unisonweb.org}}</ref>
* [https://effekt-lang.org/ Effekt] एक शोध भाषा है जो प्रभाव संचालकों और बहुरूपी प्रभावों पर केंद्रित है।<ref>{{Cite web |last=team |first=the Effekt research |title=Effekt Language: Concepts and Features |url=https://effekt-lang.org/docs/concepts |access-date=2023-06-13 |website=Effekt Language}}</ref>
*[https://effekt-lang.org/ इफ़ेक्ट (Effekt)] एक शोध भाषा है जो प्रभाव संचालकों और बहुरूपी प्रभावों पर केंद्रित है।<ref>{{Cite web |last=team |first=the Effekt research |title=Effekt Language: Concepts and Features |url=https://effekt-lang.org/docs/concepts |access-date=2023-06-13 |website=Effekt Language}}</ref>
 
 
=== पूर्ण समर्थन ===
=== पूर्ण समर्थन ===
* [[हास्केल (प्रोग्रामिंग भाषा)]] एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जिसमें कई पैकेज हैं जो प्रभावों को एन्कोड करने की अनुमति देते हैं।<ref>{{cite web |last1=Vera |first1=Josh |title=joshvera/freemonad-benchmark |url=https://github.com/joshvera/freemonad-benchmark |website=GitHub |date=18 April 2020 |quote=A benchmark comparing the performance of different free monad implementations.}}</ref> हालाँकि, हास्केल आम तौर पर [[मोनाड (कार्यात्मक प्रोग्रामिंग)]] पर अधिक केंद्रित है।
* [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जिसमें कई पैकेज हैं जो प्रभावों को एन्कोड करने की अनुमति देते हैं।<ref>{{cite web |last1=Vera |first1=Josh |title=joshvera/freemonad-benchmark |url=https://github.com/joshvera/freemonad-benchmark |website=GitHub |date=18 April 2020 |quote=A benchmark comparing the performance of different free monad implementations.}}</ref> हालाँकि, हास्केल प्रायः [[मोनाड (कार्यात्मक प्रोग्रामिंग)|अभेद्य वस्तुओं]] पर अधिक ध्यान केंद्रित करता है।
* OCaml|OCaml 5.0 ने प्रायोगिक प्रभाव हैंडलर प्रिमिटिव के लिए समर्थन पेश किया,<ref>{{Cite web |title=OCaml - भाषा एक्सटेंशन|url=https://v2.ocaml.org/manual/effects.html |access-date=2023-06-13 |website=v2.ocaml.org}}</ref> भविष्य में उचित उच्च-स्तरीय सिंटैक्स पेश करने की योजना के साथ।
*ओकैमल (OCaml) 5.0 ने भविष्य में उचित उच्च-स्तरीय सिंटैक्स पेश करने की योजना के साथ, प्रयोगात्मक प्रभाव प्रबंधकर्ता साधारण के लिए समर्थन पेश किया था।<ref>{{Cite web |title=OCaml - भाषा एक्सटेंशन|url=https://v2.ocaml.org/manual/effects.html |access-date=2023-06-13 |website=v2.ocaml.org}}</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>
* स्काला 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>
 
 
==संदर्भ==
==संदर्भ==
{{Reflist}}
{{Reflist}}
===पाठ्यपुस्तक अध्याय===
===पाठ्यपुस्तक अध्याय===
*{{Cite book|last1=Hankin|first1=Chris|last2=Nielson|first2=Flemming|last3=Nielson|first3=Hanne Riis|title=कार्यक्रम विश्लेषण के सिद्धांत|year=1999|publisher=Springer|location=Berlin|isbn=978-3-540-65410-0}}
*{{Cite book|last1=Hankin|first1=Chris|last2=Nielson|first2=Flemming|last3=Nielson|first3=Hanne Riis|title=कार्यक्रम विश्लेषण के सिद्धांत|year=1999|publisher=Springer|location=Berlin|isbn=978-3-540-65410-0}}

Revision as of 12:08, 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.

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

अग्रिम पठन