2009-02-25 10 views
6

मैंने कोड उत्पादों का उपयोग करने वाले कई उत्पादों पर काम किया है। यह उपयोगकर्ता-अनुकूलन और उच्च निष्पादन गति दोनों की एक उच्च डिग्री प्राप्त करने का एकमात्र तरीका प्रतीत होता है।कोड उत्पन्न करते समय, आपको कौन सी भाषा उत्पन्न करनी चाहिए?

नकारात्मकता यह है कि हमें उपयोगकर्ताओं को एक कंपाइलर स्थापित करने की आवश्यकता है (मुख्य रूप से एमएस विंडोज़ पर)।

यह चल रहा सिरदर्द रहा है, क्योंकि एमएस जैसे विक्रेता ओएसओएसटिंग कंपिलर रखते हैं, और कुछ उपयोगकर्ताओं में एक से अधिक कंपाइलर स्थापित होते हैं।

हम जीएनयू सी, और संभवतः सी ++ का उपयोग करने पर विचार कर रहे हैं, लेकिन यहां तक ​​कि वहां लगातार संस्करण मुद्दे हैं।

मैंने संकलक-संस्करण-ट्रेडमिल को दूर करने के प्रयास में संभावित रूप से असेंबली भाषा उत्पन्न की है, लेकिन असेंबली भाषाएं सभी मशीन-विशिष्ट हैं।

आदर्श रूप से जेनरेट कोड उत्पन्न करने का कोई तरीका होगा जो लचीला होगा, तेजी से दौड़ेंगे, और हमें तीसरे पक्ष के प्रदाताओं की इच्छाओं के बारे में बताएगा।

शायद मैं जावा की तरह कुछ सरल दिख रहा हूं। किसी भी सुझाव की सराहना की जाएगी। धन्यवाद।

उत्तर

8

आप सी और यहां तक ​​कि कोडांतरक पर विचार कर रहे हैं, तो पहले LLVM पर एक नज़र डालें: http://llvm.org

+0

यह दिलचस्प लग रहा है। लिंक के लिए धन्यवाद। –

+0

मैं इसे अब एक प्रोजेक्ट में उपयोग कर रहा हूं (http://code.roadsend.com/rphp)। यह एक अच्छा एपीआई, उदार लाइसेंस, कई प्लेटफार्मों को लक्षित करता है, और भारी अनुकूलित करता है। –

3

मैं कुछ संदर्भ यहाँ लापता हो सकता है, लेकिन तुम सिर्फ एक विशेष संस्करण के लिए अपने आप को पिन कर सकता है? उदा।, .NET 2.0 को .NET 1.1 और .NET 3.5 के साथ-साथ भविष्य में आने वाले अन्य संस्करणों के साथ-साथ स्थापित किया जा सकता है। इसलिए जब तक आपका कोड किसी कंपाइलर के विशिष्ट संस्करण का उपयोग करता है, तो समस्या क्या है?

+0

विंडोज-विशिष्ट होने के अलावा यह एक अच्छा सुझाव है। मैं उस पर विचार करूंगा। –

+0

आदर्श रूप से, यह विंडोज़-सीमित नहीं होगा, और अब से 10-15 साल के काम पर भरोसा किया जा सकता है। –

+0

हां, लेकिन आप सी # 1.0 जैसे कुछ भी लक्षित कर सकते हैं।यह आगे संगत और मोनो प्रोजेक्ट के माध्यम से अन्य प्लेटफार्मों पर समर्थित होना चाहिए। – dhable

2

एक विकल्प एक भाषा/पर्यावरण का उपयोग करना होगा जो कोड में कंपाइलर तक पहुंच प्रदान करता है; उदाहरण के लिए, here is a C# example

+0

धन्यवाद। यह अच्छा लग रहा है, लेकिन मुझे इसकी दीर्घायु और/या मंच स्वतंत्रता के बारे में आश्चर्य है। –

+0

मुझे नहीं लगता कि दीर्घायु चिंता का विषय होना चाहिए; जब तक आपका एप्लिकेशन क्लाइंट मशीन पर चल सकता है, कोड जनरेशन काम करना चाहिए (क्योंकि वे दोनों एक ही ढांचे पर निर्भर करते हैं)। प्लेटफार्म निर्भरता आपकी भाषा पर निर्भर करेगी; सी # के लिए, आप मोनो (ओपन सोर्स .नेट कार्यान्वयन) में देख सकते हैं। –

+0

बहुत उपयोगी। मैं उसे देखूंगा। –

3

मैंने संकलक-संस्करण-ट्रेडमिल को दूर करने के प्रयास में संभावित रूप से असेंबली भाषा उत्पन्न की है, लेकिन असेंबली भाषाएं सभी मशीन-विशिष्ट हैं।

एक संकलक :)

