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é?
history
command-line
entry-point
Mark Hildreth
la source
la source
Réponses:
Alors que les autres réponses notent que cela
argv
vient 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
argv
ré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!0
et 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é
vector
comme synonyme d'un tableau à 1 dimension etmatrix
comme 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
bits
etbytes
: mais ceux-ci ne figuraient pas dans les versions antérieures d'Algol qui faisaient simplementARRAY
ré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.
la source
argv
vient de C, où lamain()
fonction prend unargv
paramè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.la source
argc
(nombre d'arguments) était le nombre d'éléments dansargv
, car en C, les tableaux n'ont pas de dimensions fixes.En C, la
main()
fonction peut prendre deux paramètresargc
:, qui signifie "argument count", etargv
, 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 commeargc
. En revanche, les langues que vous avez mentionnées ont des choses comme des vecteurs ou des listes qui connaissent leur propre taille, donc ceargc
n'est pas nécessaire. Mais le nom estargv
resté.la source