कार्यात्मक प्रोग्रामिंग के लिए वर्तमान उत्साह क्यों? [बन्द है]


50

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

मुझे यह पसंद है, यह वास्तव में मजेदार है, और मेरी गणित पृष्ठभूमि को फिट बैठता है।

लेकिन क्या कभी ऐसा होगा? जाहिर है, यह शायद ही एक नया विचार है।

यहाँ मेरे सवाल हैं:

  1. हाल के एफपी उत्साह में क्या योगदान दिया है? क्या ओ ओ के साथ केवल बोरियत है, या एफपी को पहले की तुलना में अधिक आवश्यक बनाने के लिए कुछ बदल गया है?
  2. क्या यह एफपी भविष्य का संकेत है? या यह एक सनक है, ऑब्जेक्ट ओरिएंट डेटाबेस की तरह?

दूसरे शब्दों में, क्या कोई मुझे यह समझने में मदद कर सकता है कि यह कहां से आता है और कहां जा रहा है?



13
डुप्लिकेट नहीं - यह पूछ रहा है कि लोग अचानक उपद्रव क्यों कर रहे हैं, क्योंकि यह एक नया विचार नहीं है, (जबकि यह सवाल उद्देश्य अंतर के लिए अधिक पूछ रहा है)।
पीटर बॉटन

2
लोग एफपी पर हाल ही में एक उपद्रव कर रहे हैं? मेरे लिए समाचार, मुझे लगा कि यह हमेशा मामला था कि कुछ समूह इस बात को लेकर उपद्रव कर रहे थे कि एफपी कैसे अनिवार्य प्रोग्रामिंग दुनिया को संभालने जा रहा है।
क्रिस

1
मुझे लगता है कि मैंने इस सवाल का जवाब StackOverflow पर पहले दिया है।
केन ब्लूम

1
हाँ - एफपी पहले से ही पुराना था जब मुझे लगता है कि मैं 1989 में कोलंबिया में अंडरग्राउंड के रूप में योजना का उपयोग कर रहा था। यह चमकदार नई बात है जो मुझे लगता है।
टिम

जवाबों:


33

एफपी में प्रमुख नवाचारों में से एक है जिसके परिणामस्वरूप ब्याज का "विस्फोट" होता है।

फिलिप वाडलर ने 1992 के जनवरी में द एस्सेन्स ऑफ़ फंक्शनल प्रोग्रामिंग नामक एक पेपर लिखा था जिसमें आईओडी से निपटने के तरीके के रूप में मठों को कार्यात्मक प्रोग्रामिंग में पेश किया गया था।

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

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

मठवासी IO की समस्या का समाधान कैसे करते हैं? भिक्षुओं के बारे में बहुत अधिक चर्चा किए बिना, वे मूल रूप से "वर्ल्ड" (रनटाइम वातावरण) को मोनाड के इनपुट के रूप में लेते हैं, और आउटपुट के रूप में एक नया "वर्ल्ड" बनाते हैं, और परिणाम: टाइप करें IO a = World -> (a) विश्व)।

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

अधिक जानकारी के लिए, मैं अपने उत्तर में संदर्भित मोनाड्स और कागजात के बारे में पढ़ने की सलाह देता हूं।


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

एक अधिक प्रासंगिक उदाहरण type IO a = UI -> (a, UI)हालांकि एक शानदार जवाब होगा ।
ChaosPandion

@ रिचर्ड: "टाइप IO a = वर्ल्ड -> (ए, वर्ल्ड)" लगभग सच होने के लिए बहुत अच्छा लगता है (मुझे लगा कि मुझे कभी भी सन्यासी नहीं मिलेगा)। मुझे लगता है कि आप LINQ को भिक्षुओं से पसंद करते हैं क्योंकि जब आप एक लैम्ब्डा को LINQ ऑपरेटर में पास करते हैं, तो लैम्ब्डा अपने पूरे वातावरण को "देखता है", क्या यह सही है?
स्टीफन मोनोव

