Woher kam die Konvention, Befehlszeilenargumente als 'argv' zu bezeichnen?


18

Anscheinend verwenden Python , PHP und Ruby alle den Namen "argv", um auf die Liste der Befehlszeilenargumente zu verweisen. Woher kommt der Name "argv"? Warum nicht so etwas wie "Args"?

Meine Vermutung ist, dass es von C kommt, wo das v für "Vektor" stehen würde. Wikipedia hat eine Fußnote , die besagt:

Der Vektorbegriff im Namen dieser Variablen wird im herkömmlichen Sinne verwendet, um sich auf Zeichenfolgen zu beziehen.

Es gibt jedoch keine Quelle für diese Informationen. Wirklich, ich bin gespannt, ob es Wurzeln gibt, die noch weiter zurückliegen. Hat C es benutzt, weil etwas vorher es benutzt hat?


2
und ich stand immer das "v" für "werte"
warren

Antworten:


25

Während die anderen Antworten auf argvC hinweisen , woher kam C die Idee, ein Array als "Vektor" zu bezeichnen?

Direkt kam es von BCPL . Obwohl argvsich BCPL auf den Vektor von (String-) Argumenten bezieht, wurden in Vektoren zwar Strings gespeichert, diese waren jedoch String-Literale und arbeiteten wie Pascal-Strings. Der Vektor hatte zwei Elemente: die Länge bei literal!0und die Zeichen bei literal!1. Nach Clive Feder wurden manipuliert Saiten durch „entpackt“ , um sie in die Zeichen - Arrays, um das Array umzuwandeln , dann „Neuverpackung“ , um sie in Zeichenketten: Vergleichen dieses mit C , wo Zeichenketten sind Zeichen - Arrays.

Also, ja, C hat v für vector verwendet, weil etwas anderes dies zuvor getan hatte. Hat irgendetwas vor BCPL den Vektor auf diese Weise verwendet? BCPL war selbst eine Vereinfachung der "Cambridge [oder kombinierten] Programmiersprache": Dies wurde vectorals Synonym für ein eindimensionales Array und matrixals Synonym für ein zweidimensionales Array verwendet. Dies stimmt mit der mathematischen Notation von Vektoren und Matrizen überein , obwohl diese in CPL nur praktische Mnemoniken sind und keine der Eigenschaften aufweisen, die mit den mathematischen Strukturen verbunden sind.

Können wir die Zeit in Bezug auf Computersprachen weiter zurückdrängen? Ein möglicher Zweig unseres Trails ist kalt. CPL wurde stark von Algol 60 beeinflusst (das Update von 1963). Jetzt hatte ALGOL 68 Typen, die als "gepackte Vektoren" bezeichnet wurden, wie z. B . : bitsund bytes: Diese waren jedoch nicht in früheren Versionen von Algol enthalten, die sich nur ARRAYauf Array bezogen. Da BCPL aus dem Jahr 1966 stammt, muss CPL davor (aber danach) gewesen sein: ALGOL 68 (standardisiert in den Jahren 1968 und 1973) kann keinen direkten Einfluss gehabt haben.

Andererseits beziehen sich die Hauptmerkmale von CPL auch auf das LISP-System von McCarthy . Obwohl hier kein Vektor verwendet wird , um auf eine Datenstruktur im System selbst zu verweisen, und zwar S-Ausdrücke , M-Ausdrücke und L-Ausdrücke (L-Ausdrücke sind Zeichenfolgen, daher ist jede Zuordnung zwischen Vektor und Zeichenfolge verschwunden) nicht verwenden Vektor in einem anderen Sinne repräsentieren die „Werte einer Anzahl von Variablen“ repräsentiert „den Zustand der Maschine zu jeder Zeit“. Wir haben also Beweise für eine Annahme, die in den Kommentaren gemacht wurde: Die Verwendung des Wortes "Vektor", um "Array" im Rechnen zu bedeuten, ergibt sich aus der Anwendung des ähnlichen Begriffs in der Mathematik.


1
Es war auch in B präsent, genau wie zwischen C & BCPL.
Robbie Dee

5
Und woher hat BCPL es? Aus der Mathematik, in der ein "Vektor" eine eindimensionale Werteliste ist.
Caleb

2
Die Darstellung einer Zeichenfolge als Vektor ist viel älter als BCPL (siehe zum Beispiel ein altes Buch zur Berechnungstheorie) . In der Tat ist das Konzept wahrscheinlich älter als das Wort "Zeichenfolge" (als Folge von Zeichen) selbst ..
BlueRaja - Danny Pflughoeft

1
@Caleb ist richtig. Zur Zeit von BCPL (~ 1967) und APL (~ 1960) wurden die meisten Programmierer in mathematischen Abteilungen ausgebildet. Damals gab es fast keine CS-Programme für Studenten.
Ross Patterson

2
@RossPatterson CPL stammt aus Cambridge, das seit 1953 Informatik studiert hat (allerdings als Konversionskurs). Es war wahrscheinlich einer der wenigen Orte, an denen in den 1960er Jahren nicht weniger CS-Absolventen waren.

12

argvstammt aus C, wobei die main()Funktion einen argvParameter verwendet, der einen Vektor von Argumenten für das Programm darstellt. Man könnte auch sagen, dass es von Unix kommt, was fast dem von C entspricht, da die meisten Unix-Entwicklungen in C stattgefunden haben und Unix und C eine lange gemeinsame Geschichte haben.


1
Immer gedacht, argv bedeutet "Argument Werte" froh, dass ich etwas Neues gelernt habe :)
Honza Brabec

2
Richtig und argc(Anzahl der Argumente) war die Anzahl der Elemente in argv, da Arrays in C keine festen Abmessungen haben.
Ross Patterson

9

In C kann die main()Funktion zwei Parameter annehmen: argc"Argumentanzahl" und argv"Argumentvektor". In C haben Sie keine ausgefallenen Objekte wie Vektoren, weshalb Sie die Anzahl der Elemente als übergeben müssen argc. Im Gegensatz dazu haben die Sprachen, die Sie erwähnt haben, Dinge wie Vektoren oder Listen, die ihre eigene Größe kennen, so dass sie argcnicht benötigt werden. Aber der Name ist argvgeblieben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.