Кажется, что Python , PHP и Ruby все используют имя «argv» для ссылки на список аргументов командной строки. Откуда происходит название «argv»? Почему не что-то вроде "арги"?
Я предполагаю, что это происходит от C, где v будет означать «вектор». В Википедии есть сноска, которая гласит:
векторный термин в имени этой переменной используется в традиционном смысле для обозначения строк.
Тем не менее, нет никакого источника для этой информации. Действительно, мне любопытно, есть ли у него корни, которые прослеживаются еще дальше. C использовал это, потому что кое-что до этого использовало это?
history
command-line
entry-point
Марк Хилдрет
источник
источник
Ответы:
В то время как другие ответы отмечают, что это
argv
от C, откуда у C появилась идея назвать массив «вектором»?Непосредственно, это прибыло из BCPL . Хотя это
argv
относится к вектору (строковых) аргументов, в BCPL строки хранятся в векторах, но они были строковыми литералами и работают как строки Паскаля. Вектор имел два элемента: длину atliteral!0
и символы atliteral!1
. По словам Клайва Фезера , строки обрабатывались путем «распаковки» их в символьные массивы, преобразования массива, а затем «перепаковки» их в строки: сравните это с C, где строки являются символьными массивами.Так что да, C использовал v для вектора, потому что что-то еще делало это раньше. Теперь, что-нибудь до того, как BCPL использовал вектор таким образом? Сам BCPL был упрощением «Кембриджского [или комбинированного] языка программирования»: он использовался
vector
как синоним для одномерного массива иmatrix
как синоним для двумерного массива. Это согласуется с обозначениями в математике векторов и матриц, хотя в CPL они просто удобная мнемоника и не имеют каких-либо свойств, связанных с математическими структурами.Можем ли мы отодвинуться дальше во времени в отношении компьютерных языков? Одна потенциальная ветвь нашего следа остывает. На CPL сильно повлиял Algol 60 (обновление 1963 года). Теперь у ALGOL 68 были типы, которые были описаны как «упакованные векторы», такие как
bits
иbytes
: но их не было в более ранних версиях Algol, которые только чтоARRAY
ссылались на массив. Поскольку BCPL появился в 1966 году, CPL должен был быть до этого (но после 1963 года): ALGOL 68 (стандартизированный в 1968 и 1973 годах) не мог оказывать прямого влияния.С другой стороны, Основные характеристики CPL также ссылаются на систему LISP Маккарти . Хотя здесь не используется вектор для ссылки на структуру данных в самой системе, но это S-выражения , M-выражения и L-выражения (L-выражения являются строками, поэтому любая связь между вектором и строкой исчезла), однако действительно использует вектор в другом смысле для представления «значений ряда переменных», представляющих «состояние машины в любое время». Таким образом, у нас есть доказательства предположения, сделанного в комментариях: использование слова «вектор» для обозначения «массива» в вычислениях происходит от применения аналогичного термина в математике.
источник
argv
происходит из C, гдеmain()
функция принимаетargv
параметр, представляющий вектор аргументов программы. Вы также можете сказать, что это происходит из Unix, что почти то же самое, что сказать, что это происходит из C, так как большая часть разработки Unix происходила на C, а Unix и C имеют длинную общую историю.источник
argc
(количество аргументов) было количеством элементов вargv
, потому что в C массивы не имеют фиксированных измерений.В языке Си
main()
функция может принимать два параметра:argc
«число аргументов» иargv
«вектор аргументов». В C у вас нет причудливых объектов, таких как векторы, поэтому вы должны передать количество элементов какargc
. В отличие от языков, которые вы упомянули, есть такие вещи, как векторы или списки, которые знают свой собственный размер, поэтому вargc
этом нет необходимости. Но имяargv
застряло.источник