2010-07-23 17 views
10

का उपयोग करता है संभव डुप्लिकेट: - सभी जरूरी भाषाओं
Why functional languages?लाभ और एक कार्यात्मक प्रोग्रामिंग भाषा

मैं C/C++, वीबी, और अंततः अजगर के साथ प्रोग्रामिंग शुरू कर दिया। मैंने प्रोग्रामिंग भाषाओं के बारे में एक कोर्स लिया और मेरी पहली कार्यात्मक भाषा - ओकैमल सीखा। बिलकुल बकवास था।

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

वैसे भी, पर्याप्त बात।

  1. कुछ फायदे क्या हैं जो एफपीएल आईपीएल के ऊपर पेश करते हैं?
  2. क्या ऐसा कुछ भी है जो आसानी से एक एफपीएल में किया जा सकता है जिसे आसानी से आईपीएल में नहीं किया जा सकता है?
  3. क्या एफपीएल के वास्तविक उपयोग के उदाहरण हैं, या क्या वे ज्यादातर अकादमिक अभ्यास के रूप में कार्य करते हैं? (जब मैं असली दुनिया कहता हूं, मेरा मतलब है कि एक ऐसी परियोजना जो भाषा के कार्यात्मक पहलू पर भारी निर्भर करती है और एक ऐसे परिदृश्य में एफपीएल को क्रैम नहीं करती है जहां यह संबंधित नहीं है)।

धन्यवाद,
अद्वैत

+2

अधिकतर नकल: http://stackoverflow.com/questions/36504/ क्यों-कार्यात्मक-भाषा –

+1

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

+0

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

उत्तर

14

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

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

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

कम से कम, मैं दावा करने वाला पहला व्यक्ति नहीं होगा कि एक कार्यात्मक भाषा सीखना आपको एक बेहतर अनिवार्य प्रोग्रामर बनाता है! OCaml का उपयोग करते समय आपकी "अनिवार्य" विचार प्रक्रिया में बाधा डालने वाली असुविधा वास्तव में वास्तव में एक अच्छी प्रक्रिया है। यह आपको धारणाओं पर सवाल उठाता है और आपको किसी विशेष तरीके से कोड लिखने से रोकता है क्योंकि आपने हमेशा ऐसा किया है।

असली दुनिया के उपयोग के लिए, आप Commercial Users of Functional Programming कार्यशालाओं की कार्यवाही को देखना चाहेंगे। विभिन्न कार्यात्मक भाषाओं में लिखी गई कुछ बहुत बड़ी परियोजनाएं भी हैं, हालांकि उनमें से अधिकतर शायद छोटे समुदायों के बाहर सीमित रुचि के हैं। प्रमेय प्रोवर्स कोक और इसाबेल क्रमश: ओकम्ल और एसएमएल में लिखे गए हैं।

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

+0

विशेष रूप से, फेसबुक पर फ़ंक्शनल प्रोग्रामिंग के उपयोग के बारे में यह वीडियो वास्तव में दिलचस्प और सुंदर आकर्षक है: http://cufp.org/videos/functional-programming-facebook – Gian

+0

'अभिव्यक्तित्मक शक्ति' आपको इतना अधिक नहीं खरीदती है। आप दुनिया भर में एक नाव में पंक्ति या एक जहाज का उपयोग कर सकते हैं। दुनिया भर में आपको लेने के लिए दोनों में 'अभिव्यक्तिपूर्ण शक्ति' है। ज्यादातर लोग रोइंग नाव नहीं लेते हैं। –

+0

@ रेनर, मुझे यकीन नहीं है कि आप मुझसे सहमत हैं या नहीं, लेकिन मूल रूप से वह बिंदु था जिसे मैं बना रहा था। यह सचमुच सच है कि आप किसी भी उचित भाषा में ज्यादातर चीजों को लागू कर सकते हैं, यह वही है कि आप उन मामलों को चाहे या नहीं चाहते हैं। – Gian

7
  1. एक अंततः अपने imperativelly (गलत) प्रशिक्षित मन को शांत करने में सफल हुआ है, एफपी वास्तव में आईपी की तुलना में आसान और अधिक मज़ा हो जाता है।

  2. एफपी इसकी घोषणात्मक प्रकृति के कारण सुरक्षित, कम बग प्रवण होता है।

  3. मुझे लगता है कि समानांतर अनिवार्य कोड इसकी जटिलता को दोगुना करता है (एक गैर-तुच्छ समानांतर ऐप के साथ स्वयं को आजमाएं)। आईएमओ, एफपी कई मामलों में सिंक्रनाइज़ेशन की कमी के कारण, अंतर को बहुत कम कर देता है।

  4. जियान हवाला देते हुए, एफपी सीखने तुम एक समझदार जरूरी प्रोग्रामर बनाने ...

+3

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

+0

हां, यह सच है कि बिंदु 2 के लिए अधिकांश साक्ष्य अचूक है, लेकिन इसके लिए बहुत सारे अचूक सबूत हैं! और निष्पक्षता में, _any_ भाषा में सॉफ़्टवेयर गुणवत्ता में सुधार के लिए तकनीकों के बारे में बहुत सारी ठोस जानकारी नहीं है। – Gian

+1

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

संबंधित मुद्दे