डायनेमिक कंपाइलेशन

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

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

इंक्रीमेंटल कंपाइलेशन
निकट संबंधी तकनीक इंक्रीमेंटल कंपाइलेशन है। पीओपी-2, पीओपी-11, फोर्थ (प्रोग्रामिंग भाषा), लिस्प (प्रोग्रामिंग भाषा) के कुछ संस्करणों में इंक्रीमेंटल कंपाइलेशन का उपयोग किया जाता है, उदाहरण मैक्लिस्प और एमएल का कम से कम संस्करण (पोपलॉग एमएल) है। एमएल (प्रोग्रामिंग भाषा) के लिए कंपाइलर को रनटाइम प्रणाली का हिस्सा बनाने की आवश्यकता होती है। नतीजतन, स्रोत कोड (सोर्स कोड) को किसी भी समय, टर्मिनल से, फ़ाइल से, या संभवतः चल रहे प्रोग्राम द्वारा निर्मित डेटा-संरचना से पढ़ा जा सकता है, और मशीन कोड ब्लॉक या फ़ंक्शन में अनुवादित किया जा सकता है (जो पिछले फ़ंक्शन को प्रतिस्थापित कर सकता है उसी नाम का है), जो तब प्रोग्राम द्वारा उपयोग के लिए तुरंत उपलब्ध होता है। पारस्परिक विकास और परीक्षण के दौरान संकलन की गति की आवश्यकता के कारण, संकलित कोड को मानक 'बैच कंपाइलर' द्वारा उत्पादित कोड के रूप में अत्यधिक अनुकूलित नहीं किया जा सकता है, जो स्रोत कोड में पढ़ता है और ऑब्जेक्ट फ़ाइलों का उत्पादन करता है जो बाद में लिंक किया जा सकता है और चलने लगता है। चूंकि एक विकसित संकलित प्रोग्राम सामान्य तौर पर उसी प्रोग्राम के व्याख्या किए गए भाषा संस्करण की तुलना में बहुत तेज़ी से चलेगा। इंक्रीमेंटल कंपाइलेशन इस प्रकार व्याख्या और संकलित भाषाओं के लाभों का मिश्रण प्रदान करता है। पोर्टेबिलिटी में सहायता के लिए इंक्रीमेंटल कंपाइलर के लिए सामान्य तौर पर दो चरणों में कार्य करना वांछनीय है, अर्थात् पहले कुछ मध्यवर्ती प्लेटफ़ॉर्म-स्वतंत्र भाषा के लिए संकलन, और फिर होस्ट मशीन के लिए मशीन कोड से संकलन करना है। इस मामले में पोर्टिंग के लिए केवल 'बैक एंड' कंपाइलर को बदलने की आवश्यकता होती है। डायनेमिक कंपाइलेशन के विपरीत, जैसा कि ऊपर परिभाषित किया गया है, विकसित संकलन में प्रोग्राम के पहले चलने के बाद आगे के अनुकूलन सम्मिलित नहीं हैं।

यह भी देखें

 * ट्रांसमेटा प्रोसेसर गतिशील प्रकार से एक्स86 कोड को भीएलआइडब्ल्यू कोड में संकलित करते हैं।
 * गतिशील पुनर्संकलन
 * जस्ट-इन-टाइम कंपाइलेशन

बाहरी संबंध

 * 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.