20

扫描互联网,我无法以简单的方式理解- 术语呼叫站点(@dlr)。我在这里读到CallSite 是:

一个网站说

调用方法的位置。

一本书说:

呼叫站点。这是 DLR 的一种原子——可以被视为单个单元的最小代码段。一个表达式可能包含许多调用站点,但行为是以自然方式构建的,一次评估一个调用站点。在接下来的讨论中,我们一次只考虑一个呼叫站点。有一个调用站点的小例子来参考会很有用,所以这里有一个非常简单的例子,其中 d 当然是动态类型的变量

d.Foo(10); 调用站点在代码中表示为 System.Runtime.CompilerServices.CallSite。

另一本书说:

编译器发出的代码最终生成描述操作的表达式树,由 DLR 将在运行时绑定的调用站点管理。调用站点本质上充当调用者和被调用者之间的中介。

抱歉,我不出这 3 个解释在哪里组合成一个简单的解释。

我很乐意得到一个简单的解释:

我该如何解释我的妻子 - 什么是呼叫站点?

4

2 回答 2

16

第一种解释与 dlr 或动态类型无关:简单地说,调用站点是源代码中调用方法的位置(或站点)。

在实现动态类型时,有必要存储有关包含在代码中的动态方法调用的信息,以便可以在运行时调用它们(dlr 需要查找方法、解决重载等)。代表此信息的对象也应称为“呼叫站点”,这似乎很自然。

于 2012-06-02T13:32:52.480 回答
8

好的,这就是我的看法。

对于此示例,调用就像执行某些代码并返回的方法或函数。

对于静态语言运行时程序(C 或 CLR 等),调用站点本质上是发生函数调用的地方。这是调用将在正常(非异常)流程中返回的位置。由于这是一个静态程序,调用站点只是一个内存位置,被压入堆栈。

对于动态语言程序(Ruby、Python 等),您调用的代码要到运行时才能完成。这意味着需要某种形式的逻辑来管理进行正确函数调用的过程,然后在调用后进行清理(如果需要)。如果动态语言程序在 .NET 4 上,则使用 System.Runtime.CompilerServices.CallSite 类型的 dlr(动态语言运行时)对象来完成。因此调用将返回到 CallSite 对象中的一个方法,然后返回到原始调用的位置。

所以答案是,这取决于您如何进行通话,以及您使用的是什么平台。

于 2012-06-02T10:53:18.283 回答