OCaml अधिक लोकप्रिय क्यों नहीं है?


86

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

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

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

यह एक व्यक्तिपरक प्रश्न है, लेकिन OCaml और ML अन्य भाषाएं इतनी अस्पष्ट क्यों बनी हुई हैं, जबकि C और अन्य भाषाएँ लोकप्रिय हो गईं?

जवाबों:


82

पहला उत्तर यह है कि कोई भी वास्तव में नहीं जानता है कि भाषाएं लोकप्रिय क्यों हो जाती हैं, और जो कोई भी कहता है कि वह बहक गया है या उसका कोई एजेंडा है। (यह पहचानना अक्सर आसान होता है कि कोई भाषा लोकप्रिय क्यों नहीं हो पाती है, लेकिन यह एक और सवाल है।)

उस अस्वीकरण के साथ, यहां कुछ बिंदु दिए गए हैं जो विचारोत्तेजक हैं, सबसे महत्वपूर्ण:

  • 1974 में पहला परिपक्व सी कंपाइलर दिखाई दिया; पहला परिपक्व OCaml संकलक 1990 के दशक के अंत में दिखाई दिया। सी में 25 साल की शुरुआत है।

  • सी को यूनिक्स के साथ भेज दिया गया, जो अब तक का सबसे बड़ा "हत्यारा ऐप" था। लंबे समय तक, दुनिया के हर सीएस विभाग में यूनिक्स था, जिसका मतलब था कि हर प्रशिक्षक और सीएस कोर्स लेने वाले सभी लोगों के पास सी। ओम्क्लेम के सामने आने का अवसर था और एमएल अभी भी अपने पहले हत्यारे ऐप की प्रतीक्षा कर रहे हैं। (MLdonkey शांत है, लेकिन यह यूनिक्स नहीं है।)

  • C अपने आला इतनी अच्छी तरह से भर जाता है मुझे शक है कि एक और निम्न स्तर के लिए समर्पित भाषा वहाँ कभी नहीं होगा केवल सिस्टम प्रोग्रामिंग करने के लिए। (साक्ष्य को पक्ष में देखने के लिए, HOPL II से C के इतिहास पर डेनिस रिची का पेपर पढ़ें।) यह भी स्पष्ट नहीं है कि OCaml का आला क्या है, और Standard ML का स्थान केवल थोड़ा साफ है। इसलिए कैमल और एमएल के काफी प्रतिस्पर्धी हैं, जबकि सी ने अपने एकमात्र प्रतियोगी (BLISS) को मार दिया।

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

  • C एक मानक और कई संकलक वाली भाषा है। OCaml एक सॉफ्टवेयर विरूपण साक्ष्य है: केवल संकलक एक ही स्रोत से है, और संकलक है मानक। और वह मानक हर रिलीज के साथ बदलता है। स्थिरता और पिछड़े संगतता को महत्व देने वाले लोगों के लिए, एकल-स्रोत भाषा अस्वीकार्य जोखिम का प्रतिनिधित्व कर सकती है।

  • एक आधे-सभ्य स्नातक कंपाइलर पाठ्यक्रम और दृढ़ता के साथ कोई भी एक सी संकलक लिख सकता है जो अधिक या कम काम करता है, और पर्याप्त प्रदर्शन के साथ। OCaml के कार्यान्वयन या जमीन से एमएल को हटाने के लिए बहुत अधिक शिक्षा की आवश्यकता होती है, और एक भोले सी कंपाइलर के लिए तुलनात्मक प्रदर्शन प्राप्त करने के लिए बहुत अधिक कार्य की आवश्यकता होती है। इसका मतलब यह है कि OCaml जैसी भाषाओं के साथ खिलवाड़ करने के लिए बहुत कम शौक़ीन लोग हैं, इसलिए इस समुदाय का यह कहना कठिन है कि इसका दोहन कैसे किया जाए।


5
OCaml एक अपेक्षाकृत हाल ही में बोली जाने वाली ML बोली है, जिसका जन्म जावा के समान ही है। हालांकि, एमएल 1973 में पहली प्रमुख बोली, एसएमएल के साथ 1978 में विकसित हुई। एमएल बोलियों ने प्रमेय साबित करने और अनुसंधान में एक आला पाया, लेकिन वित्तीय संस्थानों में उद्योग मानक रहा है।
जूलियट