@ सेफ़ान: यह कहने में कुछ सटीक लगता है कि लैम्ब्डा पर्यावरण को देखता है, लेकिन मैं उस पर 100% स्पष्ट नहीं हूं, इसलिए मैं जवाब देने में संकोच करता हूं जब तक कि मैं खुद को और अधिक नहीं सीखता। हालांकि, मैं 100% निश्चितता के साथ कह सकता हूं, कि LINQ मोनड है, क्योंकि रचनाकारों ने कई अवसरों पर ऐसा कहा है। SelectMany Haskell में बिंद के बिल्कुल बराबर है। यदि आपने "The Marvels of Monads" ( blogs.msdn.com/b/wesdyer/archive/2008/01/11/… ) नहीं पढ़ा है, तो मैं अत्यधिक अनुशंसा करता हूं ... यह प्रकट करेगा कि LINQ वास्तव में सन्यासी कैसे है। चीयर्स।
रिचर्ड एंथनी हेन

1
@Job, ऊपर दिए गए टिप्पणी में संदर्भित के रूप में blogs.msdn.com/b/wesdyer/archive/2008/01/11/… देखें ।
रिचर्ड एंथनी हेन

30

सी, जावा, सी #, असेम्बलर इत्यादि पारंपरिक भाषाओं की प्रोग्रामिंग करते समय एक बड़ी समस्या यह है कि आपके पास दिए गए कार्य को पूरा करने के लिए आपके द्वारा उठाए जाने वाले कदमों का एक अजीब क्रम है क्योंकि आपको पहले सभी निर्भरताओं को तैयार करने की आवश्यकता है उनकी निर्भरता पहले

एक उदाहरण: ए करने के लिए, आपके पास बी और सी मौजूद होना चाहिए, और बी डी और ई पर निर्भर करता है, जिसके परिणामस्वरूप कुछ ऐसा होता है

  • डी
  • सी
  • बी

क्योंकि आपके पास उन्हें तैयार करने से पहले सामग्री होनी चाहिए।

कार्यात्मक भाषाएं, विशेष रूप से आलसी लोग, इसे उल्टा करते हैं। A के कहने से इसे B और C की आवश्यकता होती है, और B और C को प्राप्त करने के लिए भाषा रनटाइम का पता लगाने दें (जो बदले में D और E की आवश्यकता होती है) जिसमें से सभी का मूल्यांकन किया जाता है जब A का मूल्यांकन करने की आवश्यकता होती है, तो आप बहुत छोटा और संक्षिप्त बना सकते हैं बिल्डिंग ब्लॉक, जिसके परिणामस्वरूप छोटे और संक्षिप्त कार्यक्रम होते हैं। आलसी भाषा भी अनंत सूचियों का उपयोग करने की अनुमति देती है क्योंकि केवल उपयोग किए जाने वाले तत्वों की वास्तव में गणना की जाती है, और इसका उपयोग करने में सक्षम होने से पहले पूरे डेटास्ट्रक्चर को मेमोरी में संग्रहीत करने की आवश्यकता के बिना।

वास्तव में अच्छा चाल, कि यह स्वत: तंत्र है "ओह, मैं एक बी और सी की जरूरत है" है स्केलेबल अनुक्रमिक कार्यक्रम में के रूप में - - कब और कहाँ इस मूल्यांकन हो सकता है के बारे में, तो यह हो सकता कोई प्रतिबंध नहीं है क्योंकि एक ही समय और यहां तक ​​कि विभिन्न प्रोसेसर या कंप्यूटर पर भी।

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


3
यह 1950 में सही था, ज़ाहिर है।
एरिक विल्सन

1
@FarmBoy, वास्तव में नहीं, लेकिन यह आज है।

5
यह निर्भरता इंजेक्शन से कैसे भिन्न होता है?
बिल के

2
@ बिल के, उत्कृष्ट अवलोकन - मैंने स्वयं उस संबंध को नहीं बनाया था। अंतर यह है कि वस्तुओं को इंजेक्ट किया जाना चाहिए - कम से कम जावा में - उत्सुकता से मूल्यांकन किया जाता है, न कि आलसी मूल्यांकन किया जाता है। आप एक अनंत सूची को इंजेक्ट नहीं कर सकते।

