将命令行参数命名为“ argv”的约定从何而来?


18

似乎PythonPHPRuby都使用名称“ argv”来引用命令行参数列表。名称“ argv”从何而来?为什么不使用“ args”之类的东西呢?

我的猜测是它来自C,其中v代表“向量”。维基百科的脚注说:

该变量名称中的向量术语在传统意义上用于指代字符串。

但是,此信息没有任何来源。真的,我很好奇它的根源可以追溯到更远的时候。C之所以使用它,是因为之前有东西使用过它?


2
而我始终以“ v”代表“价值观”
沃伦(Warren)

Answers:


25

虽然其他答案argv都来自C,但是C是从哪里得到将数组称为“向量”的想法呢?

直接来自BCPL。尽管argv是指(string)参数的向量,但BCPL确实在向量中存储了字符串,但它们是字符串文字,它们的工作方式类似于Pascal字符串。向量具有两个元素:的长度为literal!0和的字符为literal!1。根据Clive Feather的说法,通过将字符串“解包”为字符数组,转换数组然后将其“重新打包”为字符串来操纵字符串:将C与字符串字符数组的C进行比较。

所以是的,C使用v作为向量,因为之前已经做过其他事情。现在,在BCPL之前,有没有以这种方式使用向量?BCPL本身是“剑桥编程语言”的简化:它用作vector一维数组matrix的同义词和二维数组的同义词。这与向量和矩阵的数学符号是一致的,尽管在CPL中它们只是方便的助记符,没有任何与数学结构相关的属性。

我们可以在计算语言方面及时回溯吗?我们足迹的其中一个潜在分支将变得寒冷。CPL受Algol 60(1963年更新)的影响很大。现在,ALGOL 68具有被称为“打包向量”的类型,例如bits和,bytes但是在早先ARRAY提到数组的Algol发行版中却没有。由于BCPL始于1966年,所以CPL一定在此之前(但在1963年之后):ALGOL 68(在1968年和1973年标准化)不能直接产生影响。

另一方面,CPL的主要功能也参考了麦卡锡的LISP系统。尽管这不使用vector来引用系统本身中的数据结构,但它们是S表达式M表达式L表达式(L表达式是字符串,因此矢量和字符串之间的任何关联都已消失),确实使用向量来表示“多个变量的值”,该“变量的值”表示“随时的机器状态”。因此,我们有证据支持在评论中做出的假设:在计算中使用“向量”一词来表示“数组”来自数学中类似术语的应用。


1
它也存在于B中,就像C和BCPL之间一样。
罗比·迪

5
BCPL是从哪里得到的?从数学上讲,其中“向量”是一维值列表。
Caleb

2
将字符串表示为向量比BCPL要早(例如,请参阅任何有关计算理论的旧书)。其实,这个概念比“串”可能是旧的 (如字符序列)本身..
丹尼Pflughoeft - BlueRaja

1
@Caleb是正确的。在BCPL(〜1967)和APL(〜1960)时代,大多数程序员都在数学系受过教育。那时,几乎没有本科CS课程。
罗斯·帕特森

2
@RossPatterson CPL来自剑桥大学,该大学自1953年以来拥有计算机科学学位(尽管是转换课程)。到1960年代,它可能是少数不缺少CS毕业生的地方之一。

12

argv来自C,main()函数使用一个argv参数,该参数表示程序参数的向量。您也可以说它来自Unix,这几乎与说它来自C相同,因为大多数Unix开发都发生在C中,并且Unix和C有着悠久的共享历史。


1
一直以为argv意味着“参数值”,很高兴我学到了新的东西:)
Honza Brabec 2013年

2
Right和argc(参数数)是中的项目数argv,因为在C中,数组没有固定的维数。
罗斯·帕特森

9

在C中,main()函数可以采用两个参数:argc,代表“参数计数”,和argv,代表“参数向量”。在C语言中,没有像vector这样的奇特对象,这就是为什么必须将项目数传递为的原因argc。相反,您提到的语言具有矢量或列表之类的东西,它们知道自己的大小,因此argc不需要。但是名字argv卡住了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.