2011-03-04 17 views
38

क्या सी कोड को जावास्क्रिप्ट में और जावास्क्रिप्ट से सी में परिवर्तित करने का कोई तरीका है? मुझे V8 juice मिला जो सी ++ से JavaScript-side कक्षाएं उत्पन्न कर सकता है, लेकिन यह केवल एक ही तरीका है (जावास्क्रिप्ट में सी ++)।जावा कोड को कोड कोड में कनवर्ट करें

मैं एक सॉफ्टवेयर की तलाश नहीं कर रहा हूं।

+2

अब मैं अपने लिनक्स सर्वर के तहत जावास्क्रिप्ट कोड निष्पादित करने के लिए node.js चला रहा हूं, इसलिए मैं अन्य लोगों को सी कोड लिखकर प्लगइन जोड़ने देना चाहता हूं। यही कारण है कि मुझे सी पुस्तकालय जावास्क्रिप्ट automaticaly में परिवर्तित करने के लिए एक पुस्तकालय या एक इंजन की तरह v8 रस की जरूरत है। –

+0

कोई जवाब नहीं, बस एक टिप्पणी: एक जेस्क्रिप्ट कंपाइलर विंडोज/.NET लाता है। इसे jsc.exe कहा जाता है। यह हर जावास्क्रिप्ट को संकलित नहीं कर सकता है। यदि यह स्थापित है तो यह या तो c: \ Windows \ winsxs या C: \ Windows \ Microsoft.NET \ Framework \ में स्थित है। यदि आपके पास फैंसी सामान के बिना एक सादा जावास्क्रिप्ट एल्गोरिदम है, तो यह काम कर सकता है। – Laokoon

+0

यह मुझे कोई समझ नहीं आता है। – Rolf

उत्तर

35

बहुत, बहुत मुश्किल --- जावास्क्रिप्ट एक बहुत ही गतिशील भाषा है जहां रनटाइम पर बहुत कुछ सब कुछ बदला जा सकता है: चर, कार्यों, प्रकार इत्यादि के नाम। जैसे कि यह सी पर बहुत बुरी तरह से मानचित्र करता है और यह नहीं है eval() पर भी विचार करते हुए, जो आपको तारों में जावास्क्रिप्ट के मनमानी हिस्सों का निर्माण करने और उन्हें चलाने के लिए अनुमति देगा।

किसी भी जावास्क्रिप्ट अनुवादक को ऐसी चीजों का सामना करने में सक्षम होना होगा, जिसका अर्थ है कि इसे जावास्क्रिप्ट को रन-टाइम पर सी में अनुवाद करना होगा --- जो इसे एक जेआईटी बनाता है, जिसे आप पहले ही उपयोग कर रहे हैं।

आप इसके बजाय जावास्क्रिप्ट के लिए सी बाइंडिंग लिखना चाहते हैं। ये आपके जावास्क्रिप्ट कोड को सी कोड और इसके विपरीत कॉल करने की अनुमति देगा। यह लोगों को सी में प्लगइन लिखने की अनुमति देगा, उन्हें .so साझा पुस्तकालयों में संकलित करें, जिन्हें आप अब अपने जावास्क्रिप्ट कोड से लोड और चला सकते हैं। इसका मतलब है कि आपको कुछ भी अनुवाद करने की आवश्यकता नहीं है।

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

+4

फिर भी, कंप्यूटर प्रोग्राम निर्धारक हैं इसलिए सैद्धांतिक रूप से सबकुछ सी में संकलित करना संभव है क्योंकि जावास्क्रिप्ट की व्याख्या करने में उपयोग की जाने वाली सभी तंत्र पहले से ही सी में मौजूद हैं। किसी को उस उपकरण को बनाने में समय बिताना होगा। स्वयंसेवक के लिए कौन नीचे है? x} – trusktr

+0

