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

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

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

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

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

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

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

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

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

पूर्ण समर्थन

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

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

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