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


103

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

Win32 डेवलपर के रूप में, क्या मैं अपने आवेदन के कुछ dll के लिए हास्केल का उपयोग कर सकता हूं? और अगर मैं करता हूं, तो क्या कोई वास्तविक लाभ है जो मेरे लिए स्वचालित रूप से लिया जाएगा? यदि ऐसा है तो मुझे क्या फायदा है, संकलक?

क्या F # कई कार्यों को सम्‍मिलित करता है जो आपके लिए कई कोर और सीपीयू में लिखते हैं? क्या आप कभी टास्क काउंट को बढ़ाते हुए देखेंगे?

मूल रूप से मेरा सवाल यह है कि मैं हास्केल का व्यावहारिक तरीके से उपयोग कैसे शुरू कर सकता हूं, और अगर मैं करूं तो क्या मुझे वास्तव में कुछ लाभ दिखाई देंगे?


2
व्यक्तिगत रूप से, मैं एर्लांग में देखूंगा - लेकिन यह मैं हूं।
जेसन बंटिंग

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

जवाबों:


41

ऐसा लगता है कि पुस्तक रियल वर्ल्ड हास्केल सिर्फ आप के लिए देख रहे हैं। आप इसे मुफ्त ऑनलाइन पढ़ सकते हैं:

http://book.realworldhaskell.org/


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

25

F # में कोई भी मैजिक पिक्सी डस्ट नहीं होती है जो अलग-अलग सीपीयू या मशीनों से फंक्शन्स पास करेगी। F # / Haskell और अन्य कार्यात्मक प्रोग्रामिंग भाषाएं आपके लिए ऐसे कार्यों को लिखना आसान बनाती हैं, जिन्हें उस थ्रेड या सीपीयू से स्वतंत्र संसाधित किया जा सकता है, जिस पर वे बनाए गए थे।

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


21
फिर मैं आपके लिए पोस्ट करूंगा : herdingcode.com/?p=45 :)
ब्रायन आर। बॉडी


14

यह भी दिलचस्प हो सकता है: " वास्तविक विश्व कार्यात्मक प्रोग्रामिंग "

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


क्या आप अभी भी महसूस करते हैं कि आप "C # के साथ अधिक से अधिक रहना चाहते हैं?" एफ # कुछ दिलचस्प सुविधाएँ प्रदान करता है। मैंने जो सबसे बड़ा बढ़ावा दिया है वह है कम टाइपिंग (जिसका अर्थ है कोड में समाधान व्यक्त करने की प्रक्रिया में कम घर्षण)।
डैनियल

1
@ डैनियल कुछ मायनों में, इससे भी अधिक; पी मैं जिन उपकरणों पर काम करता हूं वे एटिपिकल हो सकते हैं, हालांकि।
मार्क Gravell

8

आपने उल्लेख नहीं किया, लेकिन मैं मान रहा हूं, कि आप C ++ का उपयोग कर रहे हैं। कार्यात्मक में आने का एक संभावित आसान तरीका C ++ / CLI से F # है। C ++ में "मैजिक पिक्सी डस्ट" (IJW: इट जस्ट जस्ट) है, जिसमें आपको प्रबंधित कोड से कॉल करने की अनुमति है। इसके साथ, F # कोड को कॉल करना लगभग उतना ही सरल है जितना कि C # से।

मैंने इसे एक प्रोग्राम (FreeSWITCH) में उपयोग किया है, जो पूरी तरह से C / C ++ में लिखा गया है। एक एकल प्रबंधित C ++ / CLI (/ clr स्विच का उपयोग करें) के साथ, यह जादुई रूप से प्रबंधित कोड में बदलाव करता है, और वहां से, मैं अपने F # प्लगइन्स लोड कर सकता हूं और उन्हें निष्पादित कर सकता हूं। तैनाती के लिए चीजों को और भी आसान बनाने के लिए, F # स्टेटिकली अपनी सभी निर्भरता को लिंक कर सकता है, इसलिए आपको F # रनटाइम फाइल्स को तैनात करने की आवश्यकता नहीं है। सीएलआर कोड को आकर्षक बनाने वाली एक और बात यह है कि आप प्रबंधित कोड (प्रतिनिधियों) को सी कोड में पारित कर सकते हैं, और रनटाइम स्वचालित रूप से आपके लिए एक थंक बनाता है।

यदि आप हास्केल रास्ते पर जाने का निर्णय लेते हैं, तो आप जिस सुविधा की तलाश कर रहे हैं वह एफएफआई है: फॉरेन फंक्शन इंटरफेस। हालाँकि, मुझे नहीं लगता कि यह आपको F # के साथ C ++ / CLI के समान एकीकरण देगा।


6

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

सौभाग्य।


4

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

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

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

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