2013-06-12 5 views
6

क्या वाला जेनरेट कोड सामान्य हैंड-लिखित सी कोड की तरह अनुकूलित किया गया है? क्या इसका उपयोग न करने पर गोब्जेक्ट सिस्टम का उपयोग करने में कोई प्रदर्शन ओवरहेड है?वाला ने हाथ से लिखित सी कोड पर सी कोड उत्पन्न किया कितना अनुकूलित किया गया है?

नोट: मेरे अगले सी प्रोजेक्ट में मैं वैला का उपयोग करने के लिए शोध कर रहा हूं या नहीं। यह परियोजना एक जीयूआई एप्लीकेशन नहीं है, यह एक दुभाषिया प्रकार का एप्लीकेशन है जिसे मंच स्वतंत्र होना चाहिए। मैं संकलक के रूप में जीसीसी का उपयोग कर रहा हूँ।

उत्तर

10

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

तो, आपकी परियोजना के लिए मैं अभी भी क्रॉस-प्लेटफॉर्म सामग्री जैसे नेटवर्किंग, स्ट्रिंग यूटिल, यूनिकोड, डेटा स्ट्रक्चर आदि के लिए ग्लिब/जीओ का उपयोग कर रहा हूं, क्योंकि उनके पास एक स्वच्छ, सुसंगत और सुविधाजनक एपीआई है, लेकिन मैं गोब्जेक्ट्स/gtypeinstance के रूप में अस्थ वस्तुओं नहीं बनाऊंगा। एक दुभाषिया में आप तेजी से आवंटन चाहते हैं, यह पूरा बिंदु है।

मेरी निजी सलाह है: यदि आप डेस्कटॉप एप्लिकेशन, डीबीस सेवाएं, जीस्ट्रीमर सामान या जी * दुनिया को छूने वाली किसी भी चीज को बनाना चाहते हैं, तो कुछ भी नहीं।

2

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

समयपूर्व अनुकूलन सभी बुराइयों की जड़ है। :)

+0

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

+0

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

+0

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

5

यह आप क्या विशेष रूप से सी लेखन किया होता पर निर्भर करता है:

  • जब से मैं हाथ से GObject आधारित सी कोड लिख सकते हैं, जो आपके सीमा कितनी है? हस्तलिखित GObject- आधारित सी बनाम वाला लिखित GObject- आधारित सी? शायद तुलनात्मक रूप से तुलनीय है क्योंकि वाल एक मानव पुस्तकालय के रूप में एक ही लाइब्रेरी कॉल को कम या कम उत्पन्न करने जा रहा है।
  • गोब्जेक्ट कक्षाएं तकनीकी रूप से वैकल्पिक हैं। कक्षा के लिए सभी जीएलआईबी कोड पीढ़ी को छोड़ने के लिए आप कक्षा को [Compact] के रूप में चिह्नित कर सकते हैं, जो बहुत तेज होगा, हालांकि यदि आप ऐसा करते हैं तो आप कई सुविधाएं खो देंगे, जैसे वर्चुअल विधियां। सी में लिखे गए ऑब्जेक्ट की तुलना में यह अभी भी थोड़ा अधिक ओवरहेड होगा, लेकिन यह थ्रेड-सुरक्षित संदर्भ गिनती और कुछ अन्य चीजों के साथ आता है जो एक सामान्य सी प्रोग्रामर परेशान नहीं करेगा।
  • वैला बहुत सारे अस्थायी चर उत्पन्न करता है। यदि आपके सी कंपाइलर में अनुकूलन है, तो इनमें से अधिकतर अस्थायी समाप्त हो जाएंगे। वाला के नियंत्रण संरचनाओं का बड़ा हिस्सा उनके सी काउंटर भागों से मेल खाता है, इसलिए एक वैला if सी if की तुलना में अधिक महंगा नहीं होगा।
  • वैला संकलन समय पर स्मृति प्रबंधन करने के संदर्भों को ट्रैक करता है। आम तौर पर, यह सस्ता है, लेकिन यह सरणी और तारों के अतिरिक्त डुप्लिकेशंस का कारण बन सकता है। विशेष रूप से, यदि आप किसी स्वामित्व वाले चर के लिए एक अप्रयुक्त स्ट्रिंग की प्रतिलिपि बनाते हैं, तो strdup स्वचालित रूप से कॉल हो जाएगा। इसका मतलब है कि जेनरेटेड वाला इन छोटी, अस्थायी वस्तुओं को और अधिक बनाएगा, लेकिन, यदि यह वास्तव में एक समस्या है, तो आप अपनी रचना को सीमित करने के लिए unowned का तर्कसंगत उपयोग कर सकते हैं।
+0

यह एक अच्छी अंतर्दृष्टि है .. धन्यवाद :) –

+1

मुझे उस स्थान को इंगित करना चाहिए जहां वैला और सी लागत के मामले में भिन्न हैं तारों के कारण: '==' वैला में तारों पर 'strcmp' के परिणामस्वरूप, यह थोड़ा सा खर्च करता है अधिक। फिर फिर, आपको किसी भी तरह से सी में 'strcmp' करना होगा; जब आप कोड पढ़ते हैं तो यह केवल मामूली स्पष्ट नहीं है। – apmasell

2

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

Aroop कंपाइलर कोड उत्पन्न करता है जो ऑब्जेक्ट पूल का उपयोग करता है जिसे ऑब्जेक्ट सृजन और हेरफेर के लिए अनुकूलित किया गया है। वस्तुओं के संग्रह में डेटा उन्मुख विशेषताएं हैं। उदाहरण के लिए वस्तुओं को ध्वजांकित किया जा सकता है और वस्तुओं को एक बहुत ही कुशल तरीके से घुमाने के दौरान ध्वज का चयन किया जा सकता है और ऑब्जेक्ट्स स्मृति स्थान के परिप्रेक्ष्य में नज़दीकी दूरी पर हैं।

एरोप कंपाइलर shotodol प्रोजेक्ट लिखने के लिए उपयोग किया जाता है, जिसमें इसका स्वयं का जीयूआई नहीं होता है। इसमें मॉड्यूल और प्लगइन सिस्टम है। इसमें एक कमांड लाइन इंटरफ़ेस है जो लोगों को सर्वर एप्लिकेशन लिखने में सक्षम बनाता है। शॉटोडोल का उपयोग कर सर्वर एप्लिकेशन का एक उदाहरण यहां shotodol_web के रूप में मौजूद है। मैं चाहता हूं कि इस परियोजना को पसंद करने वाले लोग project page में अपने मुद्दों को साझा करें।

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