कार्यात्मक प्रोग्रामिंग के खिलाफ आपकी सबसे मजबूत राय क्या है? [बन्द है]


25

कार्यात्मक प्रोग्रामिंग सबसे पुराने प्रोग्रामिंग प्रतिमानों में से एक है। हालांकि यह अधिक लोकप्रिय प्रतिमानों की तुलना में उद्योग में ज्यादा उपयोग नहीं किया जाता है। लेकिन यह काफी हद तक शिक्षाविदों में जोर दिया गया है।

कार्यात्मक प्रोग्रामिंग के खिलाफ आपकी सबसे मजबूत राय क्या है?


5
LINQ? .नेट प्रतिनिधियों? गणितज्ञों की तरह डीएसएल?
जॉन हैरोप

5
संयोग से, "कार्यात्मक प्रोग्रामिंग" शब्द का उपयोग अलग-अलग लोगों द्वारा अलग-अलग चीजों का मतलब करने के लिए किया जाता है, इसलिए आपको यह स्पष्ट करने की आवश्यकता है कि आप किस अर्थ का उपयोग कर रहे हैं।
जॉन हैरोप

2
आप कभी नहीं, कभी भी अपने कार्यात्मक कोड आधार पर कोड करने के लिए किसी भी लोगों को मिल जाएगा। एक महान व्यवसाय निर्णय नहीं, अपनी प्रतिभा पूल को सीमित करना।
पैट्रिक ह्यूजेस

जवाबों:


52

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


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

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

8
इसलिए मैं हास्केल से प्यार करता हूं। यह उन राज्य कोड को कम करने के लिए प्रोत्साहित करता है। OO में मेरा उद्देश्य पुन: प्रयोज्य लिखना, समझना आसान और परीक्षण कोड को आसान बनाना है। ज्यादातर समय मैं कोड के साथ समाप्त होता हूं मैं हास्केल में बहुत अलग नहीं लिखूंगा।
लेनिप्रोग्रामेर्स

4
"यह केवल IO कोड / उत्परिवर्तनीय राज्य कोड और शुद्ध कोड के बीच एक अंतर को लागू करता है, जो परीक्षण के लिए बहुत अच्छा है"। आप डिबग संदेशों को टाइप सिस्टम को दरकिनार किए बिना या मोनड रेंगना शुरू किए बिना नहीं कर सकते।
जॉन हैरोप

2
संभवत: एक शुद्ध कार्य कार्यक्रम दुनिया को पूरी तरह से इसे चलाने से अपरिवर्तित छोड़ देगा?
मार्टिन बेकेट

24

कार्यात्मक प्रोग्रामिंग के साथ समस्या स्वयं कार्यात्मक प्रोग्रामिंग नहीं है - यह उन लोगों में से अधिकांश है जो इसे करते हैं और (बदतर) अधिकांश लोग हैं जो भाषाओं को डिज़ाइन करते हैं जिसमें इसे करना है।

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

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

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

जिसके चलते कई तरह की समस्याएं होती हैं। सबसे पहले, "कार्यात्मक प्रोग्रामिंग" सीखना ज्यादातर दार्शनिक मूल्य है। अधिकांश अन्य प्रकार की भाषाओं के साथ, किसी विशेष शैली की एक भाषा जानने से दूसरे को सीखने में महत्वपूर्ण मदद मिलती है। अगर मेरी परियोजना भाषा का उपयोग करती है तो XI आमतौर पर किसी ऐसे व्यक्ति को रख सकता है जो भाषा Y (लेकिन एक्स नहीं) को काफी सुरक्षित रूप से जानता है। कार्यात्मक भाषाओं के साथ, यह बहुत कम सच है। आप एर्लैंग को अच्छी तरह से जानते होंगे, लेकिन फिर भी हास्केल मठों को पूरी तरह से विदेशी और समझ से बाहर पाते हैं।

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


4
शायद कार्यात्मक भाषाओं के बीच अधिक क्रॉसओवर होगा यदि अधिक कार्यात्मक भाषाएं थीं।
बैरी ब्राउन 18

5
आप उस पवित्रता के बिना "कार्यात्मक" नहीं हो सकते। एक बार जब आप लाइन पर कदम रखते हैं तो पूरी अवधारणा अलग हो जाती है और आप बिना किसी फायदे के एक गन्दी, समानांतर, मानक भाषा के साथ समाप्त हो जाते हैं।
पैट्रिक ह्यूजेस

