2011-04-18 22 views
11

मैं केवल एक बार एक निश्चित एल्गोरिदम (मेरे कोड का ग्राफिक्स प्रतिपादन उप-मॉड्यूल) लिखने और बनाए रखने का एक तरीका ढूंढ रहा हूं। मुझे सी ++, PHP और जावास्क्रिप्ट में एल्गोरिदम चाहिए। सैद्धांतिक रूप से मैं इसे सी ++ में लिख सकता हूं और इसे एक PHP एक्सटेंशन में लपेट सकता हूं; लेकिन इसमें स्वयं के कई मुद्दे हैं और जावास्क्रिप्ट लिंक को हल नहीं करते हैं।कई आउटपुट भाषाओं में मेटा प्रोग्रामिंग

जो मैं खोज रहा हूं, मुझे लगता है, एक ऐसा उपकरण है जो एक भाषा से बदलता है (इससे कोई फर्क नहीं पड़ता) तीन (या दो, यदि स्रोत भाषा तीन में से एक है) आउटपुट भाषाएं I मैं लक्ष्यीकरण कर रहा हूँ। मुझे मेटाएल (http://www.meta-language.net/) मिला है जो मुझे लगता है कि वह करना चाहता है लेकिन मृत दिखता है (2007 से कोई अपडेट नहीं) और केवल मुझे आवश्यक तीन भाषाओं में से एक को लक्षित करता है। इसे काफी लचीला होना चाहिए और मुझे परिणामों को अपडेट करने की अनुमति दें - उदाहरण के लिए, मैं अपने सी ++ और PHP प्रतिपादन में काहिरा का उपयोग करता हूं, और जावास्क्रिप्ट पक्ष पर एचटीएमएल कैनवास। तो मुझे कुछ प्रभावों के लिए एपीआई में कस्टमाइज़ करने की जरूरत है।

वैकल्पिक रूप से, मैं एक PHP पार्सर और लेक्सर के लिए बसूंगा जो मुझे एक वैकल्पिक बैकएंड के रूप में सी ++ और जावास्क्रिप्ट के जेनरेटर लिखने के लिए पर्याप्त जानकारी के साथ एक एएसटी देगा।

कोई भी विचार? धन्यवाद।

+1

आपके प्रश्न ने मुझे पुराने उद्धरण की याद दिला दी: _Some लोग, जब किसी समस्या का सामना करते हैं, तो सोचें "मैं पता है, मैं नियमित अभिव्यक्तियों का उपयोग करूंगा। " अब उनके पास दो समस्याएं हैं ._ मैं रखरखाव को केंद्रीकृत करने की आपकी इच्छा को समझता हूं, लेकिन ऐसा लगता है कि आप कुछ हद तक परेशान करने वाली-लेकिन-उचित समस्या ले रहे हैं और इसे एक बहुत ही जटिल समस्या में बदल रहे हैं। (मैं स्वचालित निर्माण, अनुवाद इंजन के साथ समस्याओं और डीबगिंग नरक के बारे में सोच रहा हूं, जो आप दर्ज करने वाले हैं) गरीब व्यक्ति के बारे में सोचें जो आपको इस समाधान को बनाए रखने के बाद बनाए रखना है .. – NightDweller

+0

यदि आप कोड की कुछ हज़ार लाइनों के बारे में बात कर रहे हैं, आप एपीआई को ध्यान से डिजाइन करने और बस उन्हें रिकोड करने के लिए बेहतर होंगे। सभी अजीब चीजों के लिए स्वचालित कोड जनरेशन एक लंगेज में मिलता है (उदाहरण के लिए, सी ++: कक्षाओं, एकाधिक-विरासत, नामस्थान, पृथक घोषणा/परिभाषा, मैक्रोज़, टेम्पलेट्स, अधिभार, ...) एक बड़ा काम है और नहीं कुछ हज़ार लाइनों के प्रयास के लायक है। यदि आप 100 के एसएलओसी उत्पन्न करना चाहते हैं तो यह प्रयास के लायक होगा, या अगर आपने मनमान तरीके से कोड टुकड़े बनाये हैं। लेकिन एक निश्चित एल्गोरिदम की 3 प्रतियां? परेशानी के लायक मत सोचो। –

+0

मैं इसे लिखने के लिए खुद को एक भाषा के बहुत छोटे सबसेट तक सीमित कर सकता हूं। मुझे स्पष्ट रूप से कई भाषाओं में सी ++ की सभी बारीकियों का अनुवाद करने की आवश्यकता नहीं है। प्रतिपादन 90% 'पिक्सेल, आयताकार या सर्कल का गणना स्थान है, इसके रंग की गणना करें, कॉल ड्राइंग एपीआई फ़ंक्शन'। यह सामान्य उद्देश्य नहीं होना चाहिए। वैसे भी ऐसा लगता है कि हेक्से मुझे जो चाहिए वह करेगा। – Roel

उत्तर

5

आप haXe पर एक नज़र डाल सकते हैं। हेक्से एक ओपन सोर्स प्रोग्रामिंग भाषा है। इसे जावास्क्रिप्ट, फ्लैश/एक्शनस्क्रिप्ट, php5, सी ++, और भविष्य में जावा, सी # में संकलित किया जा सकता है।

+0

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

1

शायद एक्सएमएल में अपने मूल एल्गोरिदम को 'कोडिंग' और अपनी लक्षित भाषाओं में आउटपुट के लिए विभिन्न xslt टेम्पलेट्स का उपयोग करके देखें? या संभवतः antlr (http://www.antlr.org/ http://www.amazon.com/Definitive-Antlr-Reference-Domain-Specific-Programmers/dp/0978739256/ref=sr_1_1?s=books&ie=UTF8&qid=1303114884&sr=1-1)।

+0

हाँ, जो मेटाएल ने ऐसा करने की कोशिश की है, उतनी ही कम है, मुझे लगता है कि एक्सएसएलटी के बिना मैं क्या कह सकता हूं। मेरे पास xslt के साथ बहुत अच्छे अनुभव नहीं हैं, इसलिए मैं इसे छोड़ने जा रहा हूं, लेकिन शायद मैं कुछ आसान अन्य XML-> कोड ट्रांसफॉर्म कर सकता हूं ... धन्यवाद। – Roel

2

Emscripten परियोजना (जो मैं केवल पिछले सप्ताह देखा) आपकी रुचि की हों: http://syntensity.blogspot.com/2011/04/emscripten-10.html

यह आदमी मूल रूप से C/C++ कि जावास्क्रिप्ट कोड को संकलित करता है के लिए एक संकलक लिखा है।

इससे आपकी समस्या का जावास्क्रिप्ट पक्ष हल हो जाना चाहिए।

उम्मीद है कि मदद करता है।

एक ही पंक्ति के साथ एक और उत्पाद, और थोड़ा और अधिक ज्ञात Google वेब टूलकिट (जीडब्ल्यूटी) है। यह जावा पर आधारित है, लेकिन अंतिम परिणाम समान है - आप जावा कोड में अपना वेब एप्लिकेशन लिखते हैं और यह फ्रंट-एंड पार्ट्स को जावास्क्रिप्ट और बैक-एंड पार्ट्स को नियमित जावा बाइटकोड में संकलित करता है। मुझे पता है कि आप जावा के लिए नहीं पूछ रहे हैं, लेकिन यदि यह आपकी रूचि रखता है, तो लिंक यहां है: http://code.google.com/webtoolkit/

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

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

+0

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

1

शायद आप इसे जावास्क्रिप्ट में लिख सकते हैं और फिर सी ++ और PHP जावास्क्रिप्ट दुभाषिया का उपयोग कर सकते हैं।

+0

दिलचस्प विचार, धन्यवाद। – Roel

+0

@ रोएल: "रेंडरिंग" आमतौर पर संगणकीय रूप से गहन है। एक संगणकीय रूप से गहन कार्य के रूप में ऐसा करने के लिए दुभाषियों की एक परत का निर्माण करना मेरे लिए एक अच्छा विचार नहीं लग रहा है। –

+0

मेरे मामले में इससे कोई फर्क नहीं पड़ता। यह व्यापार बंद लायक है। – Roel

-1

असेंबली कोड का उपयोग करने के लिए एक पूरी तरह से अलग दृष्टिकोण होगा। अपनी पसंद की भाषा में एल्गोरिदम लिखें, इसे एएसएम स्रोत में संकलित करें।फिर तैनाती भाषाओं में इंटरफ़ेस रैपर प्रदान करें।

बेशक यह सब इतना 'एयर पाई' है। यह कई चर, लक्ष्य प्लेटफार्मों की संख्या, अनुकूलन का महत्व, कार्यान्वयन परिवर्तन आदि से संबंधित अंतरफलक परिवर्तन की आवृत्ति आदि पर निर्भर करता है

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