2012-11-07 23 views
8

स्वचालित रूप से रुबी कोड को लुआ में कनवर्ट करने का कोई तरीका है? मेरा सवाल है:मैं रूबी को लुआ में कैसे बदल सकता हूं?

  1. इस उद्देश्य के लिए किस प्रकार के उपकरण मौजूद हैं?
  2. उनकी सीमाएं क्या हैं?

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


अद्यतन:

मैं इस विषय में काफ़ी शोध किया है और मैं व्यक्तिगत रूप से एक हल नहीं कर रहा हूँ (जिसके कारण मैं StackOverflow पर यहाँ सवाल पूछ रहा हूँ)।

मामले में किसी को भी उत्सुक है, मैं में गहराई से देखा है:

  • Ruby-Lua, हालांकि यह सब करता है आप रूबी
  • RLua से लुआ कॉल करने की अनुमति, यह करने की अनुमति देता लूआ से रूबी कोड चलाएं और vise versa लेकिन यह रुबी से लुआ का अनुवाद नहीं कर रहा है और यह अभी भी कार्यक्रम चलाने पर रूबी दुभाषिया का आह्वान करता है।
+0

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

+0

@lhf, मुझे यह पसंद है :( – nickb

+0

डाउनवॉट्स क्यों? – nickb

उत्तर

7

मैं माफी चाहता हूँ अगर यह जवाब आप सुनना चाहते नहीं है, लेकिन वहाँ है यह पाल करने के लिए, कोई व्यावहारिक तरीका है। मैं कहना है रूबी लुआ से अमीर है, के रूप में मैं काफी बाद कि कहने के लिए अध्ययन नहीं किया है नहीं जा रहा हूँ, लेकिन मैं क्या जानते हैं और क्या मैं देख रहा हूँ,

  1. कोई रास्ता किसी को परवाह है | से लुआ और इसी तरह की भाषाओं में रुबी कंपाइलर लिखना।
  2. ऐसे कंपाइलर को लिखने का कोई तरीका नहीं है जो आपको अपने प्रोग्राम को मैन्युअल रूप से पुनः लिखने से कम समय लेगा।
  3. रूबी समुदाय रूबी बाइटकोड में रूबी को संकलित करने की परवाह करता है।

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

+0

सहमत ......... – texasbruce

+0

सहमत हैं। भाषा की विशेषताएं अलग-अलग हैं।यही कारण है कि रूपांतरण आपको ढीले फायदे और नुकसान का परिचय देगा। यदि आप शुद्ध लुआ चाहते हैं, शुद्ध लुआ लिखें। – glasz

+4

jruby के लोग आपके साथ एक शब्द चाहते हैं :)। – sunnyrjuneja

2

नोट: मैं यहां हर किसी के साथ सहमत हूं कि आपको वास्तव में अपने कार्यक्रम को खरोंच से फिर से लिखना चाहिए। यह जवाब सिर्फ एक विचार है, मुझे आशा है कि कोई वास्तव में देखेंगे।

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

उदाहरण के लिए, a few Ruby-to-Javascript कार्यान्वयन हैं, जैसे RubyJS। मेटामाइड्स को अलग करना, self सिंटैक्टिक चीनी, लाइब्रेरी मतभेद, और यहां कुछ और अर्थपूर्ण अंतर, लूआ को अधिक वर्बोज़ सिंटैक्स के साथ जावास्क्रिप्ट का सबसेट के रूप में देखा जा सकता है।

कि मन में, आप बैकएंड जनरेटर के सबसे को संशोधित कर सकता है यहाँ और वहाँ बदलते कुछ { } द्वारा साथ

:

// some random js 
while(x < 56 && y == 40) { 
    print('Hello World!'); 
} 

 

-- What you could make it generate: 
while x < 56 and y == 40 do 
    print 'Hello World!' 
end 

शायद कई बार हो सकता है जब यह जावास्क्रिप्ट विशिष्ट विशेषताओं पर निर्भर करता है, लेकिन फिर भी, उनमें से अधिकतर नकल किया जा सकता है।

// Javascript has a === operator that enforces type equality 
'5' === 5 // FALSE! 

 

-- Lua lacks this, but it's easy to imitate 
(type('5') == type(5)) and ('5' == 5) 

नहीं, ईमानदारी से, यह नहीं एक आसान परियोजना होगा, लेकिन मुझे लगता है कि यह निश्चित रूप में समय निवेश के लायक कुछ है। मुझे उम्मीद है कि इस मदद करता है! :)

+1

मुझे पता है कि इस पर सांप के तेल के साथ हमेशा इसके लिए बाजार रहेगा। इसके द्वारा, मेरा मतलब रूबीजेएस को अपमानित करने का नहीं है। वे खुद को स्वीकार करते हैं - 'रूबीजेएस' साइट का हवाला देते हुए: "रूबीजेएस के साथ आप रूबी के एक सबसेट को जावास्क्रिप्ट कोड में बदल सकते हैं।" * सबसेट * कीवर्ड है। यह महत्वपूर्ण सफलता प्राप्त कर सकता है, लेकिन अंत में, शराब पर शराब की तरह होगा: इस पर चलने वाले कार्यक्रमों के बहुत सारे, आपको वास्तव में आवश्यक एक अपवाद के साथ। फिर भी, प्रयास के लिए आपको +1। –

0

Universal-transpiler एसडब्ल्यूआई-प्रोलॉग के लिए एक लाइब्रेरी है जो रुबी के लुई और कई अन्य भाषाओं में एक छोटे से सबसेट को परिवर्तित कर सकती है।

यह Prolog में इसके उपयोग का एक उदाहरण है, अपने इनपुट के रूप में रूबी स्रोत कोड के साथ:

:- use_module(library(transpiler)). 
:- set_prolog_flag(double_quotes,chars). 
:- initialization(main). 

main :- 
    translate("def add(a,b) return a + b end def squared(a) return a*a end def add_exclamation_point(parameter) return parameter + \"!\" end",'ruby','lua',X), 
    atom_chars(Y,X), 
    writeln(Y). 

... और इस है लुआ स्रोत कोड उत्पन्न कि:

function add(a,b) 
     return a..b 
end 
function squared(a) 
     return a*a 
end 
function add_exclamation_point(parameter) 
     return parameter.."!" 
end 
संबंधित मुद्दे