Roy*_*mir 15 .net c# dynamic-language-runtime .net-4.0
扫描互联网,我很难以一种简单的方式理解- 术语呼叫网站(@dlr).我一直在这里读到CallSite是:
一个网站说
调用方法的位置.
一本书说:
呼叫网站.这是DLR的一种原子 - 可以被视为单个单元的最小代码片段.一个表达式可能包含许多呼叫站点,但行为是以自然方式构建的,一次评估一个呼叫站点.对于剩下的讨论,我们一次只考虑一个呼叫站点.有一个呼叫站点的小例子可以参考,所以这里有一个非常简单的例子,其中d当然是动态类型的变量
d.Foo(10); 调用站点在代码中表示为System.Runtime.CompilerServices.CallSite.
另一本书说:
编译器发出的代码最终会生成一个描述操作的表达式树,由DLR在运行时绑定的调用站点管理.呼叫站点本质上充当呼叫者和被呼叫者之间的中介.
对不起,我不能看到这3个解释组合成一个简单的解释.
我很乐意得到一个简单的解释:
我可以解释一下我的妻子 - 电话网站是什么?
pho*_*oog 13
第一种解释与dlr或动态类型无关:简单来说,调用站点是源代码中调用方法的位置(或站点).
在实现动态类型时,有必要存储有关代码中包含的动态方法调用的信息,因此可以在运行时调用它们(dlr需要查找方法,解决重载等).表示此信息的对象也应称为"呼叫站点",这似乎很自然.
好的,这就是我的看法。
对于此示例,调用就像执行一些代码并返回的方法或函数一样。
对于静态语言运行时程序(C或CLR等),调用站点实质上是发生函数调用的位置。这是呼叫将以正常(非异常)流程返回的位置。由于这是一个静态程序,因此调用站点只是一个存储位置,被压入堆栈。
对于动态语言程序(Ruby,Python等),要在运行时才能确定正在调用的代码。这意味着需要某种形式的逻辑来管理进行正确的函数调用,然后在调用之后进行清理(如果需要)的过程。如果动态语言程序在.NET 4上,则使用类型为System.Runtime.CompilerServices.CallSite的dlr(动态语言运行时)对象来完成。因此,调用将返回到CallSite对象中的方法,然后返回到原始调用的位置。
因此答案是,这取决于您如何进行通话以及所使用的平台。
| 归档时间: |
|
| 查看次数: |
4417 次 |
| 最近记录: |