Da dove viene la convenzione di denominazione degli argomenti della riga di comando come 'argv'?

18

Sembra Python , PHP e Ruby utilizzano tutti il nome" argv "per fare riferimento all'elenco degli argomenti della riga di comando. Da dove viene il nome "argv"? Perché non qualcosa come "args"?

La mia ipotesi è che provenga da C, dove la v rappresenterebbe il "vettore". Wikipedia ha una nota che dice:

the vector term in this variable's name is used in traditional sense to refer to strings.

Tuttavia, non ci sono fonti per queste informazioni. Davvero, sono curioso di sapere se ha radici che risalgono ancora più indietro. C lo ha usato perché qualcosa prima l'ha usato?

    
posta Mark Hildreth 30.04.2013 - 19:28
fonte

3 risposte

25

Mentre le altre risposte fanno notare che argv deriva da C, dove C ha avuto l'idea di chiamare un array un "vettore"?

Direttamente, è arrivato da BCPL . Sebbene argv si riferisca al vettore di argomenti (stringa), BCPL aveva delle stringhe memorizzate in vettori, ma erano stringhe letterali e funzionavano come stringhe Pascal. Il vettore aveva due elementi: la lunghezza in literal!0 ei caratteri in literal!1 . Secondo Clive Feather , le stringhe sono state manipolate da "scompattarle" in matrici di caratteri, trasformando l'array poi "reimballaggio" in stringhe: confronta questo con C dove stringhe sono matrici di caratteri.

Quindi sì, C ha usato v per il vettore perché qualcos'altro l'aveva già fatto prima. Ora, ha fatto qualcosa prima che BCPL usasse il vettore in questo modo? BCPL era di per sé una semplificazione del "Cambridge [o Combined] Language Programming": usato vector come sinonimo di un array 1-dimensionale e matrix come sinonimo di un array bidimensionale. Ciò è coerente con la notazione in matematica di vettori e matrici, sebbene in CPL siano semplicemente mnemonici a portata di mano e non abbiano nessuna delle proprietà associate alle strutture matematiche.

Possiamo spingerci oltre nel tempo per quanto riguarda i linguaggi informatici? Un potenziale ramo del nostro percorso è freddo. La CPL fu pesantemente influenzata da Algol 60 (l'aggiornamento del 1963). Ora ALGOL 68 aveva tipi che erano descritti come "vettori compressi", come bits e bytes : ma questi non erano nelle versioni precedenti di Algol che avevano appena ARRAY riferendosi alla matrice. Poiché BCPL viene dal 1966, CPL deve essere stato prima (ma dopo il 1963): ALGOL 68 (standardizzato nel 1968 e 1973) non può essere stato un'influenza diretta.

D'altra parte, Funzioni principali di CPL fa anche riferimento al sistema LISP di McCarthy . Anche se questo non usa vector per fare riferimento a una struttura di dati nel sistema stesso, quelli che sono S-espressioni , M-espressioni e < em> L-espressioni (le espressioni L sono stringhe, quindi qualsiasi associazione tra vettore e stringa è scomparsa), fa usa il vettore in un altro senso per rappresentare i "valori di un numero di variabili "che rappresentano" lo stato della macchina in qualsiasi momento ". Quindi abbiamo le prove per un'ipotesi fatta nei commenti: che l'uso della parola "vettore" per indicare "array" nel calcolo deriva dall'applicazione del termine simile in matematica.

    
risposta data 30.04.2013 - 21:06
fonte
12

argv deriva da C, dove la funzione main() accetta un parametro argv che rappresenta un vettore di argomenti per il programma. Si potrebbe anche dire che proviene da Unix, il che equivale a dire che proviene da C dato che la maggior parte dello sviluppo di Unix è avvenuto in C, e Unix e C hanno una lunga storia condivisa.

    
risposta data 30.04.2013 - 19:38
fonte
9

In C la funzione main() può assumere due parametri: argc , che sta per "argomento count" e argv , che sta per "vettore argomento". In C non hai oggetti di fantasia come i vettori, motivo per cui devi passare il numero di elementi come argc . Al contrario, le lingue che hai menzionato hanno cose come vettori o liste che conoscono le loro dimensioni, quindi argc non è necessario. Ma il nome argv è bloccato.

    
risposta data 30.04.2013 - 20:46
fonte

Leggi altre domande sui tag