आधुनिक सॉफ्टवेयर विकास और प्रोग्रामिंग के युग में, "रनटाइम" शब्द का संदर्भ और चर्चा की जा रही भाषा के आधार पर अलग-अलग अर्थ हो सकते हैं। मैं यहां इन अंतरों को स्पष्ट करने के लिए हूं, इस पर ध्यान केंद्रित करते हुए कि जावा या पायथन जैसी अधिक आधुनिक भाषाओं की तुलना में सी में रनटाइम कैसे काम करता है। मैं इस लेख को शुरुआती प्रोग्रामर के लिए केंद्रित रखना चाहता हूं, इसलिए मैं जटिल अवधारणाओं में जाने से बचूंगा।
इसके मूल में, रनटाइम स्वयं एक प्रोग्राम है जो डेवलपर द्वारा लिखे गए कोड को पढ़ता है और निष्पादित करता है। लेकिन यह भ्रमित करने वाला हो जाता है जब कुछ डेवलपर्स सी भाषा के साथ रनटाइम का उपयोग करते हैं।
जावा या पायथन जैसी भाषाओं में, रनटाइम स्वयं एक प्रोग्राम है जो आपकी myfile.js फ़ाइल को पढ़ता है, इसीलिए आप नोडज प्रोग्राम चलाते हैं जैसे: नोड myfile.js और v8 इंजन (जावास्क्रिप्ट इंजन है, यह जावास्क्रिप्ट को पार्स और निष्पादित करता है) कोड।) इसके लिए सब कुछ प्रबंधित करता है, चाहे आप एक नई फ़ाइल बनाएं, चाइल्ड प्रोसेस को स्पिन करें आदि और सबसे महत्वपूर्ण बात यह है कि आप ऐसा कुछ भी नहीं कर सकते हैं जो v8 आपको करने की अनुमति नहीं देता है।
लेकिन जब आप c प्रोग्राम चलाते हैं तो आप c myfile.c नहीं करते हैं, आपको बस इसे एक बार संकलित करना होता है और अब आपको gcc की आवश्यकता नहीं है, बस इसे सीधे चलाएं।
सी में, जावा या पायथन की तरह आपके कोड के साथ कोई अलग प्रोग्राम नहीं चल रहा है। इसके बजाय, जिसे अक्सर C "रनटाइम" कहा जाता है, वह वास्तव में संकलन के दौरान जोड़े गए स्थिर रूप से डाले गए कोड और निर्देशों का एक सेट है। यह सीपीयू/ओएस स्तर पर कुछ आवश्यक कार्यों को संभालने के लिए अंतिम बाइनरी में शामिल निर्देशों का एक न्यूनतम सेट है। यह फ़ंक्शन कॉल के लिए स्टैक फ़्रेम निर्माण और टियरडाउन को संभालता है (असेंबली में PUSH, POP, CALL, RET जैसे निर्देशों का उपयोग करके)। यहां तक कि इनलाइन असेंबली का उपयोग करके अपना स्वयं का __स्टार्ट फ़ंक्शन प्रदान करके इसे ओवरराइड किया जा सकता है, जिससे डेवलपर्स को प्रोग्राम के प्रवेश बिंदु और आरंभीकरण पर पूर्ण नियंत्रण मिल जाता है।
void __start() { // Custom entry point, no standard library initialization // You have no access to argc and argv here unless you access them manually from registers // you can create you own custom stack setup, initialization and etc here. // Exit directly using a syscall asm("mov $60, %rax; mov $0, %rdi; syscall"); // exit(0) syscall }
यह बिल्कुल भी रनटाइम जैसा नहीं लगता है, यह केवल कंपाइलर द्वारा जोड़ा गया कुछ असेंबली भाषा कोड है, इसलिए डेवलपर्स को ऐसा करने की आवश्यकता नहीं है।
सी में, आप कर्नेल के साथ इंटरैक्ट करने के लिए इनलाइन असेंबली का उपयोग करके सीधे सिस्टम कॉल शुरू कर सकते हैं, जो आमतौर पर ओएस द्वारा अनुमति नहीं है, इस तरह मैलवेयर बनाए जाते हैं। इनलाइन असेंबली डेवलपर्स को C कोड के भीतर असेंबली भाषा निर्देश लिखने की अनुमति देती है। इसका उपयोग अक्सर प्रदर्शन-महत्वपूर्ण कोड के लिए या विशिष्ट हार्डवेयर सुविधाओं तक पहुंचने के लिए किया जाता है।
लिनक्स C में एक FLAG है जो आपको कर्नेल के कुछ कैशिंग तंत्रों को दरकिनार करते हुए सीधे स्टोरेज डिवाइस पर फ़ाइल डेटा लिखने की अनुमति देता है, इसे O_DIRECT फ़्लैग कहा जाता है जिसका उपयोग ओपन और राइट सिस्टम कॉल के संयोजन में किया जाता है। यह ध्वज सुनिश्चित करता है कि डेटा को रैम में बफर नहीं किया गया है या कर्नेल स्पेस में कर्नेल द्वारा प्रबंधित नहीं किया गया है, यह सीधे डेटा को हार्ड ड्राइव पर लिखता है, जेवीएम आपको इसकी अनुमति नहीं देगा, और यह सिर्फ एक सरल उदाहरण है।
यहाँ एक सरल उदाहरण है:
asm volatile ( "syscall" : "=a" (written) : "0" (1), "D" (fd), "S" (buffer), "d" (BLOCK_SIZE) : "rcx", "r11", "memory" );
*नोट: * (लिखित) मुख्य() के अंदर बनाया गया वेरिएबल है, (1) लिखने के लिए सिस्कल नंबर है, (एफडी) वह जगह है जहां फ़ाइल लिखी जाएगी यानी int fs = open("path .log",O_WRONLY; (BLOCK_SIZE) एक अन्य परिवर्तनीय नाम है। यह उससे कहीं अधिक जटिल है।
यह समझना महत्वपूर्ण है कि रनटाइम की अवधारणा पिछले कुछ वर्षों में विकसित हुई है। 70 के दशक का सी "रनटाइम" 2000 के दशक की भाषाओं में देखे गए मजबूत रनटाइम वातावरण से बहुत अलग है। रनटाइम पर चर्चा करते समय यह विकास भ्रम पैदा कर सकता है, खासकर प्रोग्रामिंग के विभिन्न युगों से परिचित डेवलपर्स के बीच।
मुझे लगता है कि लोग अब 1970 के दशक के रनटाइम की तुलना 2000 के दशक के रनटाइम से कर रहे हैं, जिससे नए डेवलपर्स पुराने डेवलपर्स के साथ भ्रमित हो रहे हैं।
किसी विशिष्ट समस्या को हल करना किसी भी प्रोग्रामिंग भाषा का प्रमुख कार्य है, आप सी में एपीआई बनाने के लिए एक संपूर्ण रूपरेखा नहीं लिखना चाहते हैं, हमारे पास नोडज हैं और यह इसमें अच्छा है और आपको जावास्क्रिप्ट में बेयर मेटल कोड लिखने की आवश्यकता नहीं है क्योंकि हम मेरे पास पहले से ही C है और यह इसमें शानदार है। पहिये का पुन: आविष्कार क्यों करें, आइए पहियों का उपयोग करें और एक शानदार कार बनाएं, जब तक आप इसे मंगल ग्रह पर नहीं चलाना चाहते।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3