कहा जा सकता है कि तुम क्यों C90 से टिक नहीं पाता?

यदि आपने एक्सटेंशन का उपयोग नहीं किया है, तो मैंने gcc की तरफ से मानकों के गंभीर उल्लंघन के बारे में बहुत कुछ नहीं सुना है।

और आप हमेशा अपने उत्पाद के साथ gcc की एक निश्चित संस्करण वितरित कर सकते, कहते हैं, 4.3.2, अपने स्वयं के जोखिम पर अपने स्वयं के संकलक का उपयोग करने के लिए उपयोगकर्ताओं के लिए एक विकल्प दे रही है।

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

+0

यही वह है जिसे हम झुका रहे हैं। मैं सोच रहा हूं कि लोगों के समान अनुभव हैं या नहीं। –

+0

प्रो * सी सी 9 0 तक चिपक जाती है और 1 99 6 से मैंने जो कुछ देखा है, उसके तहत काम करता है - बोर्लैंड सी, विजुअल सी, जीसीसी इत्यादि – Quassnoi

+0

प्रो * सी ओरेकल के लिए एंबेडेड एसक्यूएल प्रीकंपेलर है, यदि आप इससे परिचित नहीं हैं :) – Quassnoi

2

क्यों अपने कोड जनरेटर के साथ एक GNU सी संकलक जहाज नहीं? इस तरह आपके पास कोई संस्करण समस्या नहीं है, और ग्राहक लगातार कोड उत्पन्न कर सकता है जो प्रयोग योग्य है।

+0

यही वह है जिसे हम विचार कर रहे हैं। मुझे उम्मीद है कि कोई गठिया नहीं है। –

1

मैं उस भाषा को तैयार करने के लिए उस भाषा से चिपके रहूंगा जिसका उपयोग आप उस भाषा को उत्पन्न करने के लिए करते हैं।आप जावा में जावा कोड जेनरेट और संकलित कर सकते हैं, पाइथन में पाइथन कोड, सी # सी # सीआईएस में एलआईएसपी आदि में भी

लेकिन यह स्पष्ट नहीं है कि ऐसी भाषाएं आपके लिए पर्याप्त तेज़ हैं या नहीं। शीर्ष गति के लिए मैं सी ++ उत्पन्न करना और संकलन के लिए जीसीसी का उपयोग करना चुनूंगा।

+0

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

+0

एफडब्ल्यूआईडब्ल्यू, कुछ लिस्प कार्यान्वयन बेहद तेज़ हैं (जैसे सीएमयू सीएल)। वे अन्य कारणों (जैसे पुस्तकालयों की कमी, या ओएस के साथ खराब एकीकरण) के लिए अनुपयुक्त हो सकते हैं। –

+0

@ डेविड: अच्छा सुझाव। हालांकि, इस संगठन के लिए थोड़ा दूर है। –

2

ऐसा लगता है कि आप LLVM की तलाश में हैं।

+0

शैनन ने भी सुझाव दिया। पारितोषिक के लिए धन्यवाद। –

1

स्पाइडरमोन्की या राइनो (जावा या सी ++ में जावास्क्रिप्ट समर्थन) जैसे कुछ का उपयोग क्यों न करें। आप अपनी ऑब्जेक्ट्स जावास्क्रिप्ट नेमस्पेस पर निर्यात कर सकते हैं, और आपके उपयोगकर्ताओं को कुछ भी संकलित करने की आवश्यकता नहीं है।

+0

धन्यवाद। मुझे यहां बहुत सारे अच्छे विचार मिल रहे हैं। –

3

यदि आप एएसएम कोड जेनरेट करना चाहते हैं, तो आप asmjit पर एक नज़र डाल सकते हैं।

1

यह बहुत देर हो सकती है। लेकिन यहां मेरे दो सेंट हैं। आपके प्रोग्राम में लुआ/स्कीम जैसी भाषा के लिए एक दुभाषिया एम्बेड करें। और उस भाषा में कोड उत्पन्न करें।

+0

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

1