1
@ Thorbjørn रावन एंडरसन मुझे यकीन नहीं है कि मैं समझता हूं कि एक अनंत सूची उपयोगी क्यों होगी, क्या आप वास्तव में (अनंत सूची) प्रकार के कार्यों का योग कर सकते हैं? बहुत असंभावित लगता है। अन्यथा ऐसा लगता है कि जावा जिस तरह से पुनरावृत्तियों का उपयोग करता है, आप सिर्फ इटेरेटर को इस तरह से कोड करते हैं कि यह वस्तुओं को केवल तब ही इंस्टाल करता है जब आप उनके लिए पूछते हैं - काफी अनंत नहीं, लेकिन कभी न खत्म होने वाला (एक बड़ा अंतर है, एह? )
बिल के

21

80 के दशक के उत्तरार्ध में / 90 के दशक की शुरुआत में स्मॉलटाकल-शैली OOP के लिए कंप्यूटर काफी शक्तिशाली बन गए। आजकल कंप्यूटर एफपी के लिए पर्याप्त शक्तिशाली हैं। एफपी एक उच्च स्तर पर इस तरह से अक्सर प्रोग्रामिंग कर रहा है - जबकि प्रोग्राम में अधिक सुखद है - सबसे कुशल तरीका एक निश्चित समस्या को हल नहीं करता है। लेकिन कंप्यूटर इतने तेज़ होते हैं कि आपको कोई परवाह नहीं है।

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

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


6
एक उत्तर जोड़ने जा रहा था, लेकिन आपने मेरी बात को अपने अंतिम वाक्य में मारा; कार्यात्मक प्रोग्रामिंग अधिक से अधिक प्रचलित होने जा रहा है क्योंकि एक मशीन में कोर की संख्या बढ़ जाती है। राज्य की अंतर्निहित कमी से प्रोसेसर के पार यांत्रिक रूप से कार्यात्मक कार्यक्रमों को विभाजित करना आसान हो जाता है (जिसका अर्थ है कि यदि आपके पास विशुद्ध रूप से कार्यात्मक कार्यक्रम है, तो संकलक सैद्धांतिक रूप से आपके लिए समानांतर प्रयास का ध्यान रख सकता है, जो आपके लिए न्यूनतम प्रयास youtube.com/watch देखें ? v = NWSZ4c9yqW8 डेटा समानता की चर्चा के लिए)।
इनामाथी

1
@ इमानाथी दितो फ़ंक्शनल प्रोग्रामिंग बहुत स्केलेबल है, इसलिए यह मल्टी-कोर आर्किटेक्चर पर समझ में आता है।
एरोबोर्स्मा

ध्यान दें कि मेरी पहली टिप्पणी उत्तर को संपादित करने से पहले लिखी गई थी जिसमें एक अतिरिक्त विवरण शामिल था।
इनामाथी

उसके लिए खेद है। मैं यह बात भूल गया।
लैनीप्रोग्रामर्स 14

क्या यह आम तौर पर स्वीकार किया जाता है कि कार्यात्मक संकलक मशीन कोड का उत्पादन ओओपीएस के रूप में अनुकूलित नहीं कर सकता है? मैं किसी भी सैद्धांतिक कारण के बारे में नहीं सोच सकता कि यह सच क्यों होना चाहिए; और मैं उन तरीकों के बारे में सोच सकता हूं जो एक OOPS की तुलना में अधिक उन्नत अनुकूलन संभव हैं।
जेरेमी

7

वितरित कंप्यूटिंग के लिए आवश्यकता होती है।

एफपी बिल्डिंग ब्लॉक के रूप में फ़ंक्शन का उपयोग करता है, जिसमें राज्य नहीं है, इसलिए उन्हें एक ही पैरामीटर के साथ n बार इनवॉइस करना हमेशा एक ही मूल्य वापस करना चाहिए, उनके दुष्प्रभाव नहीं हैं।

