"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > रनटाइम को समझना: सी से आधुनिक भाषाओं तक

रनटाइम को समझना: सी से आधुनिक भाषाओं तक

2024-11-08 को प्रकाशित
ब्राउज़ करें:679

Understanding Runtimes: From C to Modern Languages

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

रनटाइम क्या है?

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

आधुनिक भाषा रनटाइम्स

जावा या पायथन जैसी भाषाओं में, रनटाइम स्वयं एक प्रोग्राम है जो आपकी 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 है और यह इसमें शानदार है। पहिये का पुन: आविष्कार क्यों करें, आइए पहियों का उपयोग करें और एक शानदार कार बनाएं, जब तक आप इसे मंगल ग्रह पर नहीं चलाना चाहते।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/bossysmaxx/understand-runtimes-from-c-to-modern-langages-3fkj?1 ​​​​यदि कोई उल्लंघन है, तो हटाने के लिए कृपया [email protected] पर संपर्क करें यह
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3