c# - 术语 "reference"的起源与 "pass-by-reference"

标签 c# java c++ reference pass-by-reference

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

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

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

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

最佳答案

在论文 "Semantic Models of Parameter Passing" 中有一个术语“引用调用”的早期用法。 Richard E Fairley,1973 年 3 月。

在早期,术语不一致。例如,Fortran 66 specification使用短语“按名称关联”和“按值关联”。我们现在将这些称为“引用调用”和“值调用”。相比之下,Algol 60 specification (1962) 使用了“名称调用”和“值调用”这两个术语……而这两者都不是我们目前所说的引用调用。

编辑:对于那些希望将指定 Fortran 66 的先驱者标记为对使用“名称关联”这一短语感到困惑的人,请考虑以下几点:

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

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

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

  4. 当时(1966 年)并不清楚 Algol 60 的“点名呼唤”注定要作为一个坏主意而被放弃。事实上,当我在 1977 年作为一名本科生学习 Algol 60 时,我不记得讲师提出“点名调用”是一个坏主意。 (它被呈现为难以理解......但这是另一回事。)

关于c# - 术语 "reference"的起源与 "pass-by-reference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1856680/

相关文章:

java - 可运行 JAR 文件 : Classes that implement "org.apache.hadoop.util.Tool" are not found

Java 8 , JCE Unlimited Strength Policy 和 SSL Handshake over TLS

java - Android 气压计高度读数错误?

c++ - 自 1.55 以来 boost::bind/boost::function 的奇怪行为变化

python - 在 Windows 8 中编译 mod_wsgi 不适用于 django

c# - 实现后密封接口(interface)

c# - Twitter Streaming API .NET 库

c# - 覆盖登录页面上的防伪 token 错误

c# - OData 异常 : A recursive loop of complex types is not allowed

c++ - 只读 std::map?