7
तो आपकी पहली समस्या यह है कि कार्यात्मक भाषाएं एक-दूसरे पर लाभ उठाने के लिए अलग-अलग नहीं हैं , और आपकी दूसरी समस्या यह है कि वे आसानी से जाने के लिए बहुत अलग हैं?
तिखन जेल्विस

2
मेरे लिए, यह जवाब एक शेख़ी की तरह है। यदि आप कुछ उदाहरण देते हैं तो आपका तर्क बहुत अधिक सम्मोहक होगा।
बेंजामिन हॉजसन

1
...roughly 10,000 languages and dialects that are enough different to annoy but only rarely enough different for one to have a truly significant advantage over the others...नहीं, यह सब प्रक्रियात्मक लंगोट जैसा लगता है। Java, Scala, Kotlin, C ++, C #, Groovy, Cheddar, ES6, Ceylon, Python, सूची जारी रहती है और ये सभी C के उबाऊ पुनरावृत्तियों हैं जो वास्तविक मुद्दों को हल नहीं करते हैं। यह मेरा रैंटी राय इस रैंटी जवाब को पूरक करने के लिए है: डी
बिल्ली

17

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

उदाहरण के लिए हास्केल को लें। कार्यात्मक शुद्धता के नाम पर, आपको ब्रेन-ब्रेकिंग एब्सट्रैक्शन इनवर्स का उपयोग करने की आवश्यकता होती है, जो किसी को भी राज्य और I / O को प्रबंधित करने के लिए नहीं समझता है, किसी भी और किसी भी कंप्यूटर प्रोग्राम के दो सबसे मौलिक भागों जो किसी भी चीज के साथ इंटरैक्ट करता है! वह पुराना तेज हो जाता है।


9
+1, हालाँकि मैं कभी-कभी उसी तरह महसूस करता हूं जब मैं उच्च-स्तरीय अनिवार्य भाषाओं में कार्यक्रम करता हूं। उदाहरण के लिए, मुझे fcck को एक एकल विधि वर्ग बनाने की आवश्यकता क्यों है जो कि जावा में एक फ़ंक्शन पॉइंटर का उपयोग करने के बजाय जावा में एकल विधि इंटरफ़ेस लागू करता है जैसे कि मैं सी में होगा?
dsimcha

14
मैं कहूंगा कि यह नहीं है कि आप "उन सार" के नीचे नहीं जा सकते हैं, यह अधिक है कि यह सिर्फ बहुत काम लेता है। हमें एक केला लेने और इसे एक अनिवार्य भाषा में खाने के लिए उपयोग किया जाता है; हास्केल (उदाहरण के लिए) आपको पहले एक 20-पेज का फॉर्म भरता है क्योंकि यह इस बात की गारंटी देता है कि जब आप नहीं देख रहे थे तो कोई केला रहस्यमय तरीके से नहीं खाया जाएगा। जो केले के बारे में तर्क करने में मदद करता है, लेकिन कभी-कभी आप सिर्फ भूखे होते हैं।
j_random_hacker

4
@dsimcha: यह उच्च स्तरीय अनिवार्य भाषाओं की प्रवृत्ति के बजाय जावा की ख़ासियत है। वास्तव में, उच्च स्तरीय भाषाओं में संभवतः प्रथम श्रेणी की वस्तु के रूप में कार्य करने की संभावना अधिक होती है।
मुहम्मद अलकरौरी

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

4
ध्यान देने वाली एक बात: इन "अमूर्त व्युत्क्रम" को देखते हुए, भाषा अधिक सीमित हो सकती है, लेकिन संकलक और रनटाइम में आपके कोड के बारे में अधिक गारंटी होती है और अधिक कर सकते हैं। यह केवल कचरा संग्रह की तरह है - एक gc भाषा में, आप सिर्फ malloc स्पेस (जो उपयोगी हो सकता है) नहीं कर सकते हैं, लेकिन बदले में, रनटाइम आपके लिए आपकी सभी मेमोरी का प्रबंधन कर सकता है, संभवतः आपसे अधिक कुशलता से मैन्युअल रूप से। यह कार्यात्मक शुद्धता के साथ भी ऐसा ही है।
तिखन जेल्विस

8

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


4
यह एक तार्किक रूप से मान्य बिंदु है, लेकिन ओपी के प्रश्न के अंतिम वाक्य पर "जिस तरह की प्रोग्रामिंग समस्याओं का आप अक्सर सामना करते हैं" के लिए इसे निपटाकर इसे सुधारा जा सकता है। (इससे कोई फर्क नहीं पड़ता कि अलग-अलग पाठक अलग-अलग समस्याओं का सामना करेंगे, बशर्ते वे बताए कि वे क्या हैं।)
j_random_hacker