इस प्रकार, आप समान फ़ंक्शन को प्रदर्शन करने के लिए मशीनों के एक समूह में भेज सकते हैं और कार्य को समानांतर में कर सकते हैं।

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

एफपी (और कुछ हद तक NoSQL) का आगमन समानांतर में काम करने वाले सैकड़ों कंप्यूटरों में अद्भुत कंप्यूटिंग परिणामों के बारे में कहानियों के बाद आता है, और यह कितना आसान है।

लेकिन शायद यह केवल एक आला प्रकार का अनुप्रयोग है जिसे इस तरह के सेटअप की आवश्यकता है। कई के लिए, कई अन्य एप्लिकेशन / सिस्टम, प्रक्रियात्मक और OO ठीक काम करते हैं।

तो यह सब हमारे प्रोग्रामिंग क्षितिज का विस्तार करने और इन अवधारणाओं को फिर से लेने के बारे में है जो हमने सोचा था कि एक बार शिक्षा से परे नहीं जाना होगा।

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


2
सवाल एफपी जैसी भाषाओं के फायदे के बारे में पूछ रहा है । आपने जो वर्णन किया है, वह पारंपरिक भाषाओं का उपयोग करके भी किया जा सकता है।
पचेरियर

6

हम एक ऐसे युग में जा रहे हैं जहाँ मल्टी-कोर प्रोसेसिंग विज्ञान प्रयोगशालाओं के पीछे के कमरों में या विशेष हार्डवेयर पर कुछ नहीं किया गया है। अब यह कमोडिटी प्रोसेसर के साथ किया जा रहा है। फ़ंक्शनल प्रोग्रामिंग, कम से कम अधिकांश वेरिएंट जिनसे मैं अवगत कराया गया हूं, आम तौर पर साइड-इफ़ेक्ट फ्री, स्टेटलेस कम्प्यूटेशनल इकाइयों पर एक दृश्य को आगे बढ़ाने का प्रयास करता है। यह मल्टी-कोर कार्य के लिए सर्वोत्कृष्ट प्रतिमान है क्योंकि प्रोसेसर के बीच राज्य को चालू रखने की कोई आवश्यकता नहीं है।

यह केवल एक कारण है लेकिन कार्यात्मक प्रोग्रामिंग को पकड़ते हुए देखने के लिए एक अच्छा कारण है।


5

मुझे लगता है कि इस सवाल का मुख्य जवाब 'एक्सपोजर' है।

फ़ंक्शनल प्रोग्रामिंग कोई नई बात नहीं है, मुझे कुछ 12 साल पहले यूनिवर्सिटी में हास्केल पढ़ाया गया था और वह इससे प्यार करता था। लेकिन शायद ही कभी मेरे पेशेवर काम में भाषा का उपयोग किया गया।

हाल ही में मुख्य धारा में कर्षण प्राप्त करने वाली कई भाषाएँ रही हैं जो बहु-प्रतिमान दृष्टिकोण का उपयोग करती हैं; एफ # , जावास्क्रिप्ट प्रमुख उदाहरण हैं।

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

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

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

याद रखें कि कोड को बनाए रखना होगा - कंपनियों का एक महत्वपूर्ण द्रव्यमान कंपनियों को उनका उपयोग करने में सुरक्षित महसूस करने के लिए भाषाओं का उपयोग और समर्थन करना चाहिए।


3

में इस बात एंडर्स हेल्स्बर्ग विषय पर उनके विचार बताते हैं।

[संपादित करें]

क्षमा करें, लिंक गलत था। अब यह सही जगह की ओर इशारा करता है।

एक घंटे की बात के कुछ बिंदुओं का अत्यंत संक्षिप्त सारांश:

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

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


1
क्या आप संक्षेप में बता सकते हैं?

1
@ थोरबॉर्न यह मुझे उस आदमी की याद दिलाता है जो संक्षेप में नहीं बता सकता था । (निर्देशन नहीं है कि आप पर, जवाब लेखक।)
मार्क सी

1
लिंक सही जगह पर लिंक भी नहीं करता है।
केन ब्लूम

2

