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


88

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

क्या मुझे छड़ी का गलत अंत मिल गया है? क्या कार्यात्मक प्रोग्रामिंग पूरी तरह से वेब विकास से संबंधित है? यदि नहीं, तो क्या इसका कोई उदाहरण 'वेब के लिए' इस्तेमाल किया जा रहा है?

जवाबों:


31

मेरे सिर के ऊपर से कुछ उदाहरण:

  • याहू! स्टोर लिस्प द्वारा संचालित है (मूल रूप से अधिग्रहण से पहले वायावेब नाम दिया गया था )
  • रेडिट पूरी तरह से लिस्प में प्रोटोटाइप किए गए थे, हालांकि वे 2005 में पायथन में चले गए थे
  • हैकर समाचार पूरी तरह से आर्क (एक लिस्प बोली) में लिखा है

7
याहू! स्टोर को कुछ साल पहले सी ++ में फिर से लिखा गया था।
एपीजी

5
भाषा! = प्रोग्रामिंग प्रतिमान।
फकहलर

58
उदाहरण के अजीब विकल्प ... याहू! स्टोर को पॉल ग्राहम ने लिखा था, जो एक बड़ा लिस्प वकील है। उन्होंने हैकर समाचार भी लिखा, जो प्रभावी रूप से एक रेडिट क्लोन है। संभवतः, HN को लिस्प से पायथन में रेडिट के स्विच के जवाब में कुछ हद तक लिखा गया था, जबकि Reddit लोग YCombinator का हिस्सा थे: एक त्वरक प्रोग्राम जो पॉल ग्राहम द्वारा चलाया जाता है। मैं इसे एक उदाहरण के रूप में गिनूंगा, तीन नहीं।
ब्रैंडन ब्लूम

@ShermPendley सर्वर कॉन्फ़िगरेशन, नेटवर्क सेटअप और डेटाबेस एक्सेस भी प्रदर्शन के प्रमुख कारक हैं। वेब ऐप्स का स्क्रिप्ट निष्पादन समय आमतौर पर समग्र लागत का एक छोटा सा अंश होता है।
अगमलेउनर

62

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

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


20

मैं नहीं देखता कि क्यों - जब तक आप ब्राउज़रों को मानकों के अनुरूप HTML वितरित कर रहे हैं, वे परवाह नहीं करते हैं कि आप इसका उत्पादन क्या करते थे, यह एक कार्यात्मक भाषा, एक अनिवार्य भाषा या प्रशिक्षित बंदर हो।


20

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

उस ने कहा, कुछ विकल्प हैं।

  • HAppS - एक हास्केल वेब एप्लिकेशन सर्वर
  • हास्केल सर्वर पेज
  • लिंक - एक कार्यात्मक वेब प्रोग्रामिंग भाषा
  • mod_caml - Apache के लिए एक OCaml CGI मॉड्यूल
  • Ocsigen / Eliom - एक OCaml वेब सर्वर / प्रोग्रामिंग ढांचा
  • OPA - एक वाणिज्यिक वेब अनुप्रयोग रूपरेखा
  • यसोद - हास्केल के लिए एक वेब फ्रेमवर्क

मुझे इनमें से किसी के साथ कोई अनुभव नहीं है। हो सकता है कि टिप्पणीकार उनके लिए अच्छी तरह से काम कर सकें।


14

ट्विटर ने स्काला , एक JVM भाषा, जो ऑब्जेक्ट ओरिएंटेड और फंक्शनल दोनों प्रतिमानों का समर्थन करता है, में अपने बैकएंड को फिर से लिखा

साथ ही, लैफ्ट वेब फ्रेमवर्क को स्काला में लिखा गया है।


4

क्लोजर के लिए, एक दिलचस्प स्टार्टअप (TheDeadline) है जो क्लोजर और Google ऐप इंजन का उपयोग करके विकसित किया गया है। उनके पास स्लाइडशेयर पर एक अच्छा पीपीटी और इन्फोक्यू पर एक साक्षात्कार है।

जीएई के साथ क्लोजर को तैनात करने पर एक अच्छी चर्चा के लिए: http://news.ycombinator.com/item?id=123958888

जहां तक ​​मुझे पता है, क्लोजर में कुछ वेब डेवलपमेंट लाइब्रेरी हैं। कम्पोज्योर रिंग कंज्यूर

आशा है कि यह आपके कुछ सवालों के जवाब देता है =) (मैं अभी शुरू कर रहा हूँ ..)

सबसे अच्छा, रयान


3

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

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


3

की जाँच करें ऊर / वेब । यह बहुत तेज़ है और इसका स्टैटिक टाइप सिस्टम HTML और SQL जैसी चीजों के बारे में जानता है ताकि यह सुरक्षा के बारे में सभी प्रकार की अच्छी बातों की गारंटी दे सके।


3