4

यहां तक ​​कि अगर मुझे इसमें महारत हासिल है, तो मुझे एक व्यावसायिक उत्पाद के लिए एक कार्यात्मक भाषा का उपयोग करने के लिए विघटित किया जा सकता है, क्योंकि वे व्यापक रूप से समझ में नहीं आते हैं और अगर मुझे उम्मीद है कि व्यवसाय बढ़ने के लिए मैं अन्य डेवलपर्स को खोजने की क्षमता के बारे में चिंतित हूं समय के साथ इसे बनाए रखना या इसका विस्तार करना।

यह समझ से बाहर नहीं है, और आपको शायद डेवलपर का एक उच्च स्तर मिलेगा क्योंकि कोई वास्तविक हैकिंग कौशल के साथ एक javaschool grad को यह नहीं पता होगा कि उस प्रकार के प्रोजेक्ट पर कहां से शुरू करना है, लेकिन सक्षम डेवलपर्स का सीमित पूल निश्चित रूप से एक आवश्यक विचार होगा। व्यावसायिक दृष्टिकोण से।


2

बाजार के लिए समय

प्रक्रियात्मक कोड और मंत्रों के एक पूर्ण आईटी परिदृश्य से छुटकारा पाना मुश्किल है।


1
कार्यात्मक कार्यक्रमों को अक्सर परीक्षण करना आसान होता है। और वे छोटे हैं। इसलिए असहमत हैं। मुझे लगता है कि आप एक और सवाल का जवाब देते हैं "मजेदार प्रोग्रामिंग पर स्विच करने के खिलाफ आपकी सबसे मजबूत राय क्या है?"।
जोनास


2

सबसे पहले मैं राज्य-फुल प्रोग्रामिंग और एफपी के बारे में किसी भी तर्क को स्वीकार नहीं करता हूं। हैस्केल में स्टेट मोनाड पर गौर करें और आपको अपने कोड पर राज्य के प्रभाव का आकलन करने के लिए कई दिलचस्प नए तरीके मिलेंगे।

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

मुझे लगता है कि मेरा जवाब मुझे एक fp fanboy के रूप में दिखाता है। मैं सुझाव देता हूं कि हेकेल जैसी वास्तविक एफपीआई भाषा को एक गंभीर स्पिन देने से पहले आपको कारणों की तलाश करने की चिंता करनी चाहिए कि आपको क्यों नहीं करना चाहिए।


6
मुझे लगता है कि आपका पहला पैराग्राफ ठीक-ठीक बताता है कि एफपी मानसिकता के साथ क्या गलत है। हम "हमारे कोड पर राज्य के प्रभाव का आकलन करने के लिए दिलचस्प नए तरीके नहीं चाहते हैं ।" उस समतल का क्या मतलब है?!? हम चाहते हैं कि राज्य वहां हो और आसानी से सुलभ हो, क्योंकि हमें वास्तव में काम
मेसन व्हीलर

2
कैमरी I ड्राइव में इसकी समस्याएं हैं, लेकिन इससे मुझे अंतरिक्ष लीक के लिए हुड के नीचे लगातार जांच करने की आवश्यकता नहीं है । हास्केल एक ऐसी भाषा की तरह है जो एफ 1 कार की तरह दिखती है , लेकिन वास्तव में निरंतर अवधि के लिए उच्च रेव्स नहीं कर सकती है। :-P
j_random_hacker

1
@ मेसन व्हीलर: "हम अपने कोड पर राज्य के प्रभाव का आकलन करने के लिए दिलचस्प नए तरीके नहीं चाहते हैं।" इसके बजाय, हम अवांछित साइड-इफ़ेक्ट (मैं व्यक्तिगत अनुभव से बात करता हूं) के कारण एक सप्ताह के लिए बहुत बुरा बग नीचे ट्रैकिंग करना पसंद करता हूं।
जियोर्जियो

@ ब्रैड पंजा: मुझे लगता है कि एफपी में दुष्प्रभावों को नियंत्रित करने का पूरा मुद्दा कोडिंग को और अधिक उत्पादक बनाने के लिए काम कर सकता है: इसे लिखने में अधिक समय लगता है लेकिन इसे ठीक करने में कम समय लगता है। दुर्भाग्य से किसी को पहले सीखने में काफी प्रयास करना पड़ता है, और बहुत से प्रोग्रामर के पास यह दीर्घकालिक सोच नहीं है: चीजें जल्दी से पूरी होनी चाहिए। पहली बार इसे ठीक से करने का कोई समय नहीं है, लेकिन हमेशा बाद में डिबग करने और इसे ठीक करने का समय होता है। :-)
जियोर्जियो

