7

मैं राज्यविहीन प्रोग्रामिंग के लाभों के बारे में सोच रहा था, और कोई है जो मेरे सवाल का साझा पाया: Advantages of stateless programming?राज्य प्रोग्रामिंग के फायदे?

के रूप में मैं जवाब के माध्यम से हालांकि 'पढ़ने के बाद मुझे बातचीत सवाल के बारे में उत्सुक बना दिया। राज्य प्रोग्रामिंग के फायदे क्या हैं? ऐसा लगता है कि हाल ही में स्टेटलेस कोड पर बहुत ध्यान केंद्रित है लेकिन मैं रुझानों से सावधान हूं।

ऐसा लगता है कि स्टेटफुल (यानी अनिवार्य) प्रोग्रामिंग स्टेटलेस (यानी कार्यात्मक) प्रोग्रामिंग से बेहतर कुछ परिदृश्यों में खुद को उधार दे सकती है, और मैं यह समझने में सक्षम होना चाहता हूं कि राज्य की प्रोग्रामिंग द्वारा कौन सी समस्याएं हल की जा सकती हैं।

+0

मुझे लगता है कि आपका प्रश्न इसके मूल पर एक सुस्पष्ट प्रश्न है, हालांकि आपको इसे सुधारने की आवश्यकता है: अंतिम अनुच्छेद (इसके व्यक्तिपरक) को हटाएं और सक्रिय रूप से यह बताएं कि आप किस प्रकार के उत्तर की उम्मीद कर रहे हैं। –

+1

यह सवाल क्यों बंद कर दिया गया था, जबकि बातचीत प्रश्न (ऊपर से जुड़ा हुआ) नहीं था? – ericsoco

+0

@ जोहान्स रुडॉल्फ - उल्लेख और संपादित। – ericsoco

उत्तर

6

केवल कुछ ऐसे मामले हैं जहां एक अपरिवर्तनीय, स्टेटलेस प्रोग्रामिंग मॉडल की तुलना में परिवर्तनीय, साझा राज्य के आधार पर प्रोग्रामिंग मॉडल के लिए गैर-बहस योग्य फायदे हैं। एक क्षेत्र जहां उत्परिवर्तन बड़े फायदे ला सकता है वह एल्गोरिदम को जगह में काम करने की इजाजत देता है। हैकसेल विकी के पास क्विकॉर्ट को कार्यान्वित करने के बारे में एक शानदार उदाहरण है: http://www.haskell.org/haskellwiki/Introduction#When_C_is_better

संक्षेप में, जब आप सूचियों की स्मृति में संशोधन की अनुमति नहीं देते हैं, तो आपको इसकी एक क्रमबद्ध प्रतिलिपि बनाना होगा। लगभग किसी अन्य एल्गोरिदम के लिए भी यह सच है जो कुछ डेटा-संरचना को संशोधित करता है, उदा। एक एवीएल वृक्ष।

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

1

योग्यता कुंजी है। मुझे कार्यात्मक प्रोग्रामिंग पसंद है (वर्तमान में मैं क्लोजर बिंग पर हूं), लेकिन राज्य यह है कि दुनिया कैसे काम करती है। यह कोई दुर्घटना नहीं है कि ऑब्जेक्ट ओरिएंटेड प्रतिमान कार्यात्मक या किसी अन्य प्रकार के प्रोग्रामिंग से अधिक लोकप्रिय है। ओओपी और प्रक्रियात्मक प्रोग्रामिंग नए प्रोग्रामर के लिए कम से कम प्रतिरोध का मार्ग हैं। ज्यादातर लोग आसानी से किसी ऑब्जेक्ट के विचार को समझते हैं जो वाई-संयोजक की बजाय स्थिति को बदलता है (यह चल रहा है, या रंग बदल सकता है)।

+0

मुझे पता नहीं है कि मैं इसे खरीदता हूं। आखिरकार, एक कारण यह है कि वे "कम से कम प्रतिरोध का मार्ग" हैं क्योंकि ओओपी भाषाएं पहले से ही इतनी लोकप्रिय हैं, जिसका अर्थ है कि उनके पास अधिक ट्यूटोरियल, अधिक टूल्स, अधिक आईडीई, और सब कुछ है। लेकिन लोकप्रियता का मतलब वैचारिक सादगी नहीं है। – thedayturns

+0

मैं कुछ भाषाओं के लिए सहमत हूं (एक अच्छी तरह से लागू ओओपी बहुत अच्छा है)। मेरा मुद्दा यह था कि लोग राज्य में सोचते हैं। दुनिया ही एक परिमित राज्य मशीन है। – semisight

+3

"राज्य यह है कि वर्ल कैसे काम करता है" - एक अत्यधिक सट्टा दार्शनिक hypthesis। कोई इसका सामना कर सकता है: "गणित और क्वांटम यांत्रिकी यह है कि दुनिया कैसे काम करती है (और कुछ परिस्थितियों में राज्य दिखाई देता है)।" – Ingo

1

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

किसी भी वास्तविक दुनिया में एफपी कार्यक्रम में हमेशा 2 भाग होंगे, एक स्टेटलेस है जो आप कोर एल्गोरिदम आदि होगा और अन्य भाग जो कार्यक्रम की स्थिति बनाए रखेगा।