术语“引用”的起源,如“逐个引用”

2022-09-04 06:06:00

Java/C# 语言律师喜欢说他们的语言通过价值的引用。这意味着“引用”是一个对象指针,在调用函数时被复制。

同时,在C++中(在Perl和PHP中也以更动态的形式),引用是其他名称(或动态情况下的运行时值)的别名。

我对这里的词源感兴趣。“参考”一词的早期用法是什么?让我们来看看Java之前,但是如果你知道C++前的用途,那也会让我感兴趣。

(我知道词汇量会发生变化,等等,但我只是对历史感兴趣)。


答案 1

在Richard E Fairley于1973年3月撰写的论文“参数传递的语义模型”中,“通过引用调用”一词的早期用法。

在早期,术语不一致。例如,Fortran 66 规范使用短语“按名称关联”和“按值关联”。我们现在称这些为“按引用调用”和“按值调用”。相比之下,Algol 60规范(1962)使用了术语“按名称调用”和“按值调用”......这些都不是我们目前所说的通过引用来调用。

编辑:对于那些想要将Fortran 66指定为使用短语“按名称关联”感到困惑的先驱者,请考虑以下几点:

  1. Fortran 66是第一次尝试通过引用调用(我们现在称之为)来指定语言。

  2. 这只是第二次尝试使用支持参数传递的子例程来指定语言。

  3. Fortran 66的“按名称关联”可以被视为Algol 60的“按名称调用”的受限(退化)形式。限制是,在Fortran中,名称必须是简单的变量或数组名称,而在Algol 60中,它可以是任何表达式。

  4. 当时(1966年)尚不清楚Algol 60的“按名字呼唤”注定会被放弃为一个坏主意。事实上,当我在1977年本科学习Algol 60时,我不记得讲师将“按姓名呼叫”作为一个坏主意。(它被呈现为难以理解...但那是另一回事。


答案 2

(此回复仅涉及 C#,AFAIK)

不要告诉 Eric Lippert 引用是指针;-p 它们在 MS C# / .NET 中恰好是同一回事,但这是一个实现细节。引用是一种不透明、安全的“事物”,可用于查找对象。指针是内存地址。他们努力工作,以确保你总是知道你的意思......

实现一个将两者视为相同的CLI和编译器是完全可行的;但是,您仍然会传递对该值的引用

引用不是地址