'अर्गव' के रूप में कमांड लाइन तर्कों के नामकरण का सम्मेलन कहां से आया?


18

ऐसा लगता है जैसे पायथन , पीएचपी , और रूबी सभी कमांड लाइन के तर्कों की सूची को संदर्भित करने के लिए "argv" नाम का उपयोग करते हैं। "Argv" नाम कहाँ से आया है? "आर्ग्स" जैसा कुछ क्यों नहीं?

मेरा अनुमान है कि यह सी से आता है, जहां वी "वेक्टर" के लिए खड़ा होगा। विकिपीडिया में एक पाद लेख है जो कहता है:

इस चर के नाम में वेक्टर शब्द का उपयोग पारंपरिक अर्थों में तार के संदर्भ में किया जाता है।

हालाँकि, इस जानकारी का कोई स्रोत नहीं है। वास्तव में, मैं उत्सुक हूँ अगर इसकी जड़ें हैं जो आगे भी पीछे की ओर ट्रेस होती हैं। क्या C ने इसका उपयोग किया है क्योंकि इससे पहले कि कुछ इसे इस्तेमाल करता है?


2
और मैं हमेशा "v" "मूल्यों" के लिए खड़ा था
वॉरेन

जवाबों:


25

जबकि अन्य उत्तर ध्यान दें कि argvसी से आता है, सी को एक सरणी "वेक्टर" कॉल करने का विचार कहां से मिला?

प्रत्यक्ष रूप से, यह BCPL से आया है । हालांकि argv, वेक्टर के (स्ट्रिंग) तर्कों को संदर्भित करता है, BCPL के पास वैक्टरों में संग्रहीत तार थे, लेकिन वे स्ट्रिंग शाब्दिक थे और उन्होंने पास्कल स्ट्रिंग्स की तरह काम किया। वेक्टर में दो तत्व थे: लंबाई पर literal!0और वर्ण पर literal!1। के अनुसार क्लाइव पंख , तार उन्हें चरित्र विन्यास में, "खोल", सरणी तो बदलने स्ट्रिंग में "repacking" उन्हें से छेड़छाड़ गया: सी जहां तार के साथ इस तुलना कर रहे हैं चरित्र सरणियों।

तो हाँ, C ने वेक्टर के लिए v का उपयोग किया है क्योंकि कुछ और पहले भी किया था। अब, बीसीपीएल ने इस तरह से वेक्टर का उपयोग करने से पहले कुछ किया था? बीसीपीएल अपने आप में "कैम्ब्रिज [या कंबाइंड] प्रोग्रामिंग लैंग्वेज" का सरलीकरण था: इसका उपयोग vector1-आयामी सरणी के लिए और matrix2-आयामी सरणी के लिए एक पर्याय के रूप में किया जाता था। यह वैक्टर और मेट्रिसेस के गणित में संकेतन के अनुरूप है , हालांकि सीपीएल में वे केवल कामशास्त्र हैं और गणितीय संरचनाओं से जुड़ा कोई भी गुण नहीं है।

क्या हम कंप्यूटिंग भाषाओं के बारे में समय में और जोर दे सकते हैं? हमारे निशान की एक संभावित शाखा ठंडी चलती है। सीपीएल अल्गोल 60 (1963 अपडेट) से काफी प्रभावित था। अब ALGOL 68 में "पैक्ड वैक्टर" के रूप में वर्णित प्रकार थे, जैसे bitsऔर bytes: लेकिन ये पहले अल्गोल के रिलीज में नहीं थे, जिसमें सिर्फ ARRAYसरणी का जिक्र था । जैसा कि बीसीपीएल 1966 से आता है, सीपीएल उससे पहले (लेकिन 1963 के बाद) रहा होगा: ALGOL 68 (1968 और 1973 में मानकीकृत) का प्रत्यक्ष प्रभाव नहीं हो सकता है।

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


1
यह B में भी मौजूद था, जैसा कि C & BCPL के बीच हुआ था।
रॉबी डी

5
और बीसीपीएल कहां से मिला? गणित से, जिसमें "वेक्टर" मूल्यों की एक आयामी सूची है।
कालेब

2
एक वेक्टर के रूप में पात्रों की एक स्ट्रिंग का प्रतिनिधित्व करना BCPL से अधिक पुराना है (उदाहरण के लिए, संकलन के सिद्धांत पर कोई पुरानी पुस्तक) । वास्तव में, अवधारणा संभवतः "स्ट्रिंग" शब्द (वर्णों के अनुक्रम के रूप में) से अधिक पुरानी है ...
ब्लूराजा - डैनी पफ्लुघोफ्ट

1
@ कालेब सही है। BCPL (~ 1967) और APL (~ 1960) के समय, अधिकांश प्रोग्रामर गणित विभाग में शिक्षित हुए। उन दिनों में, लगभग कोई भी स्नातक सीएस कार्यक्रम नहीं थे।
रॉस पैटरसन

2
@RossPatterson CPL कैम्ब्रिज से आता है, जिसके पास 1953 से कंप्यूटर विज्ञान की डिग्री थी (हालांकि रूपांतरण पाठ्यक्रम के रूप में)। यह 1960 के दशक तक सीएस स्नातकों की कमी वाले कुछ स्थानों में से एक होने की संभावना थी।

12

argvC से आता है, जहाँ main()फ़ंक्शन एक argvपैरामीटर लेता है जो प्रोग्राम के तर्कों का एक वेक्टर दर्शाता है। आप यह भी कह सकते हैं कि यह यूनिक्स से आता है, जो लगभग यह कहते हुए है कि यह सी से आता है क्योंकि अधिकांश यूनिक्स विकास सी में हुआ था, और यूनिक्स और सी का एक लंबा साझा इतिहास है।


1
हमेशा सोचा था कि argv का अर्थ है "तर्क मूल्य" मुझे खुशी है कि मैंने कुछ नया सीखा है :)
होन्ज़ा ब्रेबेक

2
सही argc(तर्क गणना) में मदों की संख्या थी argv, क्योंकि सी में, सरणियों में निश्चित आयाम नहीं हैं।
रॉस पैटरसन

9

सी में main()फ़ंक्शन दो पैरामीटर ले सकता है: argcजो "तर्क गिनती" argvके लिए खड़ा है , और , जो "तर्क वेक्टर" के लिए खड़ा है। सी में आपके पास वैक्टर जैसे फैंसी ऑब्जेक्ट नहीं हैं, यही कारण है कि आपको आइटम की संख्या में पास करना होगा argc। इसके विपरीत, जिन भाषाओं का आपने उल्लेख किया है उनमें वैक्टर या सूची जैसी चीजें हैं जो अपने आकार को जानती हैं, इसलिए argcइसकी आवश्यकता नहीं है। लेकिन नाम argvअटक गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.