Skąd wzięła się konwencja nazywania argumentów wiersza poleceń „argv”?


18

Wygląda na to, że Python , PHP i Ruby używają nazwy „argv” w odniesieniu do listy argumentów wiersza poleceń. Skąd pochodzi nazwa „argv”? Dlaczego nie coś w rodzaju „argumentów”?

Domyślam się, że pochodzi z C, gdzie v oznaczałoby „wektor”. Wikipedia ma przypis, który mówi:

termin wektorowy w nazwie tej zmiennej jest używany w tradycyjnym znaczeniu w odniesieniu do ciągów znaków.

Jednak nie ma żadnego źródła tych informacji. Naprawdę jestem ciekawy, czy ma korzenie, które sięgają jeszcze dalej. Czy C użył tego, ponieważ wcześniej coś z niego korzystało?


2
a ja zawsze „v” oznacza „wartości”
warren

Odpowiedzi:


25

Podczas gdy inne odpowiedzi wskazują, że argvpochodzi z C, skąd C wpadł na pomysł, aby nazwać tablicę „wektorem”?

Bezpośrednio pochodzi z BCPL . Choć argvodnosi się do wektora argumentów (łańcuchowych), BCPL miał łańcuchy zapisane w wektorach, ale były literałami łańcuchów i działały jak łańcuchy Pascala. Wektor miał dwa elementy: długość o literal!0i znaki o literal!1. Według Clive Feather , łańcuchami manipulowano poprzez „rozpakowywanie” ich w tablice znaków, przekształcanie tablicy, a następnie „przepakowywanie” ich w łańcuchy: porównaj to z C, gdzie łańcuchy tablicami znaków.

Tak, C użył v do wektora, ponieważ coś innego już to zrobiło. Czy coś jeszcze przed BCPL używało wektora w ten sposób? BCPL samo w sobie było uproszczeniem „języka programowania Cambridge [lub Combined]”: używano go vectorjako synonimu tablicy jednowymiarowej i matrixjako synonimu tablicy 2-wymiarowej. Jest to zgodne z notacją matematyczną wektorów i macierzy, chociaż w CPL są one po prostu przydatnymi mnemonikami i nie mają żadnych właściwości związanych ze strukturami matematycznymi.

Czy możemy cofnąć się w czasie w zakresie języków komputerowych? Jedna potencjalna gałąź naszego szlaku jest zimna. Algoryt 60 miał duży wpływ na CPL (aktualizacja z 1963 r.). Teraz ALGOL 68 miał typy, które zostały opisane jako „spakowane wektory”, takie jak bitsi bytes: ale nie były to wcześniejsze wersje Algola, które właśnie ARRAYodnosiły się do tablicy. Ponieważ BCPL pochodzi z 1966 r., CPL musiało być wcześniej (ale po 1963 r.): ALGOL 68 (znormalizowany w 1968 i 1973 r.) Nie mógł mieć bezpośredniego wpływu.

Z drugiej strony, Główne cechy CPL odnoszą się również do systemu LISP McCarthy'ego . Podczas gdy nie jest stosowany wektor odnosi się do struktury danych w systemie się, te, które są s-wyrażeń , M wyrażeń i L-wyrażenia (L-wyrażenia są łańcuchy, więc związku pomiędzy wektorem i łańcucha zniknął), to ma zastosowanie wektora w innym sensie reprezentować „wartości wielu zmiennych” reprezentujący „stan urządzenia w dowolnym momencie”. Mamy więc dowody na założenie zawarte w komentarzach: użycie słowa „wektor” w znaczeniu „tablica” w obliczeniach wynika z zastosowania podobnego terminu w matematyce.


1
Był także obecny w B, podobnie jak między C i BCPL.
Robbie Dee

5
A skąd go wziął BCPL? Z matematyki, w której „wektor” jest jednowymiarową listą wartości.
Caleb

2
Reprezentacja ciągu znaków jako wektora jest znacznie starsza niż BCPL (patrz na przykład każda stara książka na temat teorii obliczeń) . W rzeczywistości koncepcja jest prawdopodobnie starsza niż samo słowo „ciąg” (jako ciąg znaków) .
BlueRaja - Danny Pflughoeft

1
@Caleb jest poprawny. W czasach BCPL (~ 1967) i APL (~ 1960) większość programistów kształciła się na wydziałach matematyki. W tamtych czasach prawie nie było programów licencjackich z zakresu CS.
Ross Patterson

2
@RossPatterson CPL pochodzi z Cambridge, które uzyskało stopień naukowy w dziedzinie informatyki od 1953 r. (Choć jako kurs konwersji). Prawdopodobnie będzie to jedno z niewielu miejsc, w których nie brakuje absolwentów CS do lat 60. XX wieku.

12

argvpochodzi z C, gdzie main()funkcja przyjmuje argvparametr reprezentujący wektor argumentów do programu. Można również powiedzieć, że pochodzi z Uniksa, co jest prawie tak samo, jak powiedzenie, że pochodzi z C, ponieważ większość prac nad rozwojem Uniksa wydarzyła się w C, a Unix i C mają długą wspólną historię.


1
Zawsze uważałem, że argv oznacza „wartości argumentów”, cieszę się, że nauczyłem się czegoś nowego :)
Honza Brabec

2
Właściwa i argc(liczba argumentów) była liczbą elementów argv, ponieważ w C tablice nie mają ustalonych wymiarów.
Ross Patterson

9

W C main()funkcja może przyjmować dwa parametry: argcoznaczające „liczbę argumentów” i argvoznaczające „wektor argumentów”. W C nie masz wymyślnych obiektów, takich jak wektory, dlatego musisz podać liczbę przedmiotów jako argc. W przeciwieństwie do wspomnianych języków znajdują się wektory lub listy, które znają swój własny rozmiar, więc argcnie jest potrzebne. Ale nazwa argvutknęła.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.