15
मैं एमएल को "वित्तीय संस्थानों में उद्योग मानक" नहीं कहूंगा। (और मैं यह नहीं कहता क्योंकि मैं हास्केल में वित्तीय अनुप्रयोग लिखता हूं। :-)) व्यावसायिक दुनिया में, जबकि वित्तीय उद्योग में कार्यात्मक प्रोग्रामिंग की तुलना में कहीं अधिक है, यह अभी भी व्यापक रूप से उपयोग नहीं किया गया है : मेरे अनुभव में, C ++ और Java हावी है। जेन स्ट्रीट जैसी कंपनियां अपवाद हैं, नियम नहीं।

8
पर्ल एक "सॉफ्टवेयर विरूपण साक्ष्य" है - पर्ल की एकमात्र परिभाषा "भाषा है कि पर्ल (1) व्याख्या" - और फिर भी यह लोकप्रिय नहीं है। पायथन और रूबी लंबे समय तक "सॉफ्टवेयर कलाकृतियां" थे।

5
@ क्रिस: आईएमओ यह एक कारण है कि पर्ल माइंडशेयर खो रहा है।
नॉर्मन रैमसे

5
जैसा कि पूर्वानुमान है, मुझे लगता है कि ओकेमेल वास्तव में सी को उस दायरे में मारता है, अनुकूलन के स्तर के साथ जो सी कंपाइलरों से अपेक्षित है, और उन कई अनुकूलन की नाजुकता। OCaml का कंपाइलर आपके कोड को संकलित करने के बारे में बहुत शाब्दिक है।

63

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

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

(मुझे पता है कि इसे बदलने का काम चल रहा है, "बैटरियां शामिल" जैसी परियोजनाओं के साथ। 5 साल में यहां वापस आओ, और शायद ओकेमेल अधिक लोकप्रिय होगा।)

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

नतीजा लोकप्रियता मिली। पैसा बहुत सारी समस्याओं को हल कर सकता है।

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

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

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


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

5
नहीं, मेरा मतलब सामान्य रूप से प्रोग्रामिंग करना था। यदि आप कार्यात्मक प्रोग्रामिंग नहीं समझ सकते हैं, तो आप शायद अन्य अवधारणाओं को भी नहीं समझ सकते हैं।

8
मैं इसे नहीं खरीदता। OCaml में दिन-प्रतिदिन के प्रोग्रामिंग सामान के लिए बहुत सारे पुस्तकालय हैं, और यदि यह अधिक लोकप्रिय हो गया, तो लोग और अधिक लिखेंगे। हर भाषा कुछ पुस्तकालयों के साथ शुरू हुई।

8
इन पुस्तकालयों की एक कड़ी के बारे में कैसे?

4
0 से अधिक लोगों ने किसी ऐसे व्यक्ति को अपवित्र क्यों किया जो दावा करता है कि भाषा का कोई उपयोग करने योग्य हैश तालिका कार्यान्वयन नहीं है? मैं उन भाषाओं को खड़ा नहीं कर सकता, जो नियमित अभिव्यक्तियों और शब्दकोशों की तरह बेकार बकवास में खड़ी होती हैं, महत्वपूर्ण टीसीबी को नीचे रखने के लिए, पुस्तकालयों से एक भाषा को जितना संभव हो उतना कम करना चाहिए। एक भाषा जो कुछ भी प्राप्त करने के लिए शब्दकोशों पर निर्भर करती है, पूरी तरह से बकवास है।
लॉन्गपोक

22

मुझे एक भाषा के रूप में ओकेमेल बहुत पसंद है । परंतु...

उपकरण का समर्थन सिर्फ वहाँ नहीं है। डीबगर केवल ठीक काम करता है, लेकिन विंडोज़ पर काम नहीं करता है (पिछली बार मैंने जाँच की थी) और अभी इसके लिए कई विकास उपकरण उपलब्ध नहीं हैं।

