यदि आपने कार्यात्मक प्रोग्रामिंग प्रतिमान में खरीदा है, संभावना है कि आप एर्लांग और हास्केल दोनों को पसंद करते हैं। दोनों में पूरी तरह से कार्यात्मक कोर और अन्य भलाई जैसे हल्के धागे हैं जो उन्हें मल्टीकोर दुनिया के लिए उपयुक्त बनाती हैं। लेकिन कुछ मतभेद भी हैं।मिश्रण एरलांग और हास्केल
एरलांग परिपक्व वितरण मॉडल के साथ व्यावसायिक रूप से सिद्ध गलती-सहनशील भाषा है। हॉट कोड लोडिंग के माध्यम से रनटाइम पर अपने संस्करण को अपग्रेड करने की इसकी क्षमता में इसकी एक अनूठी विशेषता है। (रास्ता शांत!)
दूसरी ओर, हास्केल, किसी भी मुख्यधारा की भाषा का सबसे परिष्कृत प्रकार प्रणाली है। (जहां मैं 'मुख्यधारा' को किसी भी भाषा के रूप में परिभाषित करता हूं जिसमें प्रकाशित ओ'रेली पुस्तक है, इसलिए हास्केल की गणना होती है।) इसकी सीधी रेखा एकल प्रदर्शन एरलांग से बेहतर दिखता है और इसके हल्के धागे भी हल्के दिखते हैं।
मैं के लिए मेरे विकास कोड के लिए एक विकास मंच को एक साथ रखने की कोशिश कर रहा हूं और यह सोच रहा था कि नस्ल और हास्केल को सर्वोत्तम नस्ल प्लेटफॉर्म प्राप्त करने के लिए मिश्रण करना संभव था या नहीं। इस प्रश्न में दो भाग हैं:
- मैं एर्लांग को गेल जीएचसी रनटाइम उदाहरणों को एक साथ गलती सहनशील एमपीआई के रूप में उपयोग करना चाहता हूं। प्रति जीएचसी रनटाइम में एक एरलांग प्रक्रिया होगी। यदि "असंभव हुआ" और जीएचसी रनटाइम की मृत्यु हो गई, तो एरलांग प्रक्रिया किसी भी तरह का पता लगाएगी और मर जाएगी। Erlang के गर्म कोड लोडिंग और वितरण सुविधाओं अभी काम करना जारी रखेंगे। जीएचसी रनटाइम को केवल एक कोर, या स्थानीय मशीन पर सभी कोर, या बीच के किसी भी संयोजन का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है। एक बार एरलांग पुस्तकालय लिखा गया था, शेष एरलांग स्तर कोड पूरी तरह से बॉयलरप्लेट होना चाहिए और प्रति आवेदन आधार पर स्वचालित रूप से जेनरेट किया जाना चाहिए। (उदाहरण के लिए शायद हास्केल डीएसएल द्वारा।) इनमें से कम से कम कुछ चीजों को कैसे प्राप्त किया जाता है?
- मुझे एर्लांग और हास्केल एक ही कचरा कलेक्टर साझा करने में सक्षम होना चाहते हैं। (यह 1 से अधिक विचार है।) जेवीएम और सीएलआर पर चलने वाली भाषाएं रनटाइम साझा करके अधिक द्रव्यमान प्राप्त करती हैं। मैं समझता हूं कि जेवीएम या सीएलआर पर एरलांग (हॉट कोड लोडिंग) और हास्केल (उच्च प्रकार का पॉलीमोर्फिज्म) चलाने के लिए तकनीकी सीमाएं हैं। लेकिन सिर्फ कचरा कलेक्टर unbundling के बारे में क्या? (कार्यात्मक भाषाओं के लिए रनटाइम की शुरुआत का क्रमबद्ध करें।) आवंटन स्पष्ट रूप से अभी भी वास्तव में तेज़ होना चाहिए, इसलिए हो सकता है कि उस बिट को स्थिर रूप से लिंक किया जाना चाहिए। और अपरिवर्तनीय ढेर से उत्परिवर्तनीय ढेर को अलग करने के लिए कुछ मेचांसिम होना चाहिए (एक बार स्मृति को आलसी लिखना) क्योंकि जीएचसी को इसकी आवश्यकता है। क्या एचआईपीई और जीएचसी दोनों को संशोधित करना संभव होगा ताकि कचरा कलेक्टर एक ढेर साझा कर सकें?
कृपया किसी भी अनुभव (सकारात्मक या नकारात्मक), विचारों या सुझावों के साथ उत्तर दें। वास्तव में, कोई प्रतिक्रिया (सीधे दुरुपयोग से कम!) का स्वागत है।
अद्यतन
तारीख करने के लिए सभी 4 उत्तर के लिए धन्यवाद - प्रत्येक मुझे कम से कम एक उपयोगी बात यह है कि मुझे नहीं पता था सिखाया।
के बारे में 0 कोडिंग जीवन चीज - मैंने इसे बहस में थोड़ा सा जीभ शामिल किया ताकि बहस फैलाने के लिए, लेकिन यह वास्तव में सच है। एक परियोजना है जो मुझे याद है कि मैं मरने तक काम करना चाहता हूं, और इसे एक स्थिर मंच की आवश्यकता है।
प्लेटफ़ॉर्म में मैंने ऊपर प्रस्तावित किया है, मैं केवल हास्केल लिखूंगा, क्योंकि बॉयलरप्लेट एरलांग स्वचालित रूप से जेनरेट हो जाएगा। तो हास्केल कितने समय तक चलेगा? खैर लिस्प अभी भी हमारे साथ है और ऐसा नहीं लगता कि यह जल्द ही दूर जा रहा है। हास्केल बीएसडी 3 ओपन सोर्स है और उसने महत्वपूर्ण द्रव्यमान हासिल किया है।यदि प्रोग्रामिंग स्वयं 50 साल के आसपास भी है, तो मैं हास्केल, या हास्केल के कुछ निरंतर विकास की उम्मीद करता हूं, अभी भी यहां होगा।
अद्यतन 2जवाब में की पोस्ट
सहमत rvirding करने के लिए - एक पूरा "Erskell/Haslang" सार्वभौमिक आभासी मशीन को लागू करने बिल्कुल असंभव नहीं हो सकता है, लेकिन यह निश्चित वास्तव में बहुत मुश्किल होगा। वीएम की तरह कुछ कचरा कलेक्टर स्तर साझा करना, जबकि अभी भी कठिन, हालांकि मेरे लिए कम परिमाण का क्रम लगता है। कचरा संग्रहण मॉडल में, कार्यात्मक भाषाओं में बहुत आम होना चाहिए - अपरिवर्तनीय डेटा (थंक्स समेत) की अनियमितता और बहुत तेज आवंटन की आवश्यकता। तो तथ्य यह है कि समानता को मोनोलिथिक वीएम के साथ कसकर बंडल किया जाता है, यह अजीब लगता है।
वीएम महत्वपूर्ण द्रव्यमान प्राप्त करने में मदद करते हैं। बस देखें कि एफ # और स्कैला जैसी 'लाइट' कार्यात्मक भाषाओं को कैसे हटाया गया है। स्कैला में एरलांग की पूर्ण गलती सहनशीलता नहीं हो सकती है, लेकिन यह JVM से जुड़े बहुत से लोगों के लिए एक बचने का मार्ग प्रदान करता है।
जबकि एक ढेर होने अन्य समस्याओं का एक नंबर का परिचय संदेश बहुत तेजी से गुजर रहा है, कर जीसी अधिक मुश्किल हो जाता है मुख्य रूप से है कि के रूप में यह इंटरैक्टिव हो गया है और विश्व स्तर पर गैर रुकावटी ताकि आप प्रति प्रक्रिया हीप मॉडल के रूप में एक ही सरल एल्गोरिदम का उपयोग नहीं कर सकते हैं।
बिल्कुल, यह मेरे लिए सही मायने रखता है। जीएचसी विकास दल के बहुत ही स्मार्ट लोग समानांतर "दुनिया को रोकें" जीसी के साथ समस्या का हिस्सा हल करने की कोशिश कर रहे हैं।
http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel-gc/par-gc-ismm08.pdf
(जाहिर है "दुनिया रोक" इसका मुख्य उपयोग के मामले को देखते हुए सामान्य Erlang के लिए उड़ान नहीं होगा।) लेकिन फिर भी उपयोग के मामलों जहां "दुनिया को रोकने के लिए" ठीक है, उनके speedups नहीं है सार्वभौमिक प्रतीत होता है। इसलिए मैं आपसे सहमत हूँ, यह संभावना नहीं है एक सार्वभौमिक सबसे अच्छा जीसी है कि वहाँ है, जो कारण मैं अपने प्रश्न का हिस्सा 1 में निर्दिष्ट किया है कि
GHC क्रम उपयोग सिर्फ एक कोर करने के लिए कॉन्फ़िगर किया जा सकता है, या स्थानीय मशीन पर सभी कोर, या में किसी भी संयोजन के बीच।
कि रास्ते में, किसी दिए गए उपयोग के मामले के लिए, मैं, बेंच मार्किंग के बाद, Erlang रास्ते जाने के लिए चुन सकते हैं, और एक GHC क्रम (एक singlethreaded जीसी के साथ) के साथ साथ मूल प्रति एक Erlang प्रक्रिया चलाने के लिए और Erlang नकल करते हैं अच्छे इलाके के लिए कोर के बीच स्मृति।
वैकल्पिक रूप से, प्रोसेसर पर अच्छी मेमोरी बैंडविड्थ के साथ 4 कोर प्रति प्रोसेसर के साथ दोहरी प्रोसेसर मशीन पर, बेंचमार्किंग का सुझाव हो सकता है कि मैं एक जीएचसी रनटाइम (समानांतर जीसी के साथ) और प्रति प्रोसेसर एक एरलंग प्रक्रिया चलाता हूं।
दोनों मामलों में, यदि एरलांग और जीएचसी एक ढेर साझा कर सकता है, तो साझाकरण शायद किसी भी कोर पर चलने वाले एकल ओएस थ्रेड से बंधेगा। (मैं यहां अपनी गहराई से बाहर निकल रहा हूं, यही कारण है कि मैंने सवाल पूछा।)
मेरे पास भी एक और एजेंडा है - जीसी के स्वतंत्र रूप से बेंचमार्किंग कार्यात्मक भाषाएं।अक्सर मैं ओकैमल वी जीएचसी बनाम एर्लांग वी के बेंचमार्क के परिणामों के बारे में पढ़ता हूं ... और आश्चर्य करता हूं कि विभिन्न जीसी द्वारा परिणाम कितने परेशान हैं। क्या होगा यदि जीसी की पसंद कार्यात्मक भाषा की पसंद के लिए ऑर्थोगोनल हो सकती है? वैसे भी जीसी कितना महंगा है? इस शैतान देखें ब्लॉग पोस्ट अधिवक्ताओं
http://john.freml.in/garbage-collection-harmful
मेरी लिस्प दोस्त जॉन Fremlin, जो वह है, आकर्षक द्वारा, यह देखते हुए अपने पद शीर्षक "स्वचालित कचरा संग्रहण बकवास है"। जब जॉन का दावा है कि जीसी धीमा है और वास्तव में इतना बड़ा नहीं हुआ है, तो मैं कुछ संख्याओं का सामना करने में सक्षम होना चाहता हूं।
इसी तरह की प्रेरणा के साथ, अगले दशक के लिए बसने के लिए "सही भाषा मिश्रण" के लिए मेरा निष्कर्ष या जंग शामिल था। शायद मेरे एम्बेडेड सिस्टम पृष्ठभूमि की वजह से। तो मेरा सपना टीम मिश्रण होगा: एरलांग | योग्य प्रतिस्थापन + हास्केल + जंग। – BitTickler