Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Ruby ARGV का उपयोग क्यों करता है: Ruby में आर्गुमेंट वेक्टर्स को समझना

आप जानते होंगे कि Ruby कमांड-लाइन आर्गुमेंट्स को ARGV नामक एक ग्लोबल ऐरे में डालता है। लेकिन इसका नाम ARGV क्यों है? यह एक दिलचस्प इतिहास का पाठ है जो Ruby की C में जड़ों को उजागर करता है।

आर्गुमेंट वेक्टर

ARGV का मतलब है आर्गुमेंट वेक्टर। और इस अजीब पुराने ज़माने के उपयोग में "वेक्टर" का अर्थ है "एक-आयामी ऐरे"।

C में, हर प्रोग्राम का एक main() फंक्शन होता है। यह आमतौर पर ऐसा दिखता है:

int main(int argc, char *argv[]) {
  ... आपका कोड यहाँ
}

जैसा कि आपने शायद देखा, main फंक्शन के दो आर्गुमेंट्स होते हैं। ये क्रमशः एक काउंट और कमांड-लाइन आर्गुमेंट्स का एक ऐरे होते हैं।

जब आप bash को अपना प्रोग्राम चलाने के लिए कहते हैं, तो यह एक सिस्टम कॉल करता है जो OS को आपके प्रोग्राम के main फंक्शन को कॉल करने और कुछ argc और argv वैल्यूज़ पास करने का कारण बनता है।

Ruby

Ruby इंटरप्रेटर — कम से कम MRI — बस एक C प्रोग्राम है। यहाँ Ruby का main फंक्शन है:

int main(int argc, char **argv) {
#ifdef RUBY_DEBUG_ENV
  ruby_set_debug_option(getenv("RUBY_DEBUG"));
#endif
#ifdef HAVE_LOCALE_H
  setlocale(LC_CTYPE, "");
#endif
  ruby_sysinit(&argc, &argv);
  {
    RUBY_INIT_STACK;
    ruby_init();
    return ruby_run_node(ruby_options(argc, argv));
  }
}

जैसा कि आप देख सकते हैं, यह argc और argv को ruby_options नामक फंक्शन में पास करता है, जो बदले में ruby_process_options को कॉल करता है, जो process_options को कॉल करता है।

यह Ruby इंटरप्रेटर के सभी ऑप्शन्स को हैंडल करता है और अंततः ruby_set_argv को कॉल करता है, जो आपके Ruby कोड में दिखने वाले ARGV को सेट करता है।

void ruby_set_argv(int argc, char **argv) {
  int i;
  VALUE av = rb_argv;
#if defined(USE_DLN_A_OUT)
  if (origarg.argv)
    dln_argv0 = origarg.argv[0];
  else
    dln_argv0 = argv[0];
#endif
  rb_ary_clear(av);
  for (i = 0; i < argc; i++) {
    VALUE arg = external_str_new_cstr(argv[i]);
    OBJ_FREEZE(arg);
    rb_ary_push(av, arg);
  }
}

काफी साफ है। मैं अभी भी MRI कोडबेस में गोता लगाने में नया हूँ, लेकिन अंदर जाकर यह देखना मजेदार है कि चीज़ें वास्तव में कैसे काम करती हैं।

  1. रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है

    रूबी का प्रदर्शन संस्करण दर संस्करण बहुत सुधर रहा है… और रूबी विकास टीम रूबी को और भी तेज़ बनाने के लिए हर संभव प्रयास कर रही है! इन प्रयासों में से एक 3×3 प्रोजेक्ट है। लक्ष्य? रूबी 3.0, रूबी 2.0 से 3 गुना तेज़ होगा। इस प्रोजेक्ट का हिस्सा नया MJIT कंपाइलर है, जो इस लेख का विषय है। MJIT समझाया गया

  1. रूबी स्ट्रक्ट्स और OpenStruct में महारत: कुशल वैल्यू ऑब्जेक्ट्स रूबी स्ट्रक्ट्स और OpenStruct में महारत: कुशल वैल्यू ऑब्जेक्ट्स

    रूबी में स्ट्रक्ट क्या है? एक स्ट्रक्ट एक बिल्ट-इन रूबी क्लास है, इसका उपयोग वैल्यू ऑब्जेक्ट्स उत्पन्न करने वाली नई क्लासेस बनाने के लिए किया जाता है। एक वैल्यू ऑब्जेक्ट संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए उपयोग किया जाता है। यहां एक उदाहरण है: दो निर्देशांकों (x और y) के साथ एक Point।

  1. Redis SMEMBERS का उपयोग करके सेट के सभी तत्व प्राप्त करें Redis SMEMBERS का उपयोग करके सेट के सभी तत्व प्राप्त करें

    इस ट्यूटोरियल में, हम सीखेंगे कि Redis SMEMBERS कमांड का उपयोग करके किसी कुंजी पर संग्रहीत सेट मान के सभी तत्व कैसे प्राप्त करें। सिंटैक्स :- redis host:port> SMEMBERS <key name> आउटपुट :- - सेट के सभी तत्वों को समाहित करने वाला ऐरे मान। - error, यदि कुंजी मौजूद है और उस कुंजी पर संग्रह