प्रभाव प्रणाली

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

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

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

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

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

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

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

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

पूर्ण समर्थन

 * हास्केल (प्रोग्रामिंग भाषा) एक सांख्यिकीय रूप से टाइप की गई कार्यात्मक प्रोग्रामिंग भाषा है जिसमें कई पैकेज हैं जो प्रभावों को एन्कोड करने की अनुमति देते हैं। हालाँकि, हास्केल आम तौर पर मोनाड (कार्यात्मक प्रोग्रामिंग) पर अधिक केंद्रित है।
 * OCaml|OCaml 5.0 ने प्रायोगिक प्रभाव हैंडलर प्रिमिटिव के लिए समर्थन पेश किया, भविष्य में उचित उच्च-स्तरीय सिंटैक्स पेश करने की योजना के साथ।

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

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