"call-by-value" 的不同含义是否相关?

Are the different meanings of "call-by-value" related?

目前我正在上一门关于编程语言概念的课程,这是我遇到一个曾经让我困惑的问题(当我在看Martin Odersky's functional programming course on Coursera的视频时):

术语 "call-by-value" 经常在两种不同的上下文中使用:

上下文 1:评估机制(按值调用与按名称调用)

如果将表达式作为参数传递给函数,在函数主体中的参数标识符被替换之前,该表达式是否被简化为一个值(即求值)?如果是,则称为按值调用,如果不是,则称为按名称调用。至少我是这么理解的。

上下文 2:参数传递(按值调用与按引用调用)

如果将标识符作为参数传递给函数,是否正在使用指向给定标识符指向的内容的副本的新名称绑定评估函数的主体,或者函数是否可以实际更改内容标识符指向,即 "visible" 对调用上下文的更改?同样,第一个变体是按值调用,而第二个变体是按引用调用。 如果我当然猜对了

然而,尽管我没有看到术语 "call-by-value" 的两个用例之间的关系,但偶然在两种情况下使用该术语似乎太巧合了。

有人知道为什么选择同一个词来描述两个(看似不同的)问题吗?

您的分析是正确的,我也发现"call-by-value"这个短语的重载令人困惑。

采用relevant Wikipedia article的语言,call-by-value和call-by-reference可以被认为是"strict evaluation"的两种变体,而call-by-name是[=的一种20=].

为了回答你的问题,我猜想草率地使用短语 "call-by-value" 来指代 "strict evaluation" 通常是因为按值调用是一些最流行的命令式编程语言实现的严格评估类型。有些 old lecture notes from a PL course at UMD 将您描述的两种情况混为一谈。他们将保护参数不被修改称为 C、C++ 中按值调用的 "another feature" 和 Java(幻灯片 21),其中暗示严格评估(错误地恕我直言)是最终特征按价值调用。