Объяснение по телефону?

сканируя Интернет , я не могу понять простым языком термин call-site (@dlr). я читал здесь этот CallSite:

один сайт говорит

Местоположение, в котором вызывается метод.

одна книга говорит:

сайт вызова. Это своего рода атом DLR — наименьший фрагмент кода, который можно рассматривать как единое целое. Одно выражение может содержать множество точек вызова, но поведение выстраивается естественным образом, оценивая по одной точке вызова за раз. В оставшейся части обсуждения мы будем рассматривать только один сайт вызова за раз. Будет полезно иметь небольшой пример сайта вызова, на который можно ссылаться, поэтому вот очень простой пример, где d, конечно же, является переменной типа dynamic.

д. Фу (10); Сайт вызова представлен в коде как System.Runtime.CompilerServices.CallSite.

в другой книге написано:

компилятор выдает код, который в конечном итоге приводит к дереву выражений, описывающему операцию, управляемую сайтом вызова, который DLR привязывает во время выполнения. Сайт вызова по существу действует как посредник между вызывающим абонентом и вызываемым абонентом.

извините, я не могу понять, где эти 3 объяснения объединяются в одно простое объяснение.

я буду рад получить простое объяснение:

КАК я могу объяснить моей жене, что такое сайты звонков?


person Royi Namir    schedule 02.06.2012    source источник


Ответы (2)


Первое объяснение не имеет ничего общего с dlr или динамическим типом: проще говоря, сайт вызова — это место (или сайт) в исходном коде, где вызывается метод.

При реализации динамического типа необходимо хранить информацию о вызовах динамических методов, содержащихся в вашем коде, чтобы их можно было вызывать во время выполнения (DLR должен искать метод, разрешать перегрузки и т. д.). Кажется естественным, что объект, представляющий эту информацию, также должен называться «участком вызова».

person phoog    schedule 02.06.2012

Хорошо, вот как я это вижу.

В этом примере call просто подобен методу или функции, которая выполняет некоторый код и возвращает результат.

Для исполняемой программы на статическом языке (C, CLR и т. д.) сайт вызова — это, по сути, место, где происходит вызов функции. Это место, куда вызов вернется в нормальном (не исключительном) потоке. Поскольку это статическая программа, место вызова — это просто ячейка памяти, помещенная в стек.

Для программы на динамическом языке (Ruby, Python и т. д.) код, который вы вызываете, не обрабатывается до времени выполнения. Это означает, что необходима некоторая форма логики для управления процессом правильного вызова функции и последующей очистки после вызова (при необходимости). Если программа динамического языка находится в .NET 4, это делается с помощью объектов dlr (среда выполнения динамического языка) типа System.Runtime.CompilerServices.CallSite. Таким образом, вызов вернется к методу внутри объекта CallSite, а затем к местоположению исходного вызова.

Таким образом, ответ заключается в том, что это зависит от того, как вы делаете вызов и, следовательно, какую платформу вы используете.

person Preet Sangha    schedule 02.06.2012