प्रभाव प्रणाली: Difference between revisions
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> | ||
== उदाहरण == | == उदाहरण == | ||
व्यवहार के कुछ उदाहरण जिन्हें प्रभाव प्रणालियों द्वारा वर्णित किया जा सकता है उनमें सम्मिलित हैं- | व्यवहार के कुछ उदाहरण जिन्हें प्रभाव प्रणालियों द्वारा वर्णित किया जा सकता है उनमें सम्मिलित हैं- | ||
* मेमोरी को | * मेमोरी को रीडिंग, राइटिंग या अलोकेटिंग करना- प्रभाव के प्रकार को ''रीड'', ''राइट, अलोकेट'' या ''फ्री'' करना है, और क्षेत्र प्रोग्राम का वह बिंदु है जहां अलोकेशन किया गया था (अर्थात, प्रत्येक प्रोग्राम बिंदु जहां अलोकेशन किया जाता है, उसे एक अद्वितीय लेबल सौंपा जाता है, और क्षेत्र की जानकारी डेटा प्रवाह के साथ स्थिर रूप से प्रसारित की जाती है)। मेमोरी के साथ काम करने वाले अधिकांश फ़ंक्शन वास्तव में क्षेत्र चर में बहुरूपी होंगे- उदाहरण के लिए, फ़ंक्शन जो मेमोरी में दो स्थानों की अदला-बदली करता है उसका प्रकार {{code|forall r1 r2, unit ! {{mset|read r1, read r2, write r1, write r2}}}} होगा। | ||
*फ़ाइलों जैसे संसाधनों के साथ कार्य करना- उदाहरण के लिए, प्रभाव प्रकार | *फ़ाइलों जैसे संसाधनों के साथ कार्य करना- उदाहरण के लिए, प्रभाव प्रकार ''ओपेन'', ''रीड'' और ''क्लोज'' हो सकता है, और फिर, क्षेत्र प्रोग्राम का वह बिंदु है जहां संसाधन ओपेन है। | ||
*निरंतरता और लंबे विषयांतर के साथ नियंत्रण स्थानांतरण- प्रभाव का प्रकार [[ के लिए जाओ |''गोटो'']] हो सकता है (अर्थात कोड का भाग विषयांतर लगा सकता है) और [[से आते हैं|''कमफ्रॉम'']] (अर्थात कोड का भाग विषयांतर का लक्ष्य हो सकता है), और यह क्षेत्र प्रोग्राम के उस बिंदु को दर्शाता है जहां से या जिस पर विषयांतर लगाया जा सकता है। | *निरंतरता और लंबे विषयांतर के साथ नियंत्रण स्थानांतरण- प्रभाव का प्रकार [[ के लिए जाओ |''गोटो'']] हो सकता है (अर्थात कोड का भाग विषयांतर लगा सकता है) और [[से आते हैं|''कमफ्रॉम'']] (अर्थात कोड का भाग विषयांतर का लक्ष्य हो सकता है), और यह क्षेत्र प्रोग्राम के उस बिंदु को दर्शाता है जहां से या जिस पर विषयांतर लगाया जा सकता है। | ||
Line 16: | Line 16: | ||
=== मुख्य विशेषता === | === मुख्य विशेषता === | ||
* [[कोका (प्रोग्रामिंग भाषा)|कोका]] सांख्यिकीय रूप से टाइप की गई [[कार्यात्मक प्रोग्रामिंग]] भाषा है जिसमें मुख्य विशेषता के रूप में बीजगणितीय प्रभाव | * [[कोका (प्रोग्रामिंग भाषा)|कोका]] सांख्यिकीय रूप से टाइप की गई [[कार्यात्मक प्रोग्रामिंग]] भाषा है जिसमें मुख्य विशेषता के रूप में बीजगणितीय प्रभाव हैंडलर्स हैं।<ref>{{cite web |title=कोका मैनुअल|url=https://koka-lang.github.io/koka/doc/kokaspec.html |website=koka-lang.github.io}}</ref> | ||
*ईएफएफ (Eff) एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जो बीजगणितीय प्रभाव | *ईएफएफ (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> | ||
*[https://effekt-lang.org/ इफ़ेक्ट (Effekt)] एक शोध भाषा है जो प्रभाव | *[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) 5.0 ने भविष्य में उचित उच्च-स्तरीय सिंटैक्स पेश करने की योजना के साथ, प्रयोगात्मक प्रभाव | *ओकैमल (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> | ||
=== आंशिक समर्थन और प्रोटोटाइप === | === आंशिक समर्थन और प्रोटोटाइप === |
Revision as of 15:36, 22 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]
संदर्भ
- ↑ Albin., Turbak, Franklyn (2010). प्रोग्रामिंग भाषाओं में डिज़ाइन अवधारणाएँ. PHI Learning. ISBN 978-81-203-3996-5. OCLC 1261053520.
{{cite book}}
: CS1 maint: multiple names: authors list (link) - ↑ Abramov, Dan. "हममें से बाकी लोगों के लिए बीजगणितीय प्रभाव". overreacted.io (in English).
- ↑ "कोका मैनुअल". koka-lang.github.io.
- ↑ Pretnar, Matija (2021-12-07), Eff, retrieved 2021-12-11
- ↑ "यूनिसन भाषा". www.unisonweb.org. Retrieved 2021-12-07.
- ↑ team, the Effekt research. "Effekt Language: Concepts and Features". Effekt Language. Retrieved 2023-06-13.
- ↑ Vera, Josh (18 April 2020). "joshvera/freemonad-benchmark". GitHub.
A benchmark comparing the performance of different free monad implementations.
- ↑ "OCaml - भाषा एक्सटेंशन". v2.ocaml.org. Retrieved 2023-06-13.
- ↑ "फेंक सकने की क्षमताएँ". Scala Documentation. Retrieved 2021-12-07.
- ↑ "Java 8 Lambda function that throws exception?". Stack Overflow. Retrieved 2021-12-25.
- ↑ 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.
अवलोकन कागजात
- Nielson, Flemming; Nielson, Hanne Riis (1999). प्रकार और प्रभाव प्रणाली. pp. 114–136. doi:10.1007/3-540-48092-7_6. ISBN 978-3-540-66624-0.
{{cite book}}
:|journal=
ignored (help)
अग्रिम पठन
- Marino, Daniel; Millstein, Todd (2008). A Generic Type and Effect System (PDF). p. 39. CiteSeerX 10.1.1.157.8373. doi:10.1145/1481861.1481868. ISBN 9781605584201. S2CID 14538045.
{{cite book}}
:|journal=
ignored (help) - Lucassen, John M.; Gifford, David K. (1988). Polymorphic Effect Systems. pp. 47–57. CiteSeerX 10.1.1.73.4916. doi:10.1145/73560.73564. ISBN 978-0897912525. S2CID 13015611.
{{cite book}}
:|journal=
ignored (help)