2009-06-10 14 views
30

मेरा मानना ​​है कि मुझे लगता है कि एंड्रॉयड के कारण JVM के लिए Dalvik वी एम पर कि गतिशील भाषाओं चल रहा है, कुछ बिंदु पर पढ़ा (Clojure, Jython, JRuby आदि) कठिन Dalvik पर अच्छा प्रदर्शन प्राप्त करने के लिए दबाया किया जाएगा (और इसलिए एंड्रॉइड पर)। अगर मैं सही ढंग से याद है, तर्क है कि हुड के नीचे, आदेश गतिशील टाइपिंग प्राप्त करने के लिए, वहाँ काफी जावा बाईटकोड के साथ और कहा कि bytecode-> Dalvik अनुवाद आसानी से इस लेने नहीं होगा किया नगण्य का एक सा था।गतिशील बोली के लिए एंड्रॉयड प्रतिकूल

तो मैं एक गतिशील JVM भाषा से बचना चाहिए अगर मैं Android के लिए विकसित करना चाहते हैं?


संपादित करें: मुझे लगता है कि मुझे थोड़ा और संदर्भ प्रदान करना चाहिए था। मैं एंड्रॉइड के लिए ऐप्स विकसित करने के लिए क्लोजर का उपयोग करने पर विचार कर रहा था। मैं कुछ कारणों से Clojure उपयोग करने के बारे में सोच रहा था:

  • मैं एफपी सीखना चाहते

  • मैं वास्तव में जावा जानने के लिए परवाह नहीं है

  • Clojure कुछ बहुत ही दिलचस्प है करने के लिए लगता है भाषा अवधारणाओं (उदाहरण के लिए एसटीएम )।

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

उत्तर

17

दान बोर्न्स्टीन एक presentation on Dalvik at Google I/O दे दी है। सामान्य रूप से सिस्टम के बारे में जानने के लिए यह देखने लायक है, जिसमें आप जिन बाधाओं की परवाह करते हैं, उनमें शामिल हैं। जावा बाईटकोड में संकलित गैर जावा भाषाओं के विशिष्ट मुद्दा क्यू & ए

Remco van 't Veer दौरान ऊपर आता है एक github project जहां उन्होंने Android पर काम करने के लिए Clojure समझौता है है। Tim Riddell ने tutorial on how to use it लिखा है।

जैसा कि यहां बताया गया है @sean, कभी-कभी प्रदर्शन की तुलना में एक बड़ी समस्या होती है। ~54:00 in video. पर जेथन के बारे में पूछे जाने पर डेन बोर्नस्टीन ने चर्चा की है वर्तमान में गतिशील भाषाओं के लिए कोई समर्थन नहीं है जो बाइटकोड ऑन-द-फ्लाई उत्पन्न करता है, (क्योंकि बाइटकोड अनुवाद रनटाइम पर उपलब्ध नहीं है)। JVM के लिए

2

clojure काम करने के लिए कुछ पैच रहे हैं।

http://riddell.us/tutorial/clojure_android/clojure_android.html

मुझे लगता है कि असली मुद्दा कुछ गतिशील भाषाओं से बाइट कोड जनरेटर का प्रयोग होता है; वे डेविक वीएम के लिए बाइट कोड उत्पन्न नहीं करेंगे। इसलिए eval काम नहीं करेगा।

+0

@ सेन मैककॉलिफ़, क्या पैच क्लोजर के साथ स्टार्टअप प्रदर्शन समस्या को संबोधित करता है? मैं क्लोजर सीखने (एंड्रॉइड के लिए एफपी भाग चाहता था) सीखने पर काम कर रहा था और मैं स्टार्टअप समय के साथ एक बड़ी समस्या में भाग गया। जहां तक ​​मुझे पता है कि स्टार्टअप टाइम इश्यू को संबोधित नहीं किया गया है - जब तक कि पैच इसे संबोधित न करे। –

2

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

Android SDK इसके अलावा बहुत समझदार और के लिए मुझे नहीं लगता कि आप कुछ और का उपयोग कर बहुत बहुत से लाभ अनुभव करेंगे करते लिखने के लिए आसान है।

3

एंड्रॉयड सिर्फ got scripting

+1

हाँ, लेकिन इसका उपयोग वास्तव में अन्य लोगों के लिए कार्यक्रम बनाने के लिए नहीं किया जा सकता है ... –

+0

मुझे यकीन नहीं है कि आप मेरे प्रश्न जेवियर को समझ चुके हैं। –

+1

@onorio: शायद बिल्कुल नहीं, क्योंकि आप JVM- आधारित भाषाओं के बारे में बात कर रहे हैं; लेकिन अगर आप किसी भी स्क्रिप्टिंग भाषा चाहते हैं, तो अब एंड्रॉइड कुछ लोगों को 'मूल रूप से' समर्थन देता है, बिना मध्य में जेवीएम प्राप्त किए, जो वर्तमान में स्क्रिप्टिंग के लिए एक बहुत बड़ी प्रदर्शन बाधा है। – Javier

1

गतिशील भाषाओं कठिन Dalvik

पर अच्छा प्रदर्शन प्राप्त करने के लिए दबाया जा होगा

गतिशील भाषाओं कठिन अवधि अच्छा प्रदर्शन प्राप्त करने के लिए, दबाया जाता है। यदि आप प्रदर्शन चाहते हैं, तो जावा (या सी #, एफ # इत्यादि) जैसी स्थिर टाइप की गई भाषा का उपयोग करें।

+0

लुआजिट एक काउंटररेक्स नमूना है। एंड्रॉइड पर भी काम करता है। – Demi

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