मैं ज्यादातर C / C ++ प्रोग्रामर हूं, जिसका अर्थ है कि मेरे अनुभव का अधिकांश भाग प्रक्रियात्मक और वस्तु-उन्मुख प्रतिमानों के साथ है। हालांकि, जैसा कि कई सी ++ प्रोग्रामर जानते हैं, सी ++ एक कार्यात्मक-एस्क स्टाइल के लिए वर्षों से जोर दिया गया है, आखिरकार लंबोदा और सी ++ 0x में बंद होने के अलावा इसका समापन हुआ।
भले ही, जबकि मेरे पास कार्यात्मक में कोडिंग का काफी अनुभव है C ++ का उपयोग करते हुए शैली है, लेकिन मुझे वास्तविक कार्यात्मक भाषाओं जैसे लिस्प, हास्केल आदि के साथ बहुत कम अनुभव है।
मैंने हाल ही में इन भाषाओं का अध्ययन करना शुरू किया है, क्योंकि विशुद्ध रूप से कार्यात्मक भाषाओं में "कोई साइड-इफेक्ट्स" के विचार ने मुझे हमेशा से परेशान नहीं किया है, विशेष रूप से संगामिति और वितरित कंप्यूटिंग के लिए इसके अनुप्रयोगों के संबंध में।
हालाँकि, C ++ बैकग्राउंड से आने के कारण मैं असमंजस में हूँ कि यह कैसे "कोई साइड-इफ़ेक्ट" नहीं है। फ़िल्सोफी अतुल्यकालिक प्रोग्रामिंग के साथ काम करता है। एसिंक्रोनस प्रोग्रामिंग से मेरा मतलब है कि कोई भी फ्रेमवर्क / एपीआई / कोडिंग शैली जो उपयोगकर्ता द्वारा प्रदान किए गए ईवेंट हैंडलर को उन घटनाओं को संभालने के लिए भेजती है जो एसिंक्रोनस रूप से होती हैं (प्रोग्राम के प्रवाह के बाहर।) इसमें एसिंक्रोनस लाइब्रेरी जैसे कि बूस्ट .ASIO, या यहां तक कि सिर्फ सादे पुराने सी शामिल हैं। सिग्नल हैंडलर या जावा GUI इवेंट हैंडलर।
इन सभी में एक बात समान है कि अतुल्यकालिक प्रोग्रामिंग की प्रकृति को साइड-इफेक्ट्स (राज्य) के निर्माण की आवश्यकता होती है, ताकि प्रोग्राम के मुख्य प्रवाह के बारे में पता चल सके कि एक अतुल्यकालिक ईवेंट हैंडलर को आमंत्रित किया गया है। आमतौर पर, Boost.ASIO जैसे ढांचे में, एक ईवेंट हैंडलर किसी ऑब्जेक्ट की स्थिति को बदल देता है, ताकि ईवेंट हैंडलर फ़ंक्शन के जीवन-समय से पहले ईवेंट के प्रभाव का प्रचार हो। वास्तव में, एक इवेंट हैंडलर और क्या कर सकता है? यह कॉल बिंदु के लिए एक मूल्य "वापस" नहीं कर सकता है, क्योंकि कॉल बिंदु नहीं है। ईवेंट हैंडलर कार्यक्रम के मुख्य प्रवाह का हिस्सा नहीं है, इसलिए वास्तविक कार्यक्रम पर इसका कोई प्रभाव हो सकता है एकमात्र तरीका कुछ राज्य (या किसी longjmp
अन्य निष्पादन बिंदु पर) को बदलना है ।
तो ऐसा लगता है कि अतुल्यकालिक प्रोग्रामिंग सभी अतुल्यकालिक रूप से साइड-इफेक्ट्स पैदा करने वाले हैं। यह पूरी तरह से कार्यात्मक प्रोग्रामिंग के लक्ष्यों के साथ बाधाओं पर लगता है। कार्यात्मक भाषाओं में इन दोनों प्रतिमानों को कैसे मिलाया जाता है (व्यवहार में)?