2012-06-02 8 views
14

skanowanie Internetu, mam problemy ze zrozumieniem w prosty sposób - nazwa strony połączenia (@dlr). ive czytanie here że CallSite jest:Wyjaśnienie witryny wywoławczej?

jedna strona mówi

lokalizację, w której wywoływana jest metoda.

jedna książka powiedzieć: Strona

wezwanie. Jest to rodzaj atomu DLR - najmniejszego kawałka kodeka, który można uznać za pojedynczą jednostkę. Jedno wyrażenie może zawierać wiele witryn wywołań, ale zachowanie jest budowane w naturalny sposób, oceniając jedną stronę wywołania naraz. Przez resztę dyskusji będziemy zdiagnozować pojedynczą stronę wywołania na raz. To będzie przydatna mieć mały przykład miejscu połączenia skierowania się, więc tutaj jest bardzo prosta, gdzie d jest oczywiście zmienna typu dynamicznego

d.Foo (10); Strona wywołania jest reprezentowana w kodzie jako System.Runtime.CompilerServices.CallSite.

kolejna książka mówi:

kompilator emituje kod, który ostatecznie prowadzi do drzewa wyrażenie która opisuje działanie, zarządzany przez strony połączenia, że ​​DLR będzie wiążą przy starcie. Strona wywołująca działa zasadniczo jako pośrednik między dzwoniącym a wywoływanym.

Przepraszam, cant zobaczyć, gdzie te 3 objaśnienia łącząc w jednym prostym wyjaśnieniem.

Będę szczęśliwy, aby uzyskać proste wyjaśnienie:

Jak mogę wytłumaczyć moją żonę -Co kupna-stron?

Odpowiedz

11

Pierwsze wytłumaczenie nie ma nic wspólnego z DLR lub dynamicznego typu: po prostu mówiąc, miejsce połączenia jest lokalizacja (lub strony) w kodzie źródłowym gdzie metoda jest wywoływana.

Przy wdrażaniu typu dynamicznego konieczne jest przechowywanie informacji o dynamicznych wywołaniach metod zawartych w kodzie, aby można było wywoływać je w czasie wykonywania (dlr musi wyszukać metodę, rozwiązać problem przeciążenia itp.). Wydaje się naturalne, że obiekt reprezentujący tę informację powinien być również nazywany "stroną wywoławczą".

4

OK, tak to widzę.

W tym przykładzie wywołanie jest po prostu jak metoda lub funkcja, która wykonuje pewien kod i zwraca.

W przypadku programu do wykonywania statycznych programów językowych (C lub CLR itp.) Strona wywoławcza jest zasadniczo miejscem, w którym odbywa się wywołanie funkcji. Jest to miejsce, do którego połączenie powróci w normalnym (nietypowym) przepływie. Ponieważ jest to program statyczny, strona wywoławcza jest po prostu lokalizacją w pamięci, wciśniętą na stos.

W przypadku dynamicznego programu językowego (Ruby, Python itp.) Kod, do którego dzwonisz, nie zostanie opracowany do czasu wykonania. Oznacza to, że wymagana jest pewna forma logiki, aby zarządzać procesem wywoływania prawidłowej funkcji, a następnie czyszczenia po zakończeniu połączenia (w razie potrzeby). Jeśli program języka dynamicznego jest włączony .NET 4, jest to wykonywane przy użyciu obiektów dlr (dynamic language runtime) typu System.Runtime.CompilerServices.CallSite.Tak więc połączenie powróci do metody w obiekcie CallSite, a następnie do lokalizacji pierwotnego połączenia.

Odpowiedź jest więc taka, że ​​zależy to od tego, jak wykonujesz połączenie, a więc od platformy, z której korzystasz.