@ मेसन व्हीलर: एक कार्यात्मक दृष्टिकोण से, एक साझा स्थिति केवल अनुकूलन उद्देश्यों के लिए उपयोगी है: चारों ओर मूल्यों की प्रतिलिपि बनाने में बहुत अधिक समय और स्मृति लगती है, इसलिए आप अनावश्यक प्रतिलिपि से बचने के लिए डेटा ऑब्जेक्ट साझा करते हैं। लेकिन शुरुआत से ही एक साझा राज्य को एक नियम के रूप में लागू करना एक प्रकार का समय से पहले का अनुकूलन है।
जियोर्जियो

2

मैं कार्यात्मक प्रोग्रामिंग का बहुत बड़ा प्रशंसक और वकील हूं। लेकिन यहाँ मेरे बिंदु हैं:

  • आसान जानने के लिए
    अजगर और गहरे लाल रंग का (और कई अन्य भाषाओं में) जैसी भाषाओं प्रोग्रामिंग सीखना आसान कर रहे हैं। Haskell, Agda, Coq, ATS, आदि भाषाओं के साथ उन्नत कार्यात्मक प्रोग्रामिंग, सीखना काफी कठिन है। कुछ शब्द "गणितीय संरचित प्रोग्रामिंग" का उपयोग करते हैं। यदि आप श्रेणी सिद्धांत और अमूर्त गणित से परिचित हैं, तो यह आसान है, लेकिन कुछ काम अगर आपके पास कोई सुराग नहीं है, उदाहरण के लिए "सनक" क्या हैं।

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

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

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

इसके अलावा, कार्यात्मक प्रोग्रामिंग बहुत उपयोगी है जब औपचारिक सत्यापन एक लाभ या एक आवश्यक है।


3
"सीखने में आसान": मुझे आधुनिक C ++ में महारत हासिल करने से ज्यादा कठिन मास्टर हास्केल नहीं लगता। मुझे लगता है कि हम उस मुश्किल पर विचार करते हैं, जिससे हम परिचित नहीं हैं।
जियोर्जियो

1

मैं एफपी के लिए एक उपयोगी प्रतिमान के रूप में विरोध नहीं कर रहा हूं, लेकिन मैं इसका विरोध केवल प्रोग्रामिंग भाषा में उपलब्ध प्रतिमान के रूप में कर रहा हूं।

यह बहुत सारी समस्याओं को हल करने में लाभ प्रदान करता है। हालांकि, एफपी, और सी जैसी प्रक्रियात्मक भाषाओं में लागू किया जा सकता है।


पहले वाक्य से सहमत, दूसरे से असहमत। आप मूल रूप से कचरा संग्रहण के बिना FP नहीं कर सकते।
dsimcha

"प्रक्रियात्मक" लेबल को फिट करने के लिए किसी भाषा की रनटाइम प्रणाली में पारदर्शी मेमोरी प्रबंधन (कचरा संग्रह के साथ) की कमी होती है, इसलिए यह विडंबना है कि आपने अपना दूसरा वाक्य इस तरह से बनाया है। बेसिक एक ऐसी भाषा है।
हपरनिकेतेस

"आप मूल रूप से कचरा संग्रहण के बिना FP नहीं कर सकते।" - क्यूं कर?
क्वांट_देव

+1 सबसे बुनियादी स्तर पर कार्यात्मक प्रोग्रामिंग स्टेटलेस प्रोग्रामिंग है। मुझे नहीं लगता कि कोई भी भाषा है जो कुछ हद तक ऐसा नहीं कर सकती है । मैंने C, C ++, Java, असेंबली, C #, यहां तक ​​कि बेसिक में फंक्शन्स लिखे हैं। सभी आवश्यक है कि फ़ंक्शन के साइड इफेक्ट्स न हों या कॉल के बीच स्थिति बनाए रखें।
माइकल के

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

1
  1. (और अब तक का सबसे महत्वपूर्ण) प्रोग्रामर कार्यबल उन भाषाओं या शैलियों में प्रशिक्षित नहीं है
  2. बहुत से कार्यात्मक प्रचारक एक छेद या फल के रूप में बंद हो जाते हैं क्योंकि वे जिस तरह से कार्यात्मक बेचने की कोशिश करते हैं। कोई भी एक छेद पसंद नहीं करता है, और कोई भी एक फ्रूटकेक के पीछे पैसा फेंकने वाला नहीं है। माइंड यू, मैं वास्तव में कार्यात्मक सामान पसंद करता हूं और इसे अंदर खींचना चाहता हूं, लेकिन मुझे पता है कि मेरे कार्यस्थल पर मैं एकमात्र व्यक्ति होगा जो इसे प्रशिक्षण (कठिन बिक्री) पर पैसा खर्च किए बिना विकसित कर सकता है, और लगभग सभी अच्छे संदर्भ पाठक पर बात करते हैं।

