2011-06-22 10 views
5

एक्शनस्क्रिप्ट, जावा, सी #, आदि इंटरमीडिएट कोड में संकलित क्यों करते हैं? मुझे इंटरमीडिएट कोड का उपयोग करने के क्रॉस-प्लेटफ़ॉर्म लाभों के बारे में पता है।इंटरमीडिएट कोड में संकलन क्यों करें?

सवाल यह है: स्क्रिप्ट्स (जेएस, पायथन, पीएचपी, पर्ल, इत्यादि) की तुलना में इंटरमीडिएट कोड को संकलित करने का क्या फायदा है?

क्या यह केवल कोड obfuscation के लिए है? और क्या?

इसके अतिरिक्त मूल कोड को संकलित करने की तुलना में लाभ क्या है?

+6

यह obfuscation नहीं है। मामूली – SLaks

उत्तर

6

सभी ऐतिहासिक जावा सबसे पहले मोबाइल फोन के लिए लक्षित और बहुत ही सीमित सीपीयू/स्मृति एम्बेडेड उपकरणों था की तरह अलग अलग भाषाओं के बीच अंतर को हल करती है, और इस तरह के JVM पर डिवाइस अब तक किसी भी गहन अनुकूलन नहीं कर सकते हैं, जैसे आधुनिक जेआईटी अब के लिए करते हैं। तो जावा engeneers चरण संकलन करने के लिए अनुकूलन स्थानांतरित करने का फैसला किया।

अगला, "बाइट कोड"/आईएल होने के कारण आपको विभिन्न भाषाओं से कई कंपाइलर ऐसे बाइट कोड में और केवल एक जेवीएम/जेआईटी में रखने की अनुमति देता है। प्रत्येक भाषा के लिए अलग-अलग वीएम + जेआईटी बनाने के लिए यह अधिक कुशल है। याद रखें, आपके पास जावा, जेआरबी, जेपीथॉन, ग्रोवी, आदि ... जेवीएम दुनिया में, और सी #, वीबी #, एएसपी.नेट, एफ #, आदि - .NET दुनिया में, और प्रत्येक के लिए केवल एक रनटाइम/वीएम है।

+1

एएसपी.NET एक प्लेटफॉर्म नहीं है, प्रोग्रामिंग भाषा नहीं है। –

+0

ठीक है, हो सकता है कि मैंने कुछ नामों का दुरुपयोग किया हो - .NET मेरी विशेषता नहीं है :) – BegemoT

12

यह जावा और विशेष रूप से सी # (जिसमें अधिक सुविधाएं हैं) की उच्च-स्तरीय भाषा को पार्स करने के लिए पार्स और जेआईटी-संकलन आईएल कोड के लिए बहुत तेज है।

यह डेवलपर्स को अंत उपयोगकर्ताओं की मशीनों पर कुछ भी अपडेट किए बिना नई भाषा सुविधाओं का उपयोग करने की अनुमति देता है। (उदाहरण के लिए, LINQBridge)

1

इंटरमीडिएट कोड असेंबली के समान है जिसमें इसमें निर्देशों का सीमित सेट शामिल है। रनटाइम फिर भाषा को पार्स करने के बारे में चिंता किए बिना निर्देशों के छोटे सेट (कुछ हद तक) पर भरोसेमंद और लगातार संचालित करने में सक्षम है। इसलिए यह प्रदर्शन सुधार हासिल कर सकता है और अनुकूलन कर सकता है।

1

MSIL को नेट संकलन में सी #, VB.NET आदि

1

बाइनरी कोड निर्देश बहुत सरल और परमाणु हैं, प्रोग्रामिंग विवरणों की तुलना में बहुत कुछ हो सकता है।

उदाहरण के लिए, z = a + b - (c * d) को चार मानों को रजिस्टरों में लोड करने के लिए अनुवादित करने की आवश्यकता होगी, फिर एक जोड़, गुणा करें और घटाएं, फिर एक और स्मृति स्थान में लिखें। तो हमारे पास उस पंक्ति के लिए कम से कम 8 निर्देश हैं या तो!

इंटरमीडिएट कोड दोनों दुनिया के सर्वश्रेष्ठ - क्रॉस-प्लेटफार्म है, लेकिन मशीन कोड सामान्य रूप से लिखे जाने के तरीके के करीब भी है।

1

एसएलएक्स के उत्तर के अलावा, आईएल को संकलित करने से क्रॉस-भाषा इंटरऑपरेबिलिटी की एक डिग्री सक्षम होती है जो आमतौर पर व्याख्या की गई भाषाओं में मौजूद नहीं होती है।

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

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

+0

JRuby (JVM पर रूबी) के बारे में क्या? – Jesper

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

  • कोई संबंधित समस्या नहीं^_^