D'où vient la convention de nommer les arguments de la ligne de commande comme 'argv'?


18

Il semble que Python , PHP et Ruby utilisent tous le nom "argv" pour faire référence à la liste des arguments de ligne de commande. D'où vient le nom "argv"? Pourquoi pas quelque chose comme "args"?

Je suppose que cela vient de C, où le v signifierait "vecteur". Wikipedia a une note de bas de page qui dit:

le terme vecteur au nom de cette variable est utilisé dans le sens traditionnel pour désigner les chaînes.

Cependant, il n'y a aucune source pour ces informations. Vraiment, je suis curieux de savoir si ses racines remontent encore plus loin. C l'a-t-il utilisé parce que quelque chose auparavant l'a utilisé?


2
et j'ai toujours le "v" pour "valeurs"
warren

Réponses:


25

Alors que les autres réponses notent que cela argvvient de C, où C a-t-il eu l'idée d'appeler un tableau un "vecteur"?

Directement, il provenait de BCPL . Bien qu'il se argvréfère au vecteur des arguments (chaîne), BCPL avait des chaînes stockées dans des vecteurs, mais elles étaient des littéraux de chaîne et fonctionnaient comme des chaînes Pascal. Le vecteur avait deux éléments: la longueur à literal!0et les caractères à literal!1. Selon Clive Feather , les chaînes ont été manipulées en les «déballant» en tableaux de caractères, en transformant le tableau puis en les «reconditionnant» en chaînes: comparez cela avec C où les chaînes sont des tableaux de caractères.

Donc oui, C a utilisé v comme vecteur parce que quelque chose d'autre l'avait fait auparavant. Maintenant, avant que BCPL n'utilise le vecteur de cette façon? BCPL était lui-même une simplification du "Cambridge [or Combined] Programming Language": il était utilisé vectorcomme synonyme d'un tableau à 1 dimension et matrixcomme synonyme d'un tableau à 2 dimensions. Ceci est cohérent avec la notation en mathématiques des vecteurs et des matrices, bien qu'en CPL ce ne soient que des mnémoniques pratiques et n'ont aucune des propriétés associées aux structures mathématiques.

Pouvons-nous reculer dans le temps concernant les langages informatiques? Une branche potentielle de notre sentier est froide. CPL a été fortement influencé par Algol 60 (la mise à jour de 1963). Maintenant, ALGOL 68 avait des types qui étaient décrits comme des "vecteurs emballés", tels que bitset bytes: mais ceux-ci ne figuraient pas dans les versions antérieures d'Algol qui faisaient simplement ARRAYréférence à un tableau. Comme BCPL remonte à 1966, CPL devait être antérieure à cela (mais après 1963): ALGOL 68 (normalisé en 1968 et 1973) ne peut pas avoir eu une influence directe.

D'autre part, les principales caractéristiques de CPL font également référence au système LISP de McCarthy . Bien que cela n'utilise pas vecteur de se référer à une structure de données dans le système lui - même, les être S-expressions , M-expressions et L-expressions (L-expressions sont des chaînes, de sorte que toute association entre le vecteur et la chaîne a disparu), il ne vecteur utilisé dans un autre sens pour représenter les « valeurs d'un certain nombre de variables » représentant « l'état de la machine à tout moment ». Nous avons donc des preuves d'une hypothèse formulée dans les commentaires: que l'utilisation du mot «vecteur» pour signifier «tableau» en informatique provient de l'application du terme similaire en mathématiques.


1
Il était également présent en B, comme il l'a fait entre C & BCPL.
Robbie Dee

5
Et où BCPL l'a obtenu? Des mathématiques, dans lesquelles un "vecteur" est une liste unidimensionnelle de valeurs.
Caleb

2
Représenter une chaîne de caractères comme un vecteur est bien plus ancien que BCPL (voir, par exemple, tout vieux livre sur la théorie du calcul) . En fait, le concept est probablement plus ancien que le mot "chaîne" (comme une séquence de caractères) lui-même ..
BlueRaja - Danny Pflughoeft

1
@Caleb est correct. À l'époque de BCPL (~ 1967) et APL (~ 1960), la plupart des programmeurs étaient formés dans les départements de mathématiques. À cette époque, il n'y avait presque aucun programme de premier cycle en sciences humaines.
Ross Patterson

2
@RossPatterson CPL est originaire de Cambridge, qui possédait un diplôme en informatique depuis 1953 (mais en tant que cours de conversion). Il était probable que ce soit l'un des rares endroits où les diplômés en sciences sociales étaient à court dans les années 1960.

12

argvvient de C, où la main()fonction prend un argvparamètre qui représente un vecteur d'arguments au programme. Vous pouvez également dire que cela vient d'Unix, ce qui revient presque à dire qu'il vient de C car la plupart des développements Unix se sont produits en C, et Unix et C ont une longue histoire commune.


1
Toujours pensé argv signifie "valeurs d'argument" content d'avoir appris quelque chose de nouveau :)
Honza Brabec

2
À droite et argc(nombre d'arguments) était le nombre d'éléments dans argv, car en C, les tableaux n'ont pas de dimensions fixes.
Ross Patterson

9

En C, la main()fonction peut prendre deux paramètres argc:, qui signifie "argument count", et argv, qui signifie "argument vector". En C, vous n'avez pas d'objets fantaisistes comme des vecteurs, c'est pourquoi vous devez passer le nombre d'éléments comme argc. En revanche, les langues que vous avez mentionnées ont des choses comme des vecteurs ou des listes qui connaissent leur propre taille, donc ce argcn'est pas nécessaire. Mais le nom est argvresté.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.