लगता है कि एर्लैंग को स्केलेबल वेब ऐप के लिए कुछ बुनियादी सुविधाओं में बहुत अधिक उपयोग हो रहा है। CouchDB और Riak डेटाबेस ज्यादातर Erlang में लिखे गए हैं, जैसा कि RabbitMQ संदेश कतारबद्ध सर्वर है। इसकी सफलता की एक कुंजी यह है कि यह संदेश साझा करने के माध्यम से संगामिति को संभालता है, जिसमें कोई साझा परिवर्तनशील स्थिति नहीं है। यह उन समस्याओं के बारे में सोचने का तरीका है जो किसी विशेष कार्यात्मक प्रोग्रामिंग भाषा से अधिक उपयोगी हैं।

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

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



2

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


2

जावास्क्रिप्ट (वेब ​​के FE भाग की भाषा और BE के साथ-साथ तेजी से बढ़ रही है) प्रति कार्य कार्यात्मक नहीं है, लेकिन कार्य पहले क्रम कार्यात्मक हैं


2

हमने अभी एक ऑनलाइन स्प्रेडशीट लॉन्च की है, जहां बैकएंड पूरी तरह से एर्लांग में लिखा गया है।

http://hypernumbers.com

किसी भी मानक से यह सबसे जटिल वेब-ऐप में से एक है जिसे आप मानसिक जटिलता के साथ एक जीएनआई के साथ बना सकते हैं।


2

यहां हास्केल का उपयोग करके वेब एप्लिकेशन बनाने में वेब डेवलपर का अनुभव है । हालाँकि कार्यात्मक भाषाएं बहुत सुरक्षित होती हैं और इनमें अच्छी संगति होती है, लेकिन उनमें हमेशा से ही सबसे अच्छी नस्ल की एपी की कमी रही है क्योंकि यह लंबे समय से अकादमिया की डार्लिंग रही है और अभी तक वास्तविक दुनिया में दृढ़ता से गले नहीं उतर रही है। मुझे उम्मीद है कि यह बहुत दूर नहीं है। एरलैंग पहले ही इसमें शामिल हो गया था।


1

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

कम से कम मेरा कारण तो यही है।


1

एक और संक्षिप्त जवाब: http://www.mlstate.com - एफपी पर आधारित एक पूर्ण वेब विकास मंच। भाषा के स्वच्छ शब्दार्थ सभी प्रकार की स्वचालित सुरक्षा और सुरक्षा विश्लेषण, अनुकूलन आदि की अनुमति देते हैं।

कैविएट: मैं वहां काम करता हूं।


1

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


0

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

अगर आप? यह उस समस्या पर निर्भर करता है जिसे आप हल कर रहे हैं। फ़ंक्शनल प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है और जहाँ आपको इसका उपयोग करना चाहिए वह उस समस्या पर निर्भर करता है जिसे आप हल कर रहे हैं।

निर्णय को सरल बनाने के लिए, सोचें कि क्या ओओपी अवधारणाओं का उपयोग करके कुछ समस्या को हल करना आसान है, जहां एन्कैप्सुलेशन, बहुरूपता, विरासत जैसी विशेषताएं आपके जीवन को आसान बना सकती हैं?

यदि हाँ, वहाँ कार्यात्मक प्रोग्रामिंग के लिए मत जाओ और बस OOPs का उपयोग करें। यदि आपका आवेदन जटिल संगणना / गणना / व्यावसायिक तर्क करने और भारी समवर्ती प्रसंस्करण को शामिल करने जा रहा है, तो कार्यात्मक प्रोग्रामिंग ऐसे मामलों में बहुत सारे उपकरण और लाभ प्रदान कर सकता है।

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

वेब विकास में कार्यात्मक प्रोग्रामिंग:

जावास्क्रिप्ट कार्यात्मक प्रोग्रामिंग का समर्थन करता है और जब हम वेब विकास के संदर्भ में होते हैं तो यह बहुत अधिक सहायक होता है। आर्क फ्रेमवर्क कार्यात्मक प्रोग्रामिंग सिद्धांतों से बहुत प्रभावित होता है और इसका उपयोग कई वेब अनुप्रयोगों में किया जाता है।

इसके अलावा, आप नीचे सूचीबद्ध कार्यात्मक प्रोग्रामिंग भाषाओं पर विकसित फ्रेमवर्क के साथ निर्मित और चलने वाले कई वेब एप्लिकेशन पा सकते हैं:

• वेबशेयर (एफ #)

• स्नैप (हास्केल)

• लिफ्ट (स्काला)

• ऑक्सजेन (OCaml)

• शिकागो बॉस, ज़ोटोनिक (एरलांग)

आशा है कि मेरा उत्तर किसी की मदद करेगा।


-2

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

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

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

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


1
दरअसल, पॉल ग्राहम का कहना है कि लिस्प्स बड़ा फायदा यह है कि यह "सबसे शक्तिशाली" भाषा उपलब्ध है। वह यह कहकर उनके तर्क का समर्थन करता है कि एक चौथाई भाग के माध्यम से (जैसे कि लाइसेब) लिस्प मैक्रोज़ था। अधिकांश भाषाओं में मेटा-प्रोग्रामिंग (विशेष रूप से 90 के दशक के मध्य में उपलब्ध) कठिन है। यह एक प्रोटोटाइप नहीं है अगर इसे उत्पादन सर्वर पर धकेल दिया जाए।
nmichaels
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.