मुझे लगता है कि यह वेब के लिए कार्यात्मक प्रोग्रामिंग प्रतिमान और प्रोग्रामिंग के बीच घनिष्ठ संबंध के साथ करना है।

रूबी ऑन रेल्स ने पूरे कार्यात्मक प्रोग्रामिंग दृष्टिकोण को तेज राहत में लाया क्योंकि यह एक कार्यात्मक (हेह हेह) वेब एप्लिकेशन के लिए बहुत ही त्वरित मार्ग प्रदान करता है। नहीं है अतः पर एक दिलचस्प चर्चा इस बारे में, और एक विशेष जवाब बाहर खड़ा है:

फ़ंक्शनल प्रोग्रामिंग वेब ऐप्स से बहुत अच्छी तरह मेल खाता है। वेब ऐप एक HTTP अनुरोध को पुन: प्राप्त करता है और एक HTML परिणाम तैयार करता है। इसे अनुरोधों से पृष्ठों तक एक समारोह माना जा सकता है।

डेस्कटॉप एप्स के साथ तुलना करें, जहां हमारे पास आमतौर पर एक लंबी चलने वाली प्रक्रिया, एक स्टेटफुल यूआई और कई दिशाओं में डेटाफ्लो है। यह OO के लिए अधिक अनुकूल है जो राज्य और संदेश के साथ वस्तुओं के बारे में चिंतित है।

यह देखते हुए कि कार्यात्मक प्रोग्रामिंग उम्र के लिए किया गया है, मुझे आश्चर्य है कि मैं ग्रीनफील्ड वेब परियोजनाओं के लिए लिस्प डेवलपर्स की तलाश में कई नौकरी विज्ञापन क्यों नहीं देखता हूं।


मुझे लगता है कि कार्यात्मक सादृश्य केवल संयोग से वेब पर लागू होता है, अंतर्निहित प्रोटोकॉल के लिए स्टेटलेस है। वेब एप्लिकेशन वास्तव में स्टेटलेस नहीं होते हैं, जो वास्तव में एक कारण है कि हमें हमेशा किसी तरह HTTP पर काम करना पड़ता है।
म्लादेन जेबलानोविक 14

@ म्लादेन हम्म, क्या यह संभव है कि आप ग्राहक-सर्वर संचार राज्य (HTTP) को एप्लीकेशन स्टेट (DAO) के साथ भ्रमित कर रहे हैं? यहाँ से स्टीफन Tilkov का हवाला देते हुए ( codemonkeyism.com/stateless-applications-illusion ) "एक वेब अनुप्रयोग में प्रत्येक व्यक्ति के अनुरोध के लिए पर्याप्त जानकारी शामिल करना चाहिए या नहीं, जो पिछले अनुरोध किया है या नहीं होती है। लगातार सर्वर साइड संसाधन की स्वतंत्र रूप से processable होने के लिए राज्य ठीक है, क्लाइंट-साइड राज्य ठीक है, क्षणिक संचार (सत्र) राज्य नहीं है क्योंकि यह स्केलेबिलिटी और बुकमार्कबिलिटी को बर्बाद कर देगा। " यह REST का आधार है।
गैरी रोवे

1
आप यह जान सकते हैं कि क्यों कई नौकरी के विज्ञापनों में संभावित डेवलपर्स की तलाश नहीं की जाती है, इसकी बेहतर समझ पाने के लिए paulgraham.com/avg.html पढ़ना चाहते हैं ।

@ Thorbjørn रावन एंडरसन अच्छा लेख। मुझे अपने लिस्प संपादक को तोड़ने के लिए प्रेरित करता है।
गैरी रोवे

1

कार्यात्मक प्रोग्रामिंग मुझे " वाह, यह नया है " के समान झुनझुनी देता है जब मैंने पहली बार वस्तुओं के साथ डबिंग शुरू की थी।

मुझे एहसास है कि एफपी अब तक एक नई अवधारणा नहीं है, लेकिन न तो ओओ था जब नब्बे के दशक में इसका असली ब्रेक मिला जब "सब" अचानक प्रक्रियात्मक प्रोग्रामिंग से जहाज कूद गया। यह काफी हद तक जावा और बाद में C # की समय पर सफलता के कारण था।

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


