Объяснение сайта?
сканирование в Интернете, им трудно понять простым способом - термин call-site (@dlr).
ive читал здесь, что CallSite:
один сайт говорит
Местоположение, в котором вызывается метод.
В одной книге говорится:
вызывать сайт. Это тип атома DLR - наименьшая часть которая может рассматриваться как единое целое. Одно из выражений может содержат множество сайтов вызовов, но поведение заложено в естественным путем, оценивая один сайт вызова за раз. Для остальных обсуждение, мы будем рассматривать только один сайт вызова одновременно. Это будет полезно иметь небольшой пример сайта вызова для ссылки так что здесь очень простой, где d, конечно, является переменной тип динамический
d.Foo(10); Сайт вызова представлен в коде как System.Runtime.CompilerServices.CallSite.
В другой книге говорится:
компилятор испускает код, который в конечном итоге приводит к дереву выражений который описывает операцию, управляемую сайтом вызова, который DLR будет связывать во время выполнения. Сайт вызова по существу выступает в качестве посредника между абонентом и вызываемым абонентом.
Извините, я не могу видеть, как эти 3 объяснения объединяются в одно простое объяснение.
Я буду рад получить простое объяснение:
HOw я могу объяснить свою жену - какие сайты звонков?
Ответы
Ответ 1
Первое объяснение не имеет ничего общего с dlr или динамическим типом: просто говоря, сайт вызова - это местоположение (или сайт) в исходном коде, где вызывается метод.
При реализации динамического типа необходимо хранить информацию о вызовах динамического метода, содержащихся в вашем коде, поэтому их можно вызвать во время выполнения (dlr нужно искать метод, разрешать перегрузки и т.д.). Кажется естественным, что объект, представляющий эту информацию, также должен называться "местом вызова".
Ответ 2
Хорошо, вот как я это вижу.
Для этого примера вызов просто как метод или функция, которая выполняет некоторый код и возвращает.
Для статической языковой программы (C, или CLR и т.д.) сайт вызова, по сути, происходит с вызовом функции. Это место, в которое вызов будет возвращаться в обычном (не исключительном) потоке. Поскольку это статическая программа, сайт вызова - это просто ячейка памяти, которая помещается в стек.
Для динамической языковой программы (Ruby, Python и т.д.) код, который вы вызываете, не работает до выполнения. Это означает, что требуется некоторая форма логики для управления процессом выполнения правильного вызова функции, а затем очистки после вызова (при необходимости). Если программа динамического языка находится на .NET 4, это делается с использованием объектов dlr (dynamic language runtime) типа System.Runtime.CompilerServices.CallSite. Таким образом, вызов вернется к методу внутри объекта CallSite, а затем к местоположению исходного вызова.
Итак, ответ заключается в том, что он зависит от того, как вы выполняете вызов и, следовательно, какую платформу используете.