@ एल्विन के उत्तर के मामले में "मेरे 2 सेंट जोड़ने में देर हो सकती है" की भावना में, यहां कुछ ऐसा है जो मैं सोचता हूं: यदि आपका आवेदन कुछ वर्षों तक चल रहा है, तो है आवेदन और सिस्टम कैसे काम करते हैं, इस बारे में कई बदलावों का सामना करना पड़ रहा है।

उदाहरण के लिए, मान लीजिए कि आप इस 10 साल पहले सोच रहे थे। मैं फिर डेक्सटर देख रहा था, लेकिन मुझे लगता है कि आपको वास्तव में यादें हैं कि उस समय चीजें कैसे थीं। जो मैं कह सकता हूं, उससे 2000 के डेवलपर्स के लिए मल्टीथ्रेडिंग एक मुद्दा नहीं था, और अब यह है। तो मूर का कानून उनके लिए तोड़ दिया। इससे पहले कि लोगों ने "Y2K" में क्या होगा, इस बारे में भी परवाह नहीं की थी।

मूर के कानून की बात करते हुए, प्रोसेसर वास्तव में काफी तेजी से हो रहे हैं, इसलिए शायद कुछ अनुकूलन भी आवश्यक नहीं होंगे। और संभवतः ऑप्टिमाइज़ेशन की सरणी बहुत बड़ी होगी, some processors कई सर्वर-केंद्रित सामग्री (एक्सएमएल, क्रिप्टोग्राफी, संपीड़न और रेगेक्स के लिए अनुकूलन प्राप्त कर रहे हैं! मुझे आश्चर्य है कि चिप पर ऐसी चीजें हो सकती हैं) और कम ऊर्जा खर्च भी करती है (जो युद्ध हार्डवेयर के लिए शायद बहुत महत्वपूर्ण है ...)।

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

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

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

पीएस: किसी भी मामले में, मैं अतीत के सी अनुकूलन विश्वास करता हूं अभी भी आधुनिक कंपाइलरों के तहत काफी मान्य है!

+0

मैं आपके विचारों की सराहना करता हूं (हालांकि आप मुझे एक बकवास दे रहे हैं :)। एक और कानून है: प्रकृति एक निर्वात का पालन करती है। अच्छा पुराना मूर कभी भी कोडर से बाहर नहीं निकलेगा। यदि जलने के लिए और अधिक चक्र हैं, तो इन्हें अतिरिक्त अद्भुतता के लिए इस्तेमाल किया जा सकता है, लेकिन आमतौर पर ऐसा होता है कि वे प्रोग्रामर द्वारा बेहद लापरवाही से चमकते हैं, और इस बात की कोई मूलभूत सीमा नहीं है कि कितना अपर्याप्त सॉफ़्टवेयर हो सकता है। कभी डर नहीं, धागे, कोर, बादल, कंपाइलर जादूगर, क्वांटम की कोई मात्रा औसत मूर्खता के किसी भी प्रोग्रामर से बाहर निकल सकती है। –

+0

... आपको यह इंप्रेशन नहीं देना है कि मैं नकारात्मक हूं :-) प्रदर्शन ट्यूनिंग का एक कौशल है, यदि लोग वास्तव में इसका उपयोग करते हैं (जो वे बात करते हैं लेकिन वास्तव में नहीं करते हैं), प्रदर्शन को हटा सकते हैं बग, और उन सभी अद्भुत चक्रों को * अच्छे * उपयोग में डाल दें: http://stackoverflow.com/questions/926266/performance-optimization-strategies-of-last-resort/927773#927773 –

+0

@ माइक वेल, आप सही हैं कि, और वास्तविक कोड जो सीपीयू प्रक्रिया आजकल पुराने कोड की दक्षता से बहुत दूर है।मैं हैरान था कि हाल ही में इस्तेमाल किया गया एक बहुत पुराना (9 0) जीआईएफ निर्माता फ़ोटोशॉप सीएस 3 के रूप में तेज़ और मेमोरी-कुशल था (मेरे मामले में यह mattered था, क्योंकि जीआईएफ के पास ~ 600 फ्रेम थे), तो मुझे लगता है कि कोडबेस भी क्योंकि फ़ोटोशॉप अच्छी तरह अनुकूलित नहीं हैं। गंभीरता से, मैं प्रोग्रामिंग में अपेक्षाकृत नया हूं, और मुझे लगता है कि कंपनियां (और इसलिए, प्रोग्रामर) वास्तव में गति के लिए अनुकूलित करना चाहते हैं, तो यह कितना धीमा सॉफ़्टवेयर की तुलना में धीमा हो सकता है। –

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