इसके प्रकार प्रणाली समय पर, एक सा है, बहुत मजबूत। किसी के लिए जो यह नहीं समझ पाता है कि किस प्रकार का अनुमान कार्य करता है या सामान्य रूप से एमएल प्रकार की प्रणाली है, इस तथ्य को कि वह एक फ्लोट में पूर्णांक नहीं जोड़ सकता है, तुरंत एक बड़ा मोड़ है।

मानक पुस्तकालय में कभी-कभी एक असंगत अनुभव हो सकता है।

ऑब्जेक्ट मॉडल कुछ हद तक टैकल होता है और मानक पुस्तकालय बमुश्किल इसका उपयोग करता है, मॉड्यूल-आधारित पुस्तकालयों के बजाय।

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

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


3
मैं यह नहीं कहूंगा कि इसकी प्रकार प्रणाली बहुत मजबूत है, लेकिन पर्याप्त रूप से अभिव्यंजक नहीं है, टाइप क्लास अला हास्केल बहुत मदद करेगा।

2
हाँ, लेकिन इन टिप्पणियों में से अधिकांश पोलसिहेड को महसूस नहीं करने के बारे में C ++ पर भी अधिक दृढ़ता से लागू होती हैं! मुझे लगता है कि यह आपके तर्क को थोड़ा कमजोर करता है (हालांकि मैं इससे सहमत हूं)।
यट्रिल

2
OCaml डीबगर, केवल एक ही है जो मुझे पता है कि पीछे-पीछे, साथ ही साथ आगे भी हो सकता है।
ओसोडो

21

एंबेडेड सिस्टम को अक्सर दो चीजों की आवश्यकता होती है: गति और निर्धारकता। OCaml गति प्रदान कर सकता है, लेकिन तथ्य यह है कि इसमें एक कचरा कलेक्टर है जो इसे स्वाभाविक रूप से nondeterministic बनाता है, और एक वास्तविक समय प्रणाली के लिए जो सरल नहीं होगा।


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

