调用点解释?

23

浏览互联网时,我遇到了一个难以理解的术语 - call-site (@dlr),希望你能用简单易懂的方式解释一下。

在这里我看到CallSite被描述为:

有一个网站说:

方法被调用的位置。

一本书上说:

调用点。这是DLR的最小单位——代码中可以被视为单个单位的最小部分。一个表达式可能包含很多个调用点,但行为是自然地建立起来的,每次评估一个调用点。在接下来的讨论中,我们只考虑一个调用点。有一个小例子可以参考一下,它是一个非常简单的调用点,其中d当然是一个dynamic类型的变量

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

另一本书上说:

编译器生成的代码最终会产生一个表达式树,描述该操作,由运行时 DLR 绑定的调用站点来管理。调用站点实际上充当调用者和被调用者之间的中介。简单地说,调用站点是在运行时动态绑定的代码位置。
抱歉,我看不出这三个解释如何组合成一个简单的解释。
我很乐意给你一个简单的解释:
如何向妻子解释什么是调用站点?
2个回答

16

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

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


8

好的,这是我的理解。

在这个例子中,调用就像执行一些代码并返回的方法或函数。

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

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

所以答案取决于您如何进行调用,因此取决于您使用的平台。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接