2012-06-26 8 views
10

प्रोग्रामिंग Erlang की शुरुआत में, वहाँ निम्नलिखित है:क्या एरलांग कम्प्यूटेशनल रूप से महंगा काम के लिए अनुपयुक्त बनाता है?

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

निहित संदेश यह है कि Erlang कम्प्यूटेशनल महंगा काम के लिए उपयुक्त नहीं है। Erlang इतना अनुपयुक्त बनाता है, या मैंने गलत व्याख्या की है?

+0

इसका हिस्सा यह है कि अन्य भाषाएं * अधिक * उपयुक्त हैं; Erlang का मजबूत सूट, संख्यात्मक एल्गोरिदम नहीं कहता है। इसके लिए आप सी/फोरट्रान/आदि का उपयोग करेंगे। –

+2

इसकी वजह यह है कि गणना में एरलांग से कुछ और बेहतर है। Erlang अभी भी गणना करता है और यदि एक कम्प्यूटेशनल समस्या 'parallerised' हो सकता है, erlang भी बेहतर प्रदर्शन कर सकते हैं। –

उत्तर

9

एरलांग आई/ओ-बाध्य अनुप्रयोगों के लिए चमकता है, यानी, जिनकी सीमित कारक आई/ओ ऑपरेशंस की विलंबता और थ्रूपुट है, जिस पर निर्देश सीपीयू पाइपलाइन के माध्यम से निर्देशित किए जा सकते हैं। वेब सर्वर और डेटाबेस I/O- बाध्य अनुप्रयोगों के अच्छे उदाहरण हैं: सीमित कारक CPU की बजाय डिस्क और नेटवर्क होने की संभावना है। परंपरागत रूप से "गणना-भारी" अनुप्रयोगों में क्रिप्टोग्राफिक उपकरण और वैज्ञानिक सिमुलेशन शामिल हैं।

क्यों Erlang सी और फोरट्रान जैसी भाषाओं मैच के लिए जब यह गहन समस्याओं computationally की बात आती है, तो हम कोड पीढ़ी और कैश-मित्रता जैसी चीजों पर विचार करना चाहिए विफल रहता है के रूप में ... मैं इसे आजमाइए होगी:

  • कोड जनरेशन: आम तौर पर जब आप एक एरलांग प्रोग्राम शुरू करते हैं, तो यह threaded code पर आधारित virtual machine बीईएएम में चलाया जाएगा। जबकि बीएएएम अधिकांश उद्देश्यों के लिए काफी अच्छा प्रदर्शन करता है, लेकिन आधुनिक ऑप्टिमाइज़िंग सी कंपाइलर द्वारा उत्पन्न कोड की तरह यह तार्किक "निर्देश" के प्रति अधिक अधिक ओवरहेड है। हायपीई प्रोजेक्ट एरलांग के लिए देशी कोड कंपाइलर प्रदान करता है जिसे दो साल पहले मुख्य ओटीपी स्रोत पेड़ में एकीकृत किया गया था *। हालांकि यह निश्चित रूप से एर्लांग की संख्या क्रंचिंग क्षमता में सुधार करता है, फिर भी यह एक अच्छी तरह से लिखित सी या फोरट्रान कार्यक्रम से मेल खाने में कठिन समय लगेगा।
  • कैश-मित्रता: आधुनिक कंप्यूटरों में स्मृति प्रणाली एक बड़ी बाधा है: मुख्य स्मृति से पढ़ने से सैकड़ों प्रोसेसर चक्र हो सकते हैं! इस समस्या को हल करने के लिए, सीपीयू डिजाइनर मेमोरी विलंबता को छिपाने के लिए कैश के कई स्तर पेश करते हैं। कैश कंप्यूटर प्रोग्राम के दो प्रमुख गुणों का फायदा उठाते हैं: अस्थायी और स्थानिक इलाके - यानी, स्मृति के क्षेत्र जिन्हें हाल ही में संदर्भित किया गया था (और आस-पास के क्षेत्रों) को फिर से संदर्भित किया जा सकता है। सी और फोरट्रान जैसी भाषाएं कहां और कैसे स्मृति आवंटित की जाती हैं, इस पर नियंत्रण का एक बड़ा सौदा प्रदान करता है, जिससे प्रोग्रामर को कैश के साथ अच्छी तरह से खेलने के लिए एल्गोरिदम ट्यून करने में सक्षम बनाता है। वही आम तौर पर एरलांग जैसी गतिशील भाषाओं के लिए नहीं होता है, जहां प्रोग्रामर से स्मृति आवंटन छुपाया जाता है और वर्चुअल मशीन द्वारा स्वचालित रूप से संभाला जाता है।
  • कोड का आकार: स्थानिक इलाके के बारे में तर्क कोड के लिए भी है; Erlang कोड, चाहे मूल या बाइटकोड रूप में, आमतौर पर इसी संकलित सी कोड से बड़ा होगा। यह निर्देश कैश में अधिक बार याद आती है।

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

* हायपीई डेबियन में एरलांग-बेस-हाइप पैकेज या ./configure --enable-hipe स्रोत स्रोत से उपलब्ध है।

+2

अच्छी पोस्ट! अधिकतम प्रदर्शन को कम करने के लिए, "आप उस मशीन के करीब हैं जो आप प्रोग्रामिंग कर रहे हैं तेज़ी से आप _can_ प्राप्त करते हैं क्योंकि प्रति तार्किक निर्देश कम ओवरहेड जोड़ना संभव है।" –

+0

आपके तरह के शब्दों और एक अच्छा सारांश के लिए धन्यवाद! –

9

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

8

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

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

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