3
मूल प्रश्न एम्बेडेड सिस्टम के बारे में पूछा गया था इसलिए मैंने एक विशिष्ट कारण प्रदान किया कि इसका उपयोग क्यों न किया जाए। और एक साइड नोट के रूप में आप जावा का उपयोग कर सकते हैं - बस वास्तविक समय के लिए नहीं (वही # के लिए चला जाता है)।

2
जावा स्वयं वास्तविक समय नहीं है। कचरा संग्रहण तंत्र के साथ कुछ भी नहीं हो सकता है।

3
@ctacke: यह केवल सच नहीं है। कई वास्तविक समय कचरा बीनने वाले हैं। जावा कार्यान्वयन उनका उपयोग करते हैं और जावा का उपयोग वास्तविक समय अनुप्रयोगों में किया जाता है।
जॉन हैरोप


18

यह एक सेब-से-संतरे की तुलना का एक सा है। OCaml एक काफी युवा भाषा है [1] और इसे मुख्यधारा में धकेलने का गंभीर, निरंतर प्रयास नहीं किया गया है (F # के साथ Microsoft के वर्तमान कार्य को छोड़कर)। सी के विपरीत, यह सबसे व्यापक रूप से समर्थित और नकली उद्यम ऑपरेटिंग सिस्टम (यानी, यूनिक्स) का लिंगुआ फ्रेंका नहीं है । जावा के विपरीत, इसमें अगली पीढ़ी के कंप्यूटिंग प्लेटफॉर्म के रूप में एक प्रमुख निगम नहीं था। पर्ल, पाइथन और रूबी के विपरीत, इसने एक हाई-प्रोफाइल, प्रभावशाली आला में पकड़ नहीं बनाई है (यानी, इसका आला प्रोग्रामिंग भाषा है और स्वचालित तर्क अनुसंधान - वेब विकास की तुलना में बहुत उच्च प्रोफ़ाइल नहीं है)। इसलिए, यह सुपर-लोकप्रिय नहीं है।

[१] निष्पक्षता में, मूल एमएल भाषा लगभग ness० के दशक से है। लेकिन OCaml 1996 तक नहीं दिखाई दिया और इसने मानक ML पुस्तकालयों को विरासत में नहीं दिया। यह व्यावहारिक रूप में, C, C ++, Java, पायथन, हास्केल, या रूबी की तुलना में एक छोटी भाषा है।


विकिपीडिया के अनुसार, एमएल बहुत छोटा नहीं है, यह केवल एक साल छोटा है (1972 में सी वी के लिए 1973 एमएल के लिए)। आपके स्पष्टीकरण के बाकी मैं पैसे पर सही लगता है।

1
हुह। मैं सी को 60 के दशक के अंत में और 80 के दशक की शुरुआत में (और OCaml, विशेष रूप से, 90 के दशक के अंत तक ... जावा, पायथन, और रूबी से भी कम) को डेट करूंगा, लेकिन मुझे लगता है कि मैं थोड़ा हटकर हूं।

ML 1973 तक वापस आ जाता है, OCaml 1996 से होता है।
ocodo

15

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

मेरा मानना ​​है कि समस्या का एक हिस्सा यह है कि कैसे मॉड्यूल OCaml द्वारा फाइलों में मैप किए जाते हैं: वैचारिक रूप से सभी * .ml फाइलें एक ही नाम के स्थान पर रहती हैं और निर्देशिकाओं का कोई अर्थ नहीं है। यह एक समुदाय के लिए एक पुस्तकालय विकसित करने के लिए कठिन है। यदि कंपाइलर डायरेक्टरी पदानुक्रम को मॉड्यूल पदानुक्रम में मैप करेगा तो मुझे एक बेहतर मौका मिलेगा कि एक मानक लाइब्रेरी विकसित होगी। हालांकि, इसके लिए कोर कंपाइलर डेवलपर्स द्वारा काफी प्रयास की आवश्यकता होती है। (मैं पैकिंग मॉड्यूल से अवगत हूं, लेकिन मुझे लगता है कि यह एक कीचड़ है।)

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


वास्तव में अच्छा बिंदु
cnd

11

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

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

यह, ज़ाहिर है, गहरा अनुचित और व्यक्तिपरक है। लेकिन यह ज्यादातर लोगों के लिए सच्ची कहानी होने की संभावना है।

इन दिनों मुझे लगता है कि सवाल यह होगा: अब मुझे लगता है कि मुझे इस अजीब और भ्रामक सैद्धांतिक सामग्री को जानने की जरूरत है, मैं हास्केल या एर्लांग पर एमएल क्यों चुनूंगा?


ठीक है, आप Haskell को ML से चुन सकते हैं क्योंकि Haskell कई मायनों में, सिर्फ एक बेहतर ML है। आप एरलंग को क्यों चुनेंगे या तो मुझे यकीन नहीं है: एरलैंग सांख्यिकीय रूप से टाइप नहीं किया गया है और मेरे लिए, इसके साथ कुछ निराशाजनक अनुभवों के बाद, मैं इसे किसी भी दिन एमएल ले जाऊंगा।

मुझे कैम्ब्रिज विश्वविद्यालय में 1996 में मानक एमएल सिखाया गया था और वास्तव में यह आंशिक रूप से पसंद नहीं आया था क्योंकि उदाहरण सभी सैद्धांतिक कंप्यूटर विज्ञान (और मैं एक भौतिक विज्ञानी) थे और क्योंकि इसके कार्यान्वयन ने चूसा (जब मैंने शिकायत की तो उन्होंने मुझे एमएल कंपाइलर स्रोत का 100kLOC दिया था) यह भी संकलित नहीं किया और मुझे बताया कि इसे स्वयं ठीक करना है)। मैंने अपने पीएचडी के बाद OCaml को उठाया और पाया कि यह कहीं अधिक व्यावहारिक रूप से व्यवहार्य है। एमएल बनाम हास्केल / एर्लांग के लिए, यह निर्भर करता है कि कौन सा एमएल। OCaml में जाहिर है कि हस्केल और एर्लैंग की कमी है। इसके अलावा, वे विशेषताएं व्यवहार में आवश्यक हो जाती हैं।
जॉन हैरोप

9

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


10
दो साल बाद, OCaml अधिक लोकप्रिय नहीं लगता है।

5
चार साल बाद, OCaml अधिक लोकप्रिय नहीं लगता।
कैमिलो मार्टिन

8

मैं मानता हूं कि खराब विंडोज सपोर्ट, एक स्टडी लर्निंग कर्व और स्लिम स्टैंडर्ड लाइब्रेरी में अतीत में सभी ऑक्साम्ल का अपस्ट्रीम होता है, लेकिन मैं यह जोड़ूंगा कि जावा जैसी मुख्य धारा की तुलना में ओमेक्एल के बारे में ट्यूटोरियल जानकारी (जैसे किताबें) की भारी कमी है।

साथ ही, OCaml जैसी भाषाओं को जानने वाले लोग बेहद विषम हैं। वेब प्रोग्रामर के बीच, शायद 1,000 में से 1 ने OCaml के बारे में सुना होगा। कैम्ब्रिज यूनिवर्सिटी में साइंटिफिक कंप्यूटिंग करने वाले लोगों में, जिन 90% लोगों को मैं जानता था, वे OCaml में धाराप्रवाह थे। वास्तव में, मैं OCaml सीखने के लिए अपने दोस्तों में से एक था। हम भी अपने 256 CPU सुपर कंप्यूटर पर OCaml भागा ...

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


"एक कठिन सीखने की अवस्था": 0 से शुरू होने में C ++ को कितना समय लगता है? मुझे लगता है कि अगर OCaml अधिक लोकप्रिय था, तो अधिक लोग इसे सीखने का प्रयास करने के लिए सामान्य पाएंगे।
गियोर्जियो

@Giorgio "मुझे लगता है कि अगर OCaml अधिक लोकप्रिय थे, तो अधिक लोग इसे सीखने का प्रयास करने के लिए सामान्य पाएंगे"। मुझे लगता है कि अधिक लोग अजगर और रूबी सीखते हैं क्योंकि वे तुलनात्मक रूप से सीखना आसान है।
जॉन हैरोप

बेशक लोग ऐसी भाषा सीखना पसंद करते हैं जो सरल हो (btw मुझे नहीं लगता कि Ocaml रूबी की तुलना में बहुत अधिक जटिल है और निश्चित रूप से C ++ की तुलना में कम जटिल है), मुद्दा यह है कि एक बार जब कोई भाषा मुख्यधारा / लोकप्रिय होती है, तो यह तथ्य जटिल होता है कि किसी भी बड़ी समस्या के रूप में नहीं देखा गया। OCaml लोकप्रिय नहीं है और इसलिए लोगों को नहीं लगता कि यह इसे सीखने लायक है।
जियोर्जियो

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

मुझे आपका कथन "कैम्ब्रिज विश्वविद्यालय में वैज्ञानिक कंप्यूटिंग करने वाले लोगों में से, 90% लोग जो मुझे पता था कि ओकेम्ल में धाराप्रवाह थे।" बेहद आश्चर्यजनक। एक भौतिक विज्ञानी के रूप में जो बहुत अधिक मॉडलिंग करता है, मैंने देखा कि सहकर्मी कई अलग-अलग भाषाओं का उपयोग करते हैं: सी, सी ++, फोरट्रान, जावा, पायथन, पर्ल, MATLAB, गणितज्ञ, आर काफी सामान्यतः, और कुछ अन्य भी। लेकिन मैंने कभी किसी को OCaml का इस्तेमाल करते नहीं देखा। मैं लोगों को सुना बात कर के बारे में शायद यह सीखने, लेकिन मैं कभी नहीं देखा है किसी को भी इसका इस्तेमाल करते हैं । Scicomp.stackexchange.com पर सर्च करने पर फिर से कुछ नहीं मिलता है। एमएल के इस प्रयोग के लिए आपकी वकालत ...
शेजॉबल्स

6

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

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

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

भाषा की लोकप्रियता के लिए एक प्रतिक्रिया प्रभाव भी है। जब मैंने प्रोग्रामिंग शुरू की तो मैं जानना चाहता था कि ग्राफिकल इफेक्ट्स और गेम्स कैसे प्रोग्राम किए जाते हैं। बीबीसी बेसिक और बाद में QBASIC के कुछ सीखने के बाद, मैंने स्वाभाविक रूप से जांच की कि डेमो दृश्य और गेम प्रोग्रामर द्वारा उपयोग की जाने वाली सबसे आम भाषाएं C ++ और x86 असेंबली सीखने के बारे में क्या थीं। आजकल कुछ नए प्रोग्रामर जानना चाह सकते हैं कि वेब एप्लिकेशन का उत्पादन कैसे करें और इसलिए पीएचपी, रूबी या सी # सीखने की ओर अग्रसर होंगे। स्व-प्रेरित शुरुआती प्रोग्रामर के लिए बहुत कम आवेदन क्षेत्र हैं जहां 'एक्स की तरह कुछ प्रोग्राम करने के लिए सीखने के लिए सबसे अच्छी भाषा है' का जवाब 'ओकेमेल' होगा।

Ocaml की सीमित लोकप्रियता (परिपक्व पुस्तकालयों, डीबगर्स, IDEs, आदि की कमी) के लिए दिए गए व्यावहारिक कारणों में से कई को प्रथम श्रेणी .NET भाषा के रूप में F # के लिए Microsoft के आधिकारिक समर्थन द्वारा संबोधित किया गया है। यह देखना दिलचस्प होगा कि क्या एफ # कार्यात्मक प्रोग्रामिंग के लिए लोकप्रियता का एक बड़ा स्तर लाने में मदद करता है।


पुनरावृत्ति संबंध उन चीजों में से एक है जो हमेशा एफपी को अच्छी तरह से मैप करते हैं।
जॉन हैरोप

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

6

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

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

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

सी ++ दुनिया में, मैं सिर्फ बूस्ट का उपयोग करने पर विचार कर सकता हूं: हालांकि यह मानक का हिस्सा नहीं एक तीसरी पार्टी लाइब्रेरी है, इसमें इस तरह के भारी सामुदायिक समर्थन हैं और यह वास्तव में मानक विकास प्रक्रिया के साथ उत्कृष्ट रूप से सिंक्रनाइज़ है। बूस्ट में विकसित और परीक्षण किए गए विचार मौजूदा अभ्यास के प्रकार बन जाते हैं जिन्हें मानकीकृत किया जा सकता है, और सामुदायिक भागीदारी की अनुमति देने के लिए मानक प्रक्रिया पर्याप्त है।

Ocaml ने वास्तव में यह लोकप्रियता हासिल की है क्योंकि यह इतना अच्छा उत्पाद है, लेकिन यह मुख्यधारा की भाषा बनने की अनुमति देने के लिए पर्याप्त नहीं है। जावा crud है, इसे अरबों डॉलर के विपणन और पुस्तकालय विकास के साथ लोकप्रिय बनाया गया था, लेकिन अंत में समुदाय में जीवित रहने के लिए जारी किया जाना था।


5

मैंने कई प्रकार की परियोजनाओं के लिए ML और C दोनों में कोडिंग का आनंद लिया है। एम्बेडेड प्रोजेक्ट्स में एमएल का उपयोग करने से मुझे रोकने वाली बात (जिनमें से अधिकांश में वास्तविक समय की कमी है, और सत्यापन की आवश्यकता है) कचरा संग्रह है।

क्षेत्रों के साथ स्मृति प्रबंधन में अनुसंधान होता है ( MLKit देखें ) लेकिन कार्यान्वयन और प्रशिक्षण की जटिलता का उपयोग उन्हें ठीक से (और परिचर जोखिम) का उपयोग करने के लिए आवश्यक है।


3

IMHO, मुझे लगता है कि OCaml की एक बड़ी समस्या यह भाषा में नहीं है (यह बहुत अच्छा है) लेकिन लोगों में जो इसे विकसित करते हैं और इसके परिणामस्वरूप, उनका लाइसेंस:

http://caml.inria.fr/ocaml/license.en.html

वे संकलक के लिए क्यू पब्लिक लाइसेंस का उपयोग करते हैं! हां, क्यूटी पुस्तकालयों के लिए इस्तेमाल किया जाने वाला लाइसेंस पूर्व-ट्रोलटेक! इस तरह के लाइसेंस के साथ कोई भी योगदान पाने के बारे में भूल जाओ।

अगर आप लगभग 7-8 साल पहले लैंग्वेज शूटआउट ( http://shootout.alioth.debian.org/ ) चेक कर रहे थे , तो निष्पादन की गति के लिए OCaml सिर्फ C और C ++ से पीछे था। थोड़ी देर में, अन्य भाषाओं (जैसे हास्केल) को एक बेहतर संकलक मिला (एक अलग सामुदायिक दृष्टिकोण के कारण, मुझे लगता है) और अब निष्पादन की OCaml गति अतीत की तरह महान नहीं है।

शीघ्र ही, मैं OCaml का उपयोग नहीं करूंगा, क्योंकि मुझे यह कहीं भी अच्छा नहीं लग रहा है कि कुछ बहुत अच्छे हैकर बिना OCaml कंपाइलर बना रहे हैं जिनके पास वास्तव में ओपन सोर्स लाइसेंस है और वास्तव में ओपन सोर्स व्यवहार वाला समुदाय है।


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

3

ठीक है अगर यह पैसे के बारे में है जैसा कि @jrockway कहता है, हम देखेंगे कि क्या F # जावा या C # जैसी लोकप्रियता हासिल करेगा।

मेरे लिए मुझे लगता है कि विकासशील लोग चीजों को करने के कार्यात्मक तरीके से असहज महसूस नहीं करते हैं (यह तकनीक 2009 में एफ # सत्र से है जहां लगभग 10 लोगों ने कहा कि वे लगभग 100 व्यक्तियों के बीच कार्यात्मक प्रोग्रामिंग जानते हैं)।

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


10 साल पहले एफपी को जानने वाले 100 लोगों में से 1 को अधिक पसंद किया गया होगा। ;-)
जॉन हैरोप

2

खैर, शायद एफ # लोकप्रिय हो जाता है।


2

यह मदद नहीं करता है कि c-> ओसमल c-> लिस्प की तुलना में एक बड़ा मानसिक संक्रमण है। मैंने एक-दो बार ओसमल पर विचार किया है, और हमेशा पाया कि लागत / लाभ अभी मेरे लिए नहीं था, इसलिए इसे फिर से सेट करें। यह निर्माण नहीं था जो इसे कठिन बनाते थे, वे वास्तव में बहुत साफ दिखते थे। यह '!' के लिए एक पूरी तरह से अलग अर्थ सीखने की कोशिश कर रहा था। लिस्प कम से कम इतना अलग दिखता है कि सी के रूप में इसके छोटे टुकड़ों के गलत विवरण से बचना आसान है।


2

यदि आप वास्तविक समय में एम्बेडेड सिस्टम में एक भाषा का उपयोग करना चाहते हैं, तो आपको पॉइंटर्स की आवश्यकता होती है और आप एक GC नहीं खरीद सकते।


1

मुझे लगता है कि मुख्य कारण यह है कि बहुत कम डेवलपर्स OCaml को जानते हैं।

और जब अन्य डेवलपर्स से बात कर रहे हैं (जिन्होंने ओकेमेल के बारे में कुछ सुना है) मुझे हमेशा यह धारणा मिलती है कि वे ओकेमेल को "शिक्षा-केवल" भाषा के रूप में सोचते हैं ... उदास लेकिन सच


मेरा मानना ​​है कि अब 20 OCaml Developers (जेन सेंट और सिट्रिक्स) के साथ 2 कंपनियां हैं।
जॉन हैरोप

3
वाह! एक पूरी दो कंपनियां? :)
यित्रिल

0

मुझे O'caml बहुत पसंद है ... मैंने इसे, कंपाइलर, दुभाषियों, सी के साथ संवाद करने के लिए सिस्टम का उपयोग करके चीजों का एक गुच्छा लागू किया है ...

जब मैंने इसे सीखा, तो मुख्य समस्या यह थी कि त्रुटि संदेश वास्तव में स्पष्ट नहीं हैं ... इसलिए उदाहरण के लिए, शुरुआत में मुझे यकीन नहीं था कि कब डाल दिया जाए? '' और वास्तव में यह पता लगाना बहुत कठिन था कि; गलत लिखा गया था ...

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