OO FP से काफी छोटा है, लेकिन यह पहले से काफी सुर्खियों में है। मुझे लगता है कि कोष्ठक बहुत अधिक लोगों
जेवियर

1

यहाँ मेरे प्रश्न हैं: 1. हाल के एफपी उत्साह में क्या योगदान दिया है? क्या ओ ओ के साथ केवल बोरियत है, या एफपी को पहले की तुलना में अधिक आवश्यक बनाने के लिए कुछ बदल गया है? 2. क्या यह एफपी भविष्य का संकेत है? या यह एक सनक है, ऑब्जेक्ट ओरिएंट डेटाबेस की तरह?

दूसरों ने अच्छे तकनीकी कारण दिए हैं।

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

यह भविष्य में व्यापक उपयोग होगा यदि वादा वास्तविक है और पूरा हो गया है।


यह एक बड़ा "अगर" है। COBOL, "अंग्रेजी में" होने का मतलब था कि कोई भी कार्यक्रम कर सकता है। AI प्रोग्रामिंग को अप्रचलित बनाने जा रहा था। OO प्रोग्रामिंग को टिंकटरॉयस को असेंबल करने के समान सरल बनाने वाला था। कोडर्स रॉक ग्रुपियों की तरह हैं, हमेशा "अगली बड़ी चीज" की तलाश में रहते हैं, और उसके बाद एक, और एक ...
माइक डनलैवी

0

मुझे लगता है कि यह दो रुझानों का एक संयोजन है:

  1. मुख्यधारा की भाषाओं (जैसे C #) में कार्यात्मक विशेषताएं जोड़ी जा रही हैं।
  2. नई कार्यात्मक भाषाएँ बनाई जा रही हैं।

पहली प्रवृत्ति पर शायद एक प्राकृतिक सीमा है, लेकिन मेरा अनुमान है कि किसी भी नई भाषा को कार्यात्मक प्रोग्रामिंग का समर्थन करना होगा, कम से कम एक विकल्प के रूप में, गंभीरता से लिया जाना चाहिए।


0

यह हुआ करता था कि लोग ऑपरेटिंग सिस्टम के मूल एपीआई का उपयोग करके डेस्कटॉप पर चलने के लिए प्रोग्राम लिख रहे थे, और वे एपीआई सी (आमतौर पर) सी में लिखे गए थे, इसलिए अधिकांश भाग के लिए यदि आप मूल एपीआई के लिए एक प्रोग्राम लिखना चाहते थे, तो आप सी में वह कार्यक्रम लिखा।

मुझे लगता है कि पिछले 10 वर्षों में नया नवाचार एपीआई की विविधता के लिए है, विशेष रूप से वेब विकास जैसी चीजों के लिए, जहां प्लेटफॉर्म एपीआई अप्रासंगिक हैं (क्योंकि वेब पेज का निर्माण मूल रूप से स्ट्रिंग हेरफेर शामिल है)। चूंकि आप सीधे Win32 API या POSIX API पर कोडिंग नहीं कर रहे हैं, जिससे लोगों को कार्यात्मक भाषाओं को आज़माने की आज़ादी मिलती है।


0

यह साफ-सुथरा है और आपके दिमाग को गुदगुदी करता है। कोई बात नहीं।

यह भी, IMHO, एक क्लासिक बैंडवागन है। एक समस्या की तलाश में एक समाधान।

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

यह नया आइडिया है जिसे मैं देखना चाहता हूं, जरूरत-आधारित प्रोग्रामिंग, नॉट-आइडिया-आधारित प्रोग्रामिंग। हो सकता है कि सांसारिक लगता है, लेकिन मुझे लगता है कि यह वास्तव में बहुत रचनात्मक हो सकता है, और निफ्टी।


-1

निश्चित रूप से एफ # के कारण, हालांकि कभी-कभी यह बताना मुश्किल है कि कौन सा कारण है और कौन सा प्रभाव है।

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