डायनेमिक कंपाइलेशन
कार्यक्रम निष्पादन |
---|
सामान्य अवधारणाएँ |
कोड के प्रकार |
संकलन रणनीतियाँ |
उल्लेखनीय रनटाइम्स |
|
उल्लेखनीय संकलक और टूलचेन |
|
डायनेमिक संकलन एक प्रक्रिया है जिसका उपयोग कुछ प्रोग्रामिंग भाषा कार्यान्वयन द्वारा प्रोग्राम निष्पादन के दौरान प्रदर्शन हासिल करने के लिए किया जाता है। हालांकि तकनीक की शुरुआत स्मॉलटाक में हुई थी,[1] इस तकनीक का उपयोग करने वाली सबसे प्रसिद्ध भाषा जावा (प्रोग्रामिंग भाषा) है। चूंकि डायनेमिक कंपाइलर द्वारा उत्सर्जित मशीन कोड का निर्माण और प्रोग्राम रनटाइम पर अनुकूलित किया जाता है, डायनेमिक संकलन का उपयोग दक्षता के लिए अनुकूलन को सक्षम करता है जो स्थिर-संकलित प्रोग्रामों के लिए उपलब्ध नहीं है (अर्थात जिन्हें एक तथाकथित बैच कंपाइलर द्वारा संकलित किया गया है, जैसा कि नीचे लिखा गया है) सिवाय डुप्लीकेट कोड या मेटाप्रोग्रामिंग के माध्यम से।
गतिशील संकलन का उपयोग करने वाले रनटाइम वातावरण में आमतौर पर पहले कुछ मिनटों के लिए धीरे-धीरे चलने वाले कार्यक्रम होते हैं, और उसके बाद, अधिकांश संकलन और पुनर्संकलन किया जाता है और यह जल्दी से चलता है। इस प्रारंभिक प्रदर्शन अंतराल के कारण, कुछ मामलों में गतिशील संकलन अवांछनीय है। गतिशील संकलन के अधिकांश कार्यान्वयन में, प्रारंभिक संकलन समय पर किए जा सकने वाले कुछ अनुकूलन रन टाइम (प्रोग्राम जीवनचक्र चरण) | रन-टाइम पर आगे संकलन तक विलंबित होते हैं, जिससे आगे अनावश्यक मंदी आती है। समय-समय पर संकलन गतिशील संकलन का एक रूप है।
वृद्धिशील संकलक
एक निकट संबंधी तकनीक वृद्धिशील संकलन है। POP-2, POP-11, फोर्थ (प्रोग्रामिंग भाषा), लिस्प (प्रोग्रामिंग भाषा) के कुछ संस्करणों में एक इंक्रीमेंटल संकलक का उपयोग किया जाता है, उदा। Maclisp और ML का कम से कम एक संस्करण (प्रोग्रामिंग भाषा) (Poplog ML)। इसके एमएल (प्रोग्रामिंग भाषा) के लिए कंपाइलर को रनटाइम सिस्टम का हिस्सा बनाने की आवश्यकता होती है। नतीजतन, स्रोत कोड को किसी भी समय, टर्मिनल से, फ़ाइल से, या संभवतः चल रहे प्रोग्राम द्वारा निर्मित डेटा-संरचना से पढ़ा जा सकता है, और मशीन कोड ब्लॉक या फ़ंक्शन में अनुवादित किया जा सकता है (जो पिछले फ़ंक्शन को प्रतिस्थापित कर सकता है) उसी नाम का), जो तब प्रोग्राम द्वारा उपयोग के लिए तुरंत उपलब्ध होता है। इंटरैक्टिव विकास और परीक्षण के दौरान संकलन की गति की आवश्यकता के कारण, संकलित कोड को मानक 'बैच कंपाइलर' द्वारा उत्पादित कोड के रूप में अत्यधिक अनुकूलित नहीं किया जा सकता है, जो स्रोत कोड में पढ़ता है और ऑब्जेक्ट फ़ाइलों का उत्पादन करता है जो बाद में लिंक किया जा सकता है और भाग खड़ा हुआ। हालाँकि एक वृद्धिशील रूप से संकलित प्रोग्राम आमतौर पर उसी प्रोग्राम के व्याख्या किए गए भाषा संस्करण की तुलना में बहुत तेज़ी से चलेगा। वृद्धिशील संकलन इस प्रकार व्याख्या और संकलित भाषाओं के लाभों का मिश्रण प्रदान करता है। पोर्टेबिलिटी में सहायता के लिए वृद्धिशील कंपाइलर के लिए आम तौर पर दो चरणों में काम करना वांछनीय है, अर्थात् पहले कुछ मध्यवर्ती प्लेटफ़ॉर्म-स्वतंत्र भाषा के लिए संकलन, और फिर मेजबान मशीन के लिए मशीन कोड से संकलन करना। इस मामले में पोर्टिंग के लिए केवल 'बैक एंड' कंपाइलर को बदलने की आवश्यकता होती है। गतिशील संकलन के विपरीत, जैसा कि ऊपर परिभाषित किया गया है, वृद्धिशील संकलन में कार्यक्रम के पहले चलने के बाद आगे के अनुकूलन शामिल नहीं हैं।
यह भी देखें
- Transmeta प्रोसेसर गतिशील रूप से x86 कोड को VLIW कोड में संकलित करते हैं।
- गतिशील पुनर्संकलन
- अभी-अभी संकलन
संदर्भ
- ↑ Peter L. Deutsch and Alan Schiffman. "Efficient Implementation of the Smalltalk-80 System", 11th Annual Symposium on Principles of Programming Languages, Jan 1984, pp. 297-302
बाहरी संबंध
- The UW Dynamic Compilation Project
- Architecture Emulation through Dynamic Compilation
- SCIRun
- Article "Dynamic Compilation, Reflection, & Customizable Apps" by David B. Scofield and Eric Bergman-Terrell
- Article "High-performance XML: Dynamic XPath expressions compilation" by Daniel Cazzulino
- Matthew R. Arnold, Stephen Fink, David P. Grove, Michael Hind, and Peter F. Sweeney, A Survey of Adaptive Optimization in Virtual Machines, Proceedings of the IEEE, 92(2), February 2005, Pages 449-466.