2008-09-26 17 views
10

मैं एक ऐसे अनुप्रयोग के निर्माण पर विचार कर रहा हूं जो गतिशील भाषा (पायथन या रूबी) और संकलित भाषा का मिश्रण है और मुझे यह सुनिश्चित करने में कुछ मदद चाहिए कि यह एक अच्छा विचार है।पॉलीग्लोट प्रोग्रामिंग: क्या कई भाषाओं के साथ अनुप्रयोगों का निर्माण एक अच्छा अभ्यास है?

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

से पुस्तकालयों की

  • उपलब्धता गतिशील भाषा में कोडिंग द्वारा

    1. बढ़ी हुई उत्पादकता लेकिन वहाँ भी कुछ कर रहे हैं:

      मैं इस दृष्टिकोण के लाभ का एक बहुत कुछ देख सकते हैं डाउनसाइड्स:

      1. दो भाषाओं के बीच एक पुल बनाए रखना
      2. दो भाषाओं और भाषा/पुस्तकालय कीड़े के बजाय एक

      क्या अन्य पेशेवरों/इस दृष्टिकोण का विपक्ष हैं पर निर्भरता? क्या किसी को इसके आसपास किसी भी संसाधन और/या सर्वोत्तम प्रथाओं के बारे में पता है?

  • उत्तर

    12

    मुझे लगता है कि आपका दृष्टिकोण बहुत समझदार है। डाउनसाइड्स को संबोधित करने का तरीका समय से पहले पता लगाना है कि यह तय करने से पहले सी या सी ++ के साथ गतिशील भाषा को इंटरफ़ेस करना कितना आसान है कि यह आपके प्रोजेक्ट के लिए उपयोग करना है या नहीं।

    इसके अलावा, आपको यह सोचने की आवश्यकता है कि आप अपने एप्लिकेशन को क्रॉस-प्लेटफार्म बनना चाहते हैं या नहीं। संकलित एक की तुलना में एक गतिशील भाषा बहुत कम प्लेटफार्म निर्भर होने की संभावना है। यह निर्णय लेने में एक कारक हो सकता है कि ऐप के कौन से हिस्से सी या सी ++ में किए जाने चाहिए।

    3

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

    1

    मुझे लगता है कि यह एक अच्छा विचार है।

    चूंकि अधिकांश (लगभग सभी?) ओएस सी या सी ++ में लिखे जाते हैं, इसलिए प्रत्येक गतिशील या व्याख्या की गई भाषा निम्न स्तर पर कम स्तर की सामग्री के लिए एक संकलित, अनुकूलित भाषा पर वापस आती है।

    5

    जा, बिएन सुर, मेरा फ्रींड। यह वास्तव में un'idea meravigliosa है। बोआ सॉर्ट करें।

    मैं निश्चित रूप से मजाक कर रहा हूं। एक वेब डेवलपर रोज़ाना ध्यान देने के बिना करता है: जावा, जेएसपी, ईएल/ओजीएनएल, एचटीएमएल, सीएसएस, जावास्क्रिप्ट, चींटी, एक्सएमएल, एक्सएसएलटी ...

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

    +0

    वास्तव में - सबसे बातें मैं लिख रहा हूँ पीएचपी, एक्सएमएल, XSLT, सीएसएस, HTML और जे एस में हैं। वेब विकास हर समय mulitple स्थानों में नौकरी के लिए सबसे अच्छा उपकरण का उपयोग करता है। –

    +0

    XSLT? यह मेरे लिए ग्रीक की तरह है। आप यह है कि इस सूची में एसक्यूएल भूल गया। –

    +0

    @Christopher महन: हाँ! वास्तव में, जैसा कि मैंने कहा, :) –

    2

    आप पाते हैं कि आपको बाद में किसी भी प्रदर्शन महत्वपूर्ण सामग्री को लागू करने की आवश्यकता नहीं है। इसलिए, जब तक आप वास्तव में सुनिश्चित नहीं हैं कि आपको ऐसा करने की ज़रूरत है, तब तक मैं इन प्रदर्शनों में से किसी एक महत्वपूर्ण प्रवेश के प्रवेश के खिलाफ कड़ी मेहनत करूँगा।

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

    सभी प्रदर्शन समस्याओं के लिए आपको निम्न स्तर की भाषा में गिरावट की आवश्यकता नहीं होगी, इसलिए जल्दी से किसी दूसरे पर कूदने से पहले, इसे पहले से ही एक श्लेगी में आज़माएं और इससे निपटें।

    गुड लक,

    2

    मैं इस काम के लिए सबसे अच्छा उपकरण का उपयोग कर के पक्ष में हूँ। सॉफ़्टवेयर इंजीनियरिंग के मामले में इसका अर्थ है पॉलीग्लोट होना। आप कभी भी एक बढ़ई का उपयोग केवल एक हथौड़ा का उपयोग करने की उम्मीद नहीं करेंगे, इससे कोई फर्क नहीं पड़ता कि वह क्या बना रहा था। यह हमारे लिए अलग क्यों होना चाहिए?

    0

    यह काफी आम है, लेकिन सुनिश्चित करें कि आप जानते हैं कि आप इसे किस तरह से आर्किटेक्ट कर रहे हैं।

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

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

    2

    @Zorkerman

    मैं दोनों Jython और JRuby के साथ अनुभव है ... JRuby के साथ एक बहुत अधिक।

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

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

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


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

    6

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

    लेकिन अगर आप ऐसा करेंगे, बाहर एक प्रोफाइलर, तोड़ ध्यान से अनुकूलन करने के लिए कुछ चुनते हैं, और इसके लिए जाओ।

    2

    यह ध्यान देने योग्य है कि गैम्बिट योजना और चिकन (और उस बात के लिए कुछ अन्य कार्यान्वयन) एक व्याख्या मोड में चलने लायक है, और फिर सी

    करने के लिए नीचे संकलित किया जा सकता
    1

    कुछ लोगों का तर्क है कि हम प्रोग्रामर भी गुरु चाहिए बहुत सारी भाषाएं। वे तर्क देते हैं कि एक भाषा जोड़ना एक बुरी चीज है।

    एसक्यूएल में पूरे डेटा का उपयोग, HTML/CSS में प्रस्तुति अपरिवर्तनीय हो रहा है।

    एक्सएमएल बात थोड़ा थकाऊ है: कुछ लोगों के रूप में अगर एक्सएमएल सॉफ्टवेयर बेहतर बनाने के लिए जादुई शक्तियों है एक्सएमएल में सब कुछ करने की कोशिश।

    इसके अलावा, वहाँ क्योंकि कई भाषाओं का अतिरेक भी पर्याप्त मात्रा में है। अंतर-भाषा बाइंडिंग का सब का मतलब है कि चीजें दो बार लिखा मिलता है, एक बार प्रत्येक भाषा में।

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