2012-06-02 12 views
14

scaning das Internet, ich habe Probleme zu verstehen in einer einfachen Art und Weise - der Begriff Call-Site (@ dlr). ive Lesen here die CallSite ist:Call-Site-Erklärung?

eine Seite sagt

Die Lage, in der die Methode aufgerufen wird.

ein Buch sagen:

Aufrufort. Dies ist die Art Atom des DLR - das kleinste Stück des Codes, das als eine Einheit betrachtet werden kann. Ein Ausdruck kann enthalten eine Menge von Call-Sites, aber das Verhalten ist in der natürliche Weise aufgebaut, die Bewertung einer Call-Site zu einer Zeit. Für den Rest der Diskussion betrachten wir jeweils nur eine Call-Site. Es ist ein kleines Beispiel für eine Aufrufstelle nützlich sein, gehen zu müssen zu, beziehen also hier ist ein sehr einfacher, wobei d natürlich eine Variable von dynamischen

d.Foo (10); Die Aufruf-Site wird im Code als System.Runtime.CompilerServices.CallSite dargestellt.

ein anderes Buch sagt:

die Compiler Code aussendet, die schließlich in einem Ausdrucksbaum führt , die den Betrieb beschreibt, von einer Call-Website verwaltet, das DLR wird bind zur Laufzeit. Die Call-Site fungiert im Wesentlichen als Vermittler zwischen Anrufer und Angerufener.

sorry, ich kann nicht sehen, wo diese drei Erklärungen in eine einfache Erklärung kombinieren.

ich werde glücklich sein, eine einfache Erklärung zu bekommen:

Wie kann ich meine Frau erklären -was Call-Sites sind?

Antwort

11

Die erste Erklärung hat nichts mit der dlr oder dem dynamischen Typ zu tun: Einfach ausgedrückt, eine Aufruf-Site ist ein Ort (oder eine Site) im Quellcode, wo eine Methode aufgerufen wird.

Bei der Implementierung des dynamischen Typs müssen Informationen über die in Ihrem Code enthaltenen dynamischen Methodenaufrufe gespeichert werden, damit sie zur Laufzeit aufgerufen werden können (die DLL muss die Methode nachschlagen, Überlasten beheben usw.). Es scheint natürlich, dass das Objekt, das diese Information repräsentiert, auch eine "Call-Site" genannt werden sollte.

4

Ok, so sehe ich es.

In diesem Beispiel ist Aufruf einfach wie eine Methode oder Funktion, die Code ausführt und zurückgibt.

Für ein statisches Sprachlaufzeitprogramm (C oder CLR usw.) ist eine Aufrufstelle im Wesentlichen der Ort, an dem ein Funktionsaufruf stattfindet. Es ist der Ort, zu dem der Anruf in einem normalen (nicht außergewöhnlichen) Ablauf zurückkehrt. Da es sich um ein statisches Programm handelt, ist die Aufrufstelle einfach ein Speicherplatz, der auf den Stapel geschoben wird.

Bei einem dynamischen Sprachprogramm (Ruby, Python, usw.) wird der Code, den Sie aufrufen, erst zur Laufzeit ausgeführt. Dies bedeutet, dass irgendeine Art von Logik benötigt wird, um den Prozess des korrekten Funktionsaufrufs zu verwalten und dann nach dem Anruf aufzuräumen (falls erforderlich). Wenn das dynamische Sprachprogramm unter .NET 4 ist, wird dies mit dlr-Objekten (dynamic language runtime) vom Typ System.Runtime.CompilerServices.CallSite durchgeführt.Daher wird der Aufruf zu einer Methode innerhalb des CallSite-Objekts und dann zum Ort des ursprünglichen Aufrufs zurückkehren.

Also die Antwort ist, dass es davon abhängt, wie Sie den Anruf und damit welche Plattform Sie verwenden.