जब हमारे पास सैकड़ों कोर होंगे तब क्रियात्मकता आएगी और यह अहसास होगा कि ताले पैमाने पर नहीं हैं। तब नेस्टेड डेटा समानांतर "बड़े लोहे" कार्यक्रमों के लिए जाने का एकमात्र तरीका होगा, और उस पर कार्यात्मक एक्सेल।


0

एफपी एकेडेमिया में अच्छा है क्योंकि प्रदर्शन को नजरअंदाज करते हुए, अच्छे कार्यक्रमों को लिखना अच्छा है। वास्तविक दुनिया में इसके खिलाफ कुछ साजिश नहीं है। उदाहरण के लिए कुछ सामान को लागू करना (उदाहरण के लिए मूलांक सॉर्ट) एफपी में कुल दर्द की तरह लगता है। ओह और उत्पन्न कोड IMHExperience sloooooooooooooooooooow है।


4
हाँ, यह सिर्फ असत्य है। हास्केल कोड आमतौर पर सी और जावा के बराबर होता है, और पायथन और दोस्तों की तुलना में बहुत तेज होता है। यह आमतौर पर समानांतर बनाने के लिए तुच्छ है, संभवतः और भी अधिक गति दे रहा है।
तिखन जेल्विस

0

कुछ में एक सीखने की अवस्था काफी खड़ी होती है, जिसमें लंबा समय लगता है (विशेषकर यदि आप OOP से आते हैं, तो आप प्रतिमान शिफ्ट होने से कुछ समय पहले अपना सिर काट लेंगे)।

हालाँकि मुझे कार्यात्मक प्रोग्रामिंग (जावा से आने और क्लोजर तक जाने) की शुरुआत हुई थी, फिर भी मुझे यह काफी मुश्किल लगता है। समुदाय कोड को जावा के रूप में अभिव्यंजक लिखने के लिए प्रतीत नहीं होता है।

ऐसा लगता है कि अभिव्यक्ति में थोड़ी कमी है और जटिलता में थोड़ी वृद्धि हुई है।


मुझे लगता है कि पिछले प्रोग्रामिंग अनुभव के बिना लोग कहेंगे कि ओपी के पास एफपी की तुलना में सीखने की अवस्था है, क्योंकि एफपी गणित के करीब है। मुझे समझ नहीं आ रहा है कि "आप समुदाय को जावा के रूप में अभिव्यंजक कोड लिखने के लिए नहीं लगता है", आपकी बात क्या है?
जोनास

मैंने कार्यात्मक भाषा को अभिव्यक्तता खोने के बारे में कभी नहीं सुना। लेकिन फिर मैंने कभी भी जावा की तुलना में कम अभिव्यंजक भाषा का उपयोग नहीं किया है, इसलिए मेरे पास "अभिव्यंजक" का एक अलग प्रकार का दोष हो सकता है।
ग्लेनट्रॉन

@ जोनास - एक साधारण बात की वजह से: फ़ंक्शंस, वेरिएबल्स आदि के लिए शॉर्टकट नामों का मतलब ... मेरा मतलब केवल उन चीज़ों का नाम क्यों नहीं है जो वे हैं या करने वाले हैं? "pmap" क्यों?
बेलुन

1
@ बेलन: ऐसा करने के लिए कार्यात्मक प्रोग्रामिंग के साथ कुछ भी नहीं है। आपको एक विशिष्ट प्रोग्रामिंग भाषा का उल्लेख करना चाहिए। मानचित्र कई कार्यात्मक प्रोग्रामिंग भाषाओं में एक सामान्य कार्य है, और इसका एक अच्छा नाम हैpmapआप एक समान संस्करण का उल्लेख कर सकते हैं।
जोनास

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

0

भले ही मुझे कार्यात्मक प्रोग्रामिंग भाषाओं के साथ बहुत कम अनुभव है (मैं कुछ हास्केल और लिस्प जानता हूं) मुझे एफपी प्रतिमान बहुत शक्तिशाली लगता है और अक्सर अन्य प्रतिमानों की तुलना में अधिक सुरुचिपूर्ण होता है। काश, मुझे एफपी का उपयोग करके एक गंभीर परियोजना पर काम करने का अवसर मिला।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.