¿De dónde vino la convención de nombrar argumentos de línea de comandos como 'argv'?

18

Parece que Python , PHP y Ruby usan el nombre "argv" para referirse a la lista de argumentos de la línea de comandos. ¿De dónde viene el nombre "argv"? ¿Por qué no algo como "args"?

Mi conjetura es que proviene de C, donde la v representaría "vector". Wikipedia tiene una nota al pie que dice:

El término vector en el nombre de esta variable se usa en sentido tradicional para referirse a cadenas.

Sin embargo, no hay ninguna fuente para esta información. Realmente, tengo curiosidad si tiene raíces que se remontan aún más atrás. ¿Lo usó C porque algo antes lo usaba?

Mark Hildreth
fuente
2
y siempre la "v" representaba "valores"
warren

Respuestas:

25

Mientras que las otras respuestas señalan que argvproviene de C, ¿de dónde sacó C la idea de llamar a un conjunto un "vector"?

Directamente, vino de BCPL . Aunque se argvrefiere al vector de los argumentos (de cadena), BCPL tenía cadenas almacenadas en vectores, pero eran literales de cadena y funcionaban como cadenas de Pascal. El vector tenía dos elementos: la longitud en literal!0y los caracteres en literal!1. De acuerdo con Clive Feather , las cadenas se manipularon "desempacándolas" en matrices de caracteres, transformando la matriz y luego "reempaquetándolas" en cadenas: compárelo con C donde las cadenas son matrices de caracteres.

Entonces sí, C usó v para vector porque algo más lo había hecho antes. Ahora, ¿hizo algo antes de que BCPL usara el vector de esta manera? BCPL era en sí misma una simplificación del "lenguaje de programación Cambridge [o combinado]": esto se usaba vectorcomo sinónimo de una matriz unidimensional y matrixcomo sinónimo de una matriz bidimensional. Esto es consistente con la notación en matemáticas de vectores y matrices, aunque en CPL son simples mnemónicos y no tienen ninguna de las propiedades asociadas con las estructuras matemáticas.

¿Podemos retroceder más en el tiempo con respecto a los lenguajes de computación? Una rama potencial de nuestro sendero se enfría. La CPL estuvo fuertemente influenciada por Algol 60 (la actualización de 1963). Ahora ALGOL 68 tenía tipos que se describían como "vectores empaquetados", como bitsy bytes: pero no estaban en versiones anteriores de Algol que solo se ARRAYreferían a la matriz. Como BCPL proviene de 1966, CPL debe haber sido antes (pero después de 1963): ALGOL 68 (estandarizado en 1968 y 1973) no puede haber sido una influencia directa.

Por otro lado, las características principales de CPL también hacen referencia al sistema LISP de McCarthy . Si bien esto no utiliza vector para referirse a una estructura de datos en el sistema en sí, aquellos ser S-expresiones , M-expresiones y L-expresiones (L-expresiones son cadenas, por lo que cualquier asociación entre el vector y la cadena ha desaparecido), se no uso vector en otro sentido para representar los "valores de una serie de variables" representa "el estado de la máquina en cualquier momento". Por lo tanto, tenemos evidencia de una suposición hecha en los comentarios: que el uso de la palabra 'vector' para significar 'matriz' en computación proviene de la aplicación del término similar en matemáticas.


fuente
1
También estuvo presente en B, llegando como lo hizo entre C y BCPL.
Robbie Dee
55
¿Y dónde lo consiguió BCPL? De las matemáticas, en las que un "vector" es una lista unidimensional de valores.
Caleb
2
Representar una cadena de caracteres como un vector es mucho más antiguo que BCPL (véase, por ejemplo, cualquier libro antiguo sobre la teoría de la computación) . De hecho, el concepto es probablemente más antiguo que la palabra "cadena" (como una secuencia de caracteres) en sí ..
BlueRaja - Danny Pflughoeft
1
@Caleb es correcto. En la época de BCPL (~ 1967) y APL (~ 1960), la mayoría de los programadores tenían educación en los departamentos de Matemáticas. En esos días, casi no había programas de pregrado de CS.
Ross Patterson
2
@RossPatterson CPL proviene de Cambridge, que tenía un título en informática desde 1953 (aunque como un curso de conversión). Es probable que sea uno de los pocos lugares donde no faltan graduados de CS en la década de 1960.
12

argvproviene de C, donde la main()función toma un argvparámetro que representa un vector de argumentos para el programa. También podría decir que proviene de Unix, que es casi lo mismo que decir que proviene de C, ya que la mayoría del desarrollo de Unix ocurrió en C, y Unix y C tienen una larga historia compartida.

Caleb
fuente
1
Siempre pensé que argv significa "valores de argumento" contento de haber aprendido algo nuevo :)
Honza Brabec
2
Correcto y argc(recuento de argumentos) era el número de elementos argv, porque en C, las matrices no tienen dimensiones fijas.
Ross Patterson
9

En C la main()función puede tomar dos parámetros: argc, que significa "número de argumentos", y argv, lo que es sinónimo de "vector de argumento". En C no tiene objetos elegantes como vectores, por lo que debe pasar la cantidad de elementos como argc. Por el contrario, los idiomas que ha mencionado tienen cosas como vectores o listas que conocen su propio tamaño, por argclo que no es necesario. Pero el nombre se argvquedó.

Dima
fuente