19 पॉइंट द्वारा GN⁺ 2025-07-10 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • प्रोग्रामिंग में फ़ंक्शन को "call" करना कहने की अभिव्यक्ति की उत्पत्ति, लाइब्रेरी से किताब को "मंगाने" या "बुलाने" की अवधारणा से मिलती-जुलती है
  • शुरुआती कंप्यूटिंग में सब्रूटीन को लाइब्रेरी से summon या call करने का तरीका प्रमुख था
  • Fortran II ने CALL कमांड पेश किया, जिससे "to call a function" वाली अभिव्यक्ति तेज़ी से लोकप्रिय हुई
  • बाद में Algol और JOVIAL जैसी भाषाओं ने भी इसे अपनाया और "call" को संज्ञा के रूप में इस्तेमाल करना शुरू किया
  • समय के साथ "call" का अर्थ runtime control के पहले, दौरान और बाद तक फैलकर स्थापित हो गया

प्रोग्रामर फ़ंक्शन को "call" क्यों कहते हैं?

  • StackExchange पर "फ़ंक्शन को call करना" इस अभिव्यक्ति की उत्पत्ति को लेकर एक सवाल पूछा गया था
  • कई उपमाएँ हैं, लेकिन वास्तव में यह "call" के summon करना या बुलाना वाले अर्थ से आया है
    • जैसे लाइब्रेरी में किताब "मंगाई" जाती है, वैसे ही सब्रूटीन को "मंगा" कर इस्तेमाल करने से इसकी शुरुआत हुई
    • "call number" लाइब्रेरी में किताब की जगह दिखाने वाला संकेत होता है

लाइब्रेरी शब्दावली में "call" का इतिहास

  • OED के अनुसार Melvil Dewey ने 1876 में लाइब्रेरी साइंस की शब्दावली में पहली बार "call number" का उपयोग किया
    • "call number" किताब की लोकेशन या उसे मंगाने के अनुरोध के लिए इस्तेमाल होने वाला संकेत था
  • 1888 के Library Journal में भी "call blank", "call slip", "call number" जैसे शब्द सामान्य रूप से इस्तेमाल हुए
  • Joudrey & Taylor की व्याख्या के अनुसार, "call number" नाम बंद शेल्फ़ों से सामग्री मंगाने की क्रिया से आया
    • Cutter number जैसी प्रणालियाँ वर्गीकरण के लिए लाई गईं

कंप्यूटर साइंस में "call" के शुरुआती उपयोग

  • John W. Mauchly के 1947 के पेपर में सब्रूटीन लाइब्रेरी से सब्रूटीन को "called in" करके इस्तेमाल करने का उदाहरण मिलता है
    • संदर्भ यह था कि दर्ज नंबर के ज़रिए उसे जल्दी से रेफ़र कर इस्तेमाल किया जाए
  • MANIAC II assembly routine (1956) में भी हर सब्रूटीन को एक "call number" दिया जाता था, जिससे ज़रूरत पड़ने पर उसे बुलाया जा सके
    • असली assembly language में इसे "transfer control" कहा जाता था
  • उस समय runtime पर होने वाले "call" की तुलना में compile या link समय पर कोड के टुकड़े मंगाने की अवधारणा पर ज़्यादा ज़ोर था

प्रोग्रामिंग भाषाओं में CALL कमांड का आगमन

  • Fortran II (1958) ने CALL और RETURN कमांड पेश किए
    • "call for" जैसी क्रिया के रूप में execution control को सब्रूटीन को सौंपा जाता था
    • CALL कमांड वास्तव में उस syntactic क्रिया को दर्शाता था जिसे "call" कहा गया
  • धीरे-धीरे runtime में "control transfer" करने और link/assembly समय पर होने वाली "calling" की क्रिया आपस में धुंधली होकर मिलनी शुरू हो गईं

