Da dove viene la convenzione di denominare gli argomenti della riga di comando come 'argv'?


18

Sembra che Python , PHP e Ruby utilizzino 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 starebbe per "vettore". Wikipedia ha una nota a piè di pagina che dice:

il termine vettore nel nome di questa variabile è usato in senso tradizionale per riferirsi alle stringhe.

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


2
e io sempre la "v" stava per "valori"
warren

Risposte:


25

Mentre le altre risposte notano che argvproviene da C, dove C ha avuto l'idea di chiamare un array un "vettore"?

Direttamente, proveniva da BCPL . Sebbene si argvriferisca al vettore di argomenti (stringa), BCPL aveva stringhe memorizzate in vettori, ma erano letterali stringa e funzionavano come stringhe Pascal. Il vettore aveva due elementi: la lunghezza a literal!0e i caratteri a literal!1. Secondo Clive Feather , le stringhe sono state manipolate "scompattandole" in array di caratteri, trasformando l'array e "reimballandole" in stringhe: confrontale con C dove le stringhe sono array di caratteri.

Quindi sì, C ha usato v per il vettore perché qualcos'altro l'aveva fatto prima. Ora, prima che BCPL usasse qualcosa in questo modo? BCPL era di per sé una semplificazione del "linguaggio di programmazione Cambridge [o combinato]": utilizzato vectorcome sinonimo di un array monodimensionale e matrixcome sinonimo di un array bidimensionale. Ciò è coerente con la notazione in matematica di vettori e matrici, sebbene in CPL siano solo utili mnemonici e non abbiano nessuna delle proprietà associate alle strutture matematiche.

Possiamo tornare indietro nel tempo riguardo ai linguaggi informatici? Un potenziale ramo del nostro percorso scorre freddo. CPL fu fortemente influenzato da Algol 60 (l'aggiornamento del 1963). Ora ALGOL 68 aveva tipi che erano descritti come "vettori impaccati", come bitse bytes: ma questi non erano nelle versioni precedenti di Algol che si ARRAYriferivano solo all'array. Dato che 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, le caratteristiche principali di CPL fanno anche riferimento al sistema LISP di McCarthy . Anche se questo non utilizza vettoriale per fare riferimento a una struttura di dati nel sistema stesso, quelli essere S-espressioni , M-espressioni e L-espressioni (L-espressioni sono stringhe, quindi qualsiasi associazione tra vettore e la stringa è scomparso), essa fa uso vettore in un altro senso per rappresentare i "valori di un certo numero di variabili" rappresenta "lo stato della macchina in qualsiasi momento". Quindi abbiamo prove di un'ipotesi fatta nei commenti: che l'uso della parola "vettore" per indicare "matrice" nell'informatica deriva dall'applicazione del termine simile in matematica.


1
Era anche presente in B, arrivando come ha fatto tra C e BCPL.
Robbie Dee,

5
E dove l'ha preso BCPL? Dalla matematica, in cui un "vettore" è un elenco unidimensionale di valori.
Caleb,

2
Rappresentare una serie di caratteri come un vettore è molto più antico di BCPL (vedi, ad esempio, qualsiasi vecchio libro sulla teoria del calcolo) . In effetti, il concetto è probabilmente più antico della parola "stringa" (come una sequenza di caratteri) stessa ..
BlueRaja - Danny Pflughoeft

1
@Caleb è corretto. Al tempo di BCPL (~ 1967) e APL (~ 1960), la maggior parte dei programmatori era istruita nei dipartimenti di matematica. A quei tempi, non c'erano quasi programmi universitari CS.
Ross Patterson,

2
@RossPatterson CPL viene da Cambridge, che ha conseguito una laurea in informatica dal 1953 (anche se come corso di conversione). Probabilmente era uno dei pochi posti non meno di laureati CS negli anni '60.

12

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


1
Ho sempre pensato che argv significhi "valori dell'argomento" contento di aver imparato qualcosa di nuovo :)
Honza Brabec,

2
Right e argc(count count) era il numero di elementi in argv, perché in C gli array non hanno dimensioni fisse.
Ross Patterson,

9

In C la main()funzione può assumere due parametri argc:, che sta per "count count", e argv, che sta per "vector 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 citato hanno cose come vettori o elenchi che conoscono le loro dimensioni, quindi argcnon è necessario. Ma il nome argvrimase.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.