2012-06-02 63 views
14

在網上掃興,我很難理解以簡單的方式 - 術語call-site(@dlr)。 香港專業教育學院在讀here即調用點是:呼叫現場解釋?

一個網站說

在該方法被調用的位置。

一書中說:

調用點。這是DLR的原子 - 可以被認爲是單個單元的代碼的最小片段 。一個表達式可能包含很多呼叫站點,但其行爲建立在自然的方式中,一次評估一個呼叫站點。對於 討論的其餘部分,我們一次只能考慮一個呼叫站點。這是 將是非常有用的調用點指 到一個小例子,所以這裏是一個非常簡單的一個,其中d是當然的 dynamic類型的變量

d.Foo(10);呼叫站點在代碼中表示爲 System.Runtime.CompilerServices.CallSite。

另一本書說:

編譯器生成代碼,以在最後一個表達式樹 描述的操作,通過調用網站管理的DLR將 綁定在運行時。呼叫站點實質上充當呼叫者和被呼叫者之間的中介 。

對不起,我cant看看這三個解釋是在哪裏合併成一個簡單的解釋。

我會很樂意得到一個簡單的解釋:

我怎麼解釋我的妻子 - 什麼是調用點?

回答

11

第一種解釋與dlr或動態類型無關:簡單地說,呼叫站點是源代碼中的位置(或站點),其中調用方法。

在實現動態類型時,需要存儲有關代碼中包含的動態方法調用的信息,以便可以在運行時調用它們(dlr需要查找方法,解決重載等)。代表這種信息的對象也應該被稱爲「呼叫站點」,這似乎很自然。

4

好的,這是我的看法。

對於此示例,調用就像執行某些代碼並返回的方法或函數。

對於靜態語言運行時程序(C或CLR等)來說,呼叫站點本質上是發生函數調用的地方。這是呼叫將以正常(非常規)流量返回的位置。由於這是一個靜態程序,呼叫站點只是一個內存位置,被壓入堆棧。

對於動態語言程序(Ruby,Python等),您調用的代碼直到運行時才能運行。這意味着需要某種形式的邏輯來管理進行正確的函數調用並在調用之後清理(如果需要)的過程。 如果動態語言程序在.NET 4上,則使用System.Runtime.CompilerServices.CallSite類型的dlr(動態語言運行時)對象完成此操作。因此,該調用將返回到CallSite對象中的一個方法,然後返回到原始調用的位置。

所以答案是,這取決於你如何進行呼叫以及你正在使用的平臺。