1960 के दशक में "call" के अर्थ का विस्तार और स्थिर होना

  • Sarbacher (1959) की डिक्शनरी में "call in" को main routine से subroutine तक control जाने के रूप में परिभाषित किया गया
    • "call number" और "call word" के ज़रिए identifier और call code तक समझाया गया
  • JOVIAL (1960) में "procedure call", "calls" आदि आधिकारिक रूप से संज्ञा के रूप में उपयोग हुए
    • इसके बाद call site, argument, parameter जैसी बहुस्तरीय अर्थ-परतों के साथ इसका इस्तेमाल हुआ
  • Algol (1959~1960) ने भी "procedure call", "called procedure", "during the call" जैसे कई रूपों में call को व्यक्त किया
    • Peter Naur की Algol 60 रिपोर्ट में भी "call for" और "during the call" के बीच समयगत अर्थ का भेद दिखता है
  • Burroughs Algebraic Compiler (1961) में क्रियात्मक रूप "to call" पहली बार स्पष्ट रूप से दिखाई देता है
  • Corbató आदि (1963) के बाद आधुनिक उपयोग "to call a subroutine" सामान्य हो गया

निष्कर्ष

  • Fortran II के CALL X कमांड ने फ़ंक्शन/सब्रूटीन के लिए "call" अभिव्यक्ति को स्थापित करने में निर्णायक भूमिका निभाई
    • यह पहले की लाइब्रेरी-आधारित अवधारणा, यानी नंबर से बुलाने, से प्रेरित था, लेकिन प्रोग्रामिंग भाषाओं में इसका नया अर्थ-विस्तार हुआ
  • इसके बाद Algol, JOVIAL आदि कई भाषाओं ने "call", "call site" जैसे शब्द अपना लिए
  • लगभग 1961 से "to call X" जैसी अभिव्यक्ति औपचारिक प्रोग्राम दस्तावेज़ों और समुदाय में जमने लगी
  • आज फ़ंक्शन call का मतलब अस्थायी रूप से control सौंपना, परिणाम लेना और फिर वापस लौटना — इस पूरी प्रक्रिया से है, और 'call' इसका मानक शब्द बन चुका है

