Explicația site-ului de apel?

scaning internet, im probleme cu înțelegerea într-un mod simplu - termenul call-site (@dlr). am citit aici că CallSite este:

un site spune

Locația în care este apelată metoda

o carte spune:

site-ul de apel. Acesta este un fel de atom al DLR - cea mai mică piesă   de cod care poate fi considerat o singură unitate. O expresie poate   conține o mulțime de site-uri de apel, dar comportamentul este construit în   naturale, evaluând un singur loc de apel la un moment dat. Pentru restul   discuție, vom examina doar un singur site de apel la un moment dat. este   va fi util să aveți un mic exemplu de site de apel pentru a vă referi   la, deci aici este unul foarte simplu, unde d este, desigur, o variabilă   tip dinamic

     

d.Foo (10); Site-ul de apel este reprezentat în cod ca a   System.Runtime.CompilerServices.CallSite.

altă carte spune:

compilatorul emite cod care în cele din urmă are ca rezultat un arbore de expresie   care descrie operațiunea, gestionată de un site de apel pe care DLR îl va face   obligați la timpul de execuție. Site-ul de apel în esență acționează ca intermediar   între apelant și apelant.

îmi pare rău, eu cant vedeți unde aceste trei explicații se combină într-o singură explicație.

voi fi bucuros să obțin o explicație simplă:

Îmi pot explica soția - ce sunt site-urile de apel?

0

2 răspunsuri

Ok this is how I see it.

For this example call is simply like a method or function that executes some code and returns.

For a static language runtime program (C, or CLR etc) a call site is essentially where a function call takes place. It's the location that the call will return to in a normal (non exceptional) flow. Since this is a static program the call site is simply a memory location, pushed on the stack.

For a dynamic language program (Ruby, Python, etc) , the code you are calling is not worked out until runtime. This means that some form of logic is needed to manage the process of making the correct function call and then cleaning up after the call (if needed). If the dynamic language program is on .NET 4 this is done using dlr (dynamic language runtime) objects of type System.Runtime.CompilerServices.CallSite. So the call will return to a method within the CallSite object and then on to location of the original call.

Prin urmare, răspunsul este că depinde de modul în care faceți apelul și, prin urmare, de ce platformă folosiți.

0
adăugat

Prima explicație nu are nimic de-a face cu dlr sau cu tipul dinamic: pur și simplu, un site de apel este o locație (sau site-ul) în codul sursă unde este apelată o metodă.

În implementarea tipului dinamic, este necesar să stocați informații despre apelurile metodelor dinamice conținute în codul dvs., astfel încât acestea să poată fi invocate în timpul rulării (dlr trebuie să caute metoda, să rezolve supraîncărcarea etc.). Se pare că obiectul reprezentând această informație ar trebui de asemenea să fie numit "loc de apel".

0
adăugat