De onde surgiu a convenção de nomear argumentos da linha de comando como 'argv'?


18

Parece que Python , PHP e Ruby usam o nome "argv" para se referir à lista de argumentos da linha de comando. De onde vem o nome "argv"? Por que não algo como "args"?

Meu palpite é que ele vem de C, onde v representaria "vetor". A Wikipedia possui uma nota de rodapé que diz:

o termo vetorial no nome dessa variável é usado no sentido tradicional para se referir a cadeias.

No entanto, não há nenhuma fonte para essa informação. Realmente, estou curioso para saber se há raízes que remontam ainda mais para trás. C usou-o porque algo anterior a usou?


2
e eu sempre o "v" representava "valores"
warren

Respostas:


25

Enquanto as outras respostas observam que argvvem de C, onde C teve a idéia de chamar uma matriz de "vetor"?

Diretamente, veio do BCPL . Embora argvse refira ao vetor de argumentos (string), o BCPL possuía strings armazenadas em vetores, mas eram literais de strings e funcionavam como strings de Pascal. O vetor tinha dois elementos: o comprimento em literal!0e os caracteres em literal!1. De acordo com Clive Feather , as strings foram manipuladas "descompactando-as" em matrizes de caracteres, transformando a matriz e depois as "reembalando" em strings: compare isso com C, onde strings são matrizes de caracteres.

Então, sim, C usou v como vetor porque algo havia feito isso antes. Agora, algo antes do BCPL usou o vetor dessa maneira? O próprio BCPL era uma simplificação da "Cambridge [ou linguagem de programação combinada]": usada vectorcomo sinônimo de uma matriz unidimensional e matrixcomo sinônimo de uma matriz bidimensional. Isso é consistente com a notação matemática de vetores e matrizes, embora na CPL eles sejam apenas mnemônicos úteis e não possuam nenhuma das propriedades associadas às estruturas matemáticas.

Podemos recuar ainda mais no tempo em relação às linguagens de computação? Um ramo potencial de nossa trilha fica frio. A CPL foi fortemente influenciada pelo Algol 60 (atualização de 1963). Agora, o ALGOL 68 tinha tipos que eram descritos como "vetores compactados", como bitse bytes: mas eles não estavam nas versões anteriores do Algol, que apenas se ARRAYreferiam ao array. Como a BCPL vem de 1966, a CPL deve ter sido antes disso (mas depois de 1963): o ALGOL 68 (padronizado em 1968 e 1973) não pode ter sido uma influência direta.

Por outro lado, os principais recursos da CPL também fazem referência ao sistema LISP de McCarthy . Embora esta não usa vector para se referir a uma estrutura de dados no sistema em si, ser aqueles S-expressões , M-expressões e L-expressões (L-expressões são cadeias, portanto, qualquer associação entre o vector e cadeia desapareceu), ele faz uso vetor em outro sentido para representar os "valores de uma série de variáveis", representando "o estado da máquina a qualquer momento". Portanto, temos evidências de uma suposição feita nos comentários: que o uso da palavra 'vetor' para significar 'matriz' na computação vem da aplicação do termo similar em matemática.


1
Também estava presente em B, como aconteceu entre a C & BCPL.
Robbie Dee

5
E onde o BCPL conseguiu isso? Da matemática, na qual um "vetor" é uma lista unidimensional de valores.
Caleb

2
Representar uma seqüência de caracteres como um vetor é muito mais antigo que o BCPL (veja, por exemplo, qualquer livro antigo sobre a teoria da computação) . Na verdade, o conceito é provavelmente mais velho do que a palavra "string" (como uma sequência de caracteres) em si ..
BlueRaja - Danny Pflughoeft

1
@Caleb está correto. Na época do BCPL (~ 1967) e APL (~ 1960), a maioria dos programadores era formada nos departamentos de Matemática. Naqueles dias, quase não havia programas de graduação em CS.
Ross Patterson

2
O @RossPatterson CPL é de Cambridge, formado em ciência da computação desde 1953 (embora seja um curso de conversão). Era provável que fosse um dos poucos lugares que não faltava aos formandos do ensino médio na década de 1960.

12

argvvem de C, onde a main()função usa um argvparâmetro que representa um vetor de argumentos para o programa. Você também pode dizer que vem do Unix, que é quase o mesmo que dizer que vem do C, pois a maioria do desenvolvimento do Unix aconteceu em C, e o Unix e o C têm uma longa história compartilhada.


1
Sempre pensei argv significa "valores de argumento" feliz que eu aprendi algo novo :)
Honza Brabec

2
Certo e argc(contagem de argumentos) foi o número de itens em argv, porque em C, matrizes não têm dimensões fixas.
Ross Patterson

9

Em C, a main()função pode assumir dois parâmetros argc:, que significa "contagem de argumentos" e argv, que significa "vetor de argumento". Em C, você não possui objetos sofisticados, como vetores, e é por isso que você deve passar o número de itens como argc. Por outro lado, os idiomas que você mencionou têm coisas como vetores ou listas que possuem seu próprio tamanho e, portanto, argcnão são necessárias. Mas o nome argvficou.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.