1 टिप्पणियां

 
GN⁺ 2025-07-10
Hacker News की राय
  • Grace Hopper ने समझाया कि 'call' शब्द का मूल अर्थ—जो भौतिक लाइब्रेरी में सामग्री व्यवस्थित करने के लिए इस्तेमाल होने वाले call number से आया था—'compiler' शब्द के जन्म पर भी असर डालता है। हर subroutine को एक 'call word' दिया जाता था, और यह विचार कि लाइब्रेरी से सामग्री निकालकर जोड़ने की तरह प्रोग्राम बनाया जाता है, वहीं से आया
    • मैं खुद इन terms का इस्तेमाल करता हूँ
    • अब जाकर लगा कि पूरी तस्वीर साफ हुई। Dewey Decimal Classification की पहचान संख्याओं को 'call number' कहा जाता था
  • मुझे लगता है कि Library Science ने modern computing में हमारी कल्पना से कहीं ज़्यादा योगदान दिया है। उदाहरण के लिए database index समझाते समय मैं अक्सर card catalog की छवि लाता हूँ। author name, Dewey Decimal, और subject के हिसाब से खोजे जा सकने वाले लकड़ी के ड्रॉअर लोग तुरंत समझ लेते हैं। लाइब्रेरी catalog की अवधारणा देखें
    • मैं उस पीढ़ी से हूँ जिसने local library में लकड़ी के ड्रॉअर और paper dictionary जैसी चीज़ें इस्तेमाल की हैं। 25 साल पहले जब मैंने पहली बार hashmap या IDictionary देखा, तो इसी छवि की वजह से बात तुरंत समझ में आ गई। लेकिन आजकल यह रूपक उतना मददगार नहीं रहा। कई बार मुझे समझाना पड़ा कि card catalog या dictionary वास्तव में कैसी होती थी, और युवा लोग कहते हैं, "ओह, तो वह एक analog hashmap था"
    • कुछ महीने पहले तक मैं सोचता था कि terminal की standard width 80 characters क्यों है। लगा था कि यह पुराने PC screen size की वजह से होगा। लेकिन पता चला कि punch card 80 characters की होती थी, और punch card की शुरुआत भी आखिरकार index card से ही हुई थी। Library Science को सलाम करने का यह एक और मौका था। यह computing history कुछ वैसी लगती है जैसे कहा जाता है कि कार की चौड़ाई दो घोड़ों के पिछले हिस्से से निकली
    • 1–2 साल पहले मैंने लाइब्रेरी के कोने में पड़े धूल भरे लकड़ी के ड्रॉअर का उदाहरण देकर database समझाया था। context और पहले से मौजूद समझ वाकई बहुत महत्वपूर्ण हैं
    • मैं हमेशा सोचता था कि computing term 'index' की शुरुआत किताब के आखिर में दिए गए index से हुई होगी। इसे कभी 'index cards' से जोड़कर नहीं देखा था
    • आज की युवा पीढ़ी ने शायद card catalog देखा ही न हो। मैं समझाता हूँ कि hard disk 0 और 1 की एक सूची है, और कुछ ढूँढ़ने के लिए structure चाहिए—बाक़ी वे खुद अनुमान लगा लेते हैं
  • मैं फ़िनलैंड से हूँ। फ़िनिश में 'function call' के लिए शब्द 'kutsua' है, जिसे अंग्रेज़ी में वापस अनुवाद करें तो 'invite' या 'summon' होगा। यानी यह 'माँ बच्चे को आँगन से बुलाती है' वाले अर्थ में call है, न कि 'Joe अपने दोस्त को phone करता है' या 'इस रंग को क्या कहते हैं?' वाले call जैसा। बस साझा करना चाहा
    • जर्मन में 'aufrufen' इस्तेमाल होता है, जिसे टुकड़ों में अनुवाद करें तो लगभग 'बुलाकर ऊपर लाना' जैसा होगा। स्कूल में किसी छात्र का नाम पुकारने की तरह, direct object के साथ यह किसी को नाम या नंबर से बुलाने के अर्थ में आता है। phone call के लिए शब्द 'anrufen' है
    • 'summon' कभी-कभी ऐसा भी लगता है जैसे कोड में occult horror को बुलाया जा रहा हो, और कई बार यह काफ़ी सटीक भी लगता है। 'invite' भी कभी-कभी ऐसा महसूस होता है जैसे आप किसी demon या vampire को न्योता दे रहे हों
    • नॉर्वे में 'funksjonskall' कहते हैं, जिसका सीधा मतलब function call ही है। बस किसी चीज़ को बुलाने वाले call के अर्थ में
    • रूसी में भी कुछ ऐसा ही है; वापस अनुवाद करें तो 'फ़ोन से बुलाना', 'तलब करना', 'निमंत्रित करना' जैसे अर्थ निकलते हैं
    • यह सीधे विषय से जुड़ा नहीं है, लेकिन अगर आप Helsinki में हैं, तो स्थानीय Hacker News meetup में आना अच्छा रहेगा
  • Wilkes, Wheeler, Gill (1951) की किताब में subroutine चलाने के लिए 'call in' वाक्यांश इस्तेमाल हुआ है। पेज 31 पर लिखा है, "यदि subroutine को सही ढंग से call न किया जाए तो machine रुक जाती है", और "किसी भी program से subroutine को स्वतंत्र रूप से call किया जा सकता है"। 1950 की शुरुआती EDSAC report में भी "call in auxiliary sub-routine" जैसा annotation था, जो इस presentation में देखा जा सकता है
  • कभी-कभी 'call' की जगह 'invoke' या 'execute' भी कहा जाता है, लेकिन वे लंबे और अधिक generic शब्द हैं। हालाँकि 'call' का गलत उपयोग—जैसे "calling a command", "calling a button"—non-native English CS students में काफ़ी सुनाई देता है, और वह थोड़ा खटकता है
    • 'invoke' लैटिन invocō, invocāre (बुलाना) से आया है, इसलिए यह गलत नहीं बल्कि बस थोड़ा औपचारिक या संक्षिप्त रूप जैसा है
    • सबसे आम—या सबसे खीझ दिलाने वाला—गलत उदाहरण वह है जहाँ इसे 'return' के साथ इस्तेमाल किया जाता है। जैसे, "अब return keyword को call करेंगे तो function खत्म हो जाएगा"
    • C# delegate या reflection जैसी जगहों पर अक्सर 'Invoke' का उपयोग करता है, जबकि debugger में 'Call Stack' दिखता है
    • मेरे अनुभव में programming सीखने वाले native speakers भी इसी तरह की usage करते हैं। वे command न होने वाली चीज़ों को भी 'command' कहकर समझाते हैं
    • कभी-कभी beginner तो उल्टा पूरे statement या function declaration को ही 'command' कह देते हैं
  • यह कोई scientific theory नहीं, बस एक observation है। नए terms तब आसानी से फैलते हैं जब उनमें कुछ ऐसा होता है जो लोगों को तुरंत जुड़ता हुआ लगे। वे आमतौर पर छोटे होते हैं, और उनका अर्थ या imagery याद रखना आसान होता है, इसलिए वे जल्दी फैलते हैं। कभी स्पष्टीकरण चाहिए होता है, लेकिन कई बार लोग सिर्फ context से ही उन्हें सीखकर आगे बढ़ा देते हैं। जैसे 'salty' शब्द, और 'call' भी कुछ वैसा ही है। छोटा है, बार-बार बोला जाता है, और call up/call in/summon/invoke (जैसे कोई जादुई मंत्र) सबकी feel मेल खाती है। उस समय telephone भी नया और रोमांचक technology था, इसलिए किसी दूसरे व्यक्ति को phone करने की छवि को subroutine call से जोड़ना आसान रहा होगा। 'jump' जैसे terms पहले से दूसरे अर्थों में इस्तेमाल हो रहे थे, इसलिए शायद call ज़्यादा फैल गया
    • मेरे लिए 'salty' का tears से बहुत लेना-देना नहीं है। मेरी language habit में अगर कोई 'salty' है तो वह दुखी नहीं बल्कि चिढ़ा हुआ या irritated है। यानी नमक जैसी तीखी और तेज़ feeling से यह रूपक आता है। इससे यही दिखता है कि भले लोग रूपक को अलग तरह से समझें, फिर भी वह काम करता है—और शायद call भी ऐसे ही फैला
  • "... complex चीज़ें लाइब्रेरी में होनी चाहिए, यानी magnetic tape के एक set में (जहाँ पहले से लिखी गई मूल्यवान समस्याएँ रखी गई हैं)"—इस वाक्य को पढ़ते हुए मैंने कभी नहीं सोचा था कि library शब्द सचमुच label लगी सामग्री की शेल्फ़ों से आया होगा
  • मैं हमेशा सोचता रहा कि function को ज़रूरी नहीं कि call जैसा keyword चाहिए हो। function आमतौर पर value लौटाता है, इसलिए उसे assignment statement के भीतर इस्तेमाल किया जा सकता है। call की ज़रूरत subroutine को थी (व्यवहार में वह एक named address/label था)। दरअसल GOTO से भी आप सीधे उस address पर जाकर वापस आ सकते हैं। CALL keyword की वजह से execution flow ज़्यादा साफ़ दिखता है। जैसे boss ने Sam को हिसाब-किताब देखने को कहा, फिर Bill को TPS report print करने को कहा। इस तरह काम का flow आगे बढ़ता है। बाद में सब कुछ function बन गया, और subroutine को 'spaghetti' जैसा nickname दिया गया। लेकिन फिर routine (program) और subroutine जैसे terms क्यों हैं, यह जानने की जिज्ञासा रहती है
    • Goldstine और von Neumann के 1947 के दस्तावेज़ के अनुसार routine शब्द की उत्पत्ति साफ़ तौर पर ऐसे दर्ज है: "किसी समस्या के coded sequence of instructions को routine कहा जाता है" (संदर्भ)
  • संगीत में भी "call and response" जैसी अभिव्यक्ति है। मुझे लगता है कि यह return value की अवधारणा से भी जुड़ती है
  • Algol 60 में सिर्फ function ही नहीं, parameters के लिए भी "call" शब्द इस्तेमाल होता था। जैसे "call by value", "call by name" आदि; और 4.7.5.3 में "in the case of call by value" जैसी संरचना मिलती है। आज हम आमतौर पर कहते हैं कि procedure/function/subroutine को 'call' किया जाता है, जबकि argument/parameter को 'pass' किया जाता है, इसलिए 'pass by value/reference/name' ज़्यादा स्पष्ट है। लेकिन "call by value" जैसे पुराने terms आज भी कुछ contexts में बचे हुए हैं। argument या parameter को call करने की धारणा तो गायब हो गई, पर ऐसे legacy terms अब भी मौजूद हैं