2009-02-17 9 views
45

मैंने हमेशा खुद से पूछा कि क्या जावा को सी ++ कनवर्टर बनाना संभव होगा।क्या जावा से सी ++ कनवर्टर/उपकरण मौजूद है?

शायद एक उपकरण जो जावा सिंटैक्स को C++ वाक्यविन्यास में परिवर्तित करता है?

मुझे पता है कि भाषाओं अलग हूँ, लेकिन छोरों की तरह साधारण चीजें अर्थ विज्ञान 1 1.

मैच इस तरह के एक उपकरण है कहाँ? या यह एक बनाना संभव है?

+8

यह एक अच्छा सवाल है। मैं हमेशा सोच रहा था: ऐसा क्यों है कि हम स्वचालित रूप से जटिल प्राकृतिक भाषाओं (http://translate.google.com/translate_t) का अनुवाद कर सकते हैं, लेकिन स्वचालित रूप से बहुत सरल, प्रतिबंधित प्रोग्रामिंग भाषाओं के बीच अनुवाद करने में असफल हो जाते हैं? – Frank

+20

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

+0

कुछ प्रयास - [ONE] (http://tech.novosoft-us.com/product_c2j.jsp) और [TWO] (http://www.soften.ktu.lt/~stonis/c2java/index.html) जावा कनवर्टर के लिए एक सी बनाने के लिए। – Lazer

उत्तर

22

पर्याप्त समय, पैसा और संसाधन दिए गए कुछ भी करना संभव है। क्या यह व्यावहारिक है? मामूली उदाहरणों से परे वास्तव में नहीं। या इसके बजाय यह एक स्वीकार्य त्रुटि दर का गठन करता है पर निर्भर करता है।

वास्तविक समस्या यह है कि मुहावरे जावा में सी ++ में अलग हैं। उदाहरण के लिए जावा से सी # वास्तव में बहुत आसान होगा (क्योंकि मुहावरे अधिक समान हैं)। सबसे बड़ी बात यह है कि सी ++ में विनाशक और मैन्युअल रूप से प्रबंधित स्मृति है। जावा इस तरह के व्यवहार के लिए अंततः ब्लॉक का उपयोग करता है और कचरा संग्रह है।

इसके अलावा जावा में एक सामान्य ऑब्जेक्ट सुपरटेप है। सी ++ नहीं करता है।

टेम्पलेट्स के जेनरिक असंभव पर होंगे जो मैं कल्पना करूंगा।

+10

पर जावा बाइटकोड करना मुश्किल नहीं होना चाहिए सामान्य वस्तु कोई समस्या नहीं है। कनवर्टर बस एक वर्ग की आपूर्ति करता है और फिर बेस क्लास के बिना किसी भी वर्ग को विरासत जोड़ता है। जावा में जेनेरिक सिर्फ वाक्य रचनात्मक चीनी है और सी ++ टेम्पलेट्स कोई समस्या नहीं संभाल सकता है। हालांकि दूसरी तरफ जाना असंभव होगा। –

+0

कुल मिलाकर हालांकि मैं मानता हूं कि मुहावरे सिर्फ मेल नहीं खाते हैं। सी ++ लिखना उसी तरह से नहीं किया जाता है। –

+0

आम वस्तु अभी भी एक समस्या है। संग्रह उस के आसपास बनाए जाते हैं (विशेष रूप से जेनेरिक के साथ)। विचार यह है कि आप कुछ भी सम्मिलित कर सकते हैं। एसटीएल कंटेनर के लिए उस तरह की चीज को बराबर करना बिल्कुल 1: 1 नहीं है। जीसी के संबंध में – cletus

2

http://www.tangiblesoftwaresolutions.com/Order/Order_Upgrade_Instant_CPlus_Java_Edition.htm

जहां कोड का उपयोग किया जाएगा, एक सीखने के नजरिए से शायद यह दिलचस्प हो सकता है के डोमेन पर निर्भर करता है।

मुझे यह एक Google के माध्यम से मिला क्योंकि मुझे यूनिवर्सिस्टी में एक को देखने को याद आया जिसने उम पर आधारित कोड बनाया था।

7

संभव है, कोई सवाल नहीं है, लेकिन यह इतना आसान नहीं होगा। यह एक जावा कंपाइलर होगा जो सी ++ उत्पन्न करता है।

यदि आप इसे स्क्रैच से करना चाहते हैं, तो यह बहुत कठिन होगा, आपको सभी काम javac और JVM आपके लिए करना होगा (उदा। कचरा संग्रह)।

बीटीडब्ल्यू। Google के पास जावास्क्रिप्ट कंपाइलर में जावा है (GWT में शामिल)

+0

सौभाग्य से, सी ++ में जीसी, जेनेरिक इत्यादि के लिए पहले से ही कई समाधान हैं जिन्हें आसानी से उपयोग किया जा सकता है। – peterh

+0

एकता गेम इंजन में आईपी (सी #) सीपीपी कनवर्टर है। सीपीपी –

2

वहां ऐसे प्रोग्राम हैं जो दावा करते हैं कि वे ऐसा कर सकते हैं, लेकिन किसी ने भी पर्याप्त लोकप्रियता प्राप्त नहीं की है, इसलिए हम उन्हें "प्रयास" पर छोड़ देंगे। एक कनवर्टर बनाने के लिए आपके कार्यक्रम में बहुत सी एआई की आवश्यकता होगी। स्विंग शामिल होने पर कठिनाई दस गुना बढ़ जाती है क्योंकि जीटीके/wxwidgets/Qt/win32 एपीआई स्विंग से काफी अलग है। लेकिन यह संभव है। यह नहीं कि कोड की गुणवत्ता बहुत अच्छी होगी, और कोई गारंटी नहीं है कि अलग-अलग मेमोरी हैंडलिंग विधियों के कारण आपका प्रोग्राम क्रैश नहीं होगा, लेकिन यह संभव है।

3

जैसा कि कहा गया है कि जावा को सी ++ में परिवर्तित करना मुश्किल होगा, लेकिन हमारे पास एक आवेदक या उपकरण हो सकता है जो जावा और समकक्ष सी ++ कोड में कोड उत्पन्न करता है।

मुझे एक आवेदकॉन पता है जो सी ++/जावा/सी # में एक मॉडल दिया गया है जिसमें इसका डिफाईन करने का अपना तरीका है।

वह उपकरण सीए से संबंधित है और नाम सीए प्लेक्स है। www.ca.com पर खोजें

2

कुछ साफ एक उपकरण हो सकता है, कि जावा अनुवाद "सी ++ जावा एपीआई का उपयोग कर" (जीएनयू GCJ सीएनआई) की तरह करने के लिए, एक समस्या बने हुए हैं array.length (सरणी वेक्टर नहीं) का प्रबंधन करने के लिए है .. ।

+1

'std :: vector v; v.length() '? –

2

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

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

2

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

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

वास्तविक कनवर्टर को सभी आयातित जावा पुस्तकालयों (और उनके आयातित पुस्तकालयों और इतने पर ...) को परिवर्तित करना होगा जिसका अर्थ है कि आपको सबकुछ के लिए स्रोत कोड की आवश्यकता होगी। जावा पुस्तकालय बड़े होने के बाद से यह रूपांतरण कोई छोटा काम नहीं है।

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

5

एक है, मुझे यकीन नहीं है कि यह वास्तव में काम करता है या नहीं। Java to C++ Converter-Tangible Software Soulutions

यह अजीब बात है कि जावा कन्वर्टर्स के लिए सी ++ कैसे हैं, लेकिन सी 1+ कनवर्टर के लिए केवल 1 जावा हैं।

10

Firefox HTML5 parser is written in Java and converted to C++। लेकिन मुझे लगता है कि इस प्रोजेक्ट के लिए इस्तेमाल किया गया कनवर्टर काफी विशिष्ट है। दिलचस्प बात यह है कि परिणामस्वरूप सी ++ पार्सर सी ++ में लिखे पुराने पार्सर से तेज था।

मैं H2 database के हिस्से के रूप में एक कनवर्टर भी लिख रहा हूं, src/tools/org/h2/java के अंतर्गत। विचार H2 डेटाबेस के उप-समूह को C++ में परिवर्तित करने की अनुमति देना है, इसलिए यह एक सामान्य उद्देश्य अनुवादक भी नहीं है।

और ओपन सोर्स प्रोजेक्ट J2C है।

तो जावा को C++ में बदलने के तरीके हैं। लेकिन अनुवादक की सभी सुविधाओं का समर्थन करने की अपेक्षा न करें, और उम्मीद न करें कि परिणामस्वरूप कोड एक अच्छा जावा जेवीएम से तेज हो।

+0

क्या आपके पास H2 से C++ रूपांतरण या इस तरह के sth के बारे में कोई ब्लॉग आलेख है (यह दिलचस्प है कि यह विचार आपके दिमाग में कैसे आया और आप किस समस्या से मिले थे)? –

+0

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

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