यह संभव और बहुत आसान है। आपको बस इतना करना है कि PHP के लिए प्रीप्रोसेसर के रूप में इसे अब क्या उपयोग किया जाता है (#ifdef अगर आप परिणामस्वरूप कोड को पठनीय करना चाहते हैं तो इसे काट नहीं पाएंगे, और आपको रूपांतरण करने के लिए सामान्य मानचित्रों की तरह संरचनाएं की आवश्यकता होगी) । इसके बाद, आप जो भी करते हैं, वह "कंपाइल-टाइम" कोड और "रनटाइम-कोड" के बीच एक दीवार बनाते हैं, इसके बाद, जेएससन के माध्यम से सी और वीज़ा बनाम मार्शल जेएस के लिए यह छोटा है, और जावा को जावास्क्रिप्ट के आंतरिक प्रतिनिधित्व के लिए जावास्क्रिप्ट का मूल्यांकन करने दें , लेकिन ऐसा करने के लिए और अच्छा कोड है, आपको सी के लिए एक अधिक शक्तिशाली प्रीप्रोसेसर की आवश्यकता है। – Dmitry

+0

अफसोस की बात है कि इस समय सी में नक्शे रखने के लिए कोई "अच्छा तरीका" नहीं है, उनमें से सभी बदसूरत और गन्दा और बग प्रवण हैं, और जावास्क्रिप्ट लगभग विशेष रूप से नक्शे पर निर्भर करता है। आप इसे सी ++ में कर सकते हैं लेकिन इस बिंदु पर आप केवल वी 8 को एम्बेड कर सकते हैं क्योंकि यह सी ++ में लिखा गया है और यह आपके से बेहतर होगा, लेकिन सी के पास "पूर्ण मुक्त असंगत abstractions और gdb-friendliness" नहीं होगा। एक अधिक शक्तिशाली प्रीप्रोसेसर के साथ, सी आसानी से किसी भी ऊपर की भाषा में पुल करने में सक्षम हो जाएगा (जो ऑब्जेक्ट्स के माध्यम से रनटाइम जेनरिक का समर्थन करता है, जबकि सी में आपको शून्य पॉइंटर्स के मेटाडेटा को स्टोर करने के लिए ऑब्जेक्ट का आविष्कार करने की आवश्यकता होती है) – Dmitry

6

क्यों परिवर्तित करें जब आप आसानी से एम्बेड कर सकते हैं?

https://code.google.com/p/v8/ "वी 8 स्टैंडअलोन चला सकता है, या किसी भी सी ++ एप्लिकेशन में एम्बेड किया जा सकता है।"

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

+6

माइक्रोकंट्रोलर पर क्या है? मेरा उद्देश्य कुछ गणित एल्गोरिदम को js से स्वचालित रूप से C++ में परिवर्तित करना है, इसलिए मुझे मैन्युअल रूप से – Funkodebat

17

Castl का उपयोग कर जावास्क्रिप्ट से लूआ का सबसेट अनुवाद करना संभव हो सकता है, और फिर lua2c का उपयोग करके लू कोड को सी में अनुवाद करना संभव हो सकता है।

वैकल्पिक रूप से, यह compile JavaScript to Python, और फिर convert the Python source code into C RPython संकलक का उपयोग कर संभव हो सकता है। चूंकि RPython अजगर का एक सबसेट है, इस

वहाँ भी एक संकलक ts2c कहा जाता है, जो जाहिरा तौर पर सी में

+1

पोर्ट करने की आवश्यकता नहीं है लेकिन हम पूर्णसेट चाहते हैं! हालांकि यह दिलचस्प है। – trusktr

2
जावास्क्रिप्ट और टाइपप्रति स्रोत कोड अनुवाद करने में सक्षम है जावास्क्रिप्ट का एक सबसेट सी में अनुवाद करने की अनुमति चाहिए

यह प्रोजेक्ट काफी आशाजनक दिखता है, भले ही यह प्रगति पर एक काम है।

https://github.com/andrei-markeev/ts2c

आप यहाँ ऑनलाइन सेल्सियस के लिए जावास्क्रिप्ट परिवर्तित कर सकते हैं:

https://andrei-markeev.github.io/ts2c/

0

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

जावास्क्रिप्ट को सी में परिवर्तित करना संभव है क्योंकि सी दुभाषियों सहित किसी निष्पादन सामग्री को वस्तुतः संभाल सकता है।

+0

हे! 1 99 0 के दशक में वापस जाओ! सी के साथ अब कोई इंटरप्ट नहीं कर रहा है! (osdev maniacs को छोड़कर, मेरे जैसे!) –

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