20

インターネットをスキャンしていると、簡単な方法で理解するのに苦労しています-コールサイト(@dlr)という用語。CallSiteが次のとおりであることをここで読んでいます:

あるサイトによると

メソッドが呼び出される場所。

一冊の本は言う:

サイトを呼び出します。これは、DLRの一種のアトムであり、単一のユニットと見なすことができる最小のコードです。1つの式に多数の呼び出しサイトが含まれる場合がありますが、動作は自然な方法で構築され、一度に1つの呼び出しサイトを評価します。残りの説明では、一度に1つのコールサイトのみを検討します。参照する呼び出しサイトの小さな例があると便利です。これは非常に単純な例です。ここで、dはもちろん動的タイプの変数です。

d.Foo(10); 呼び出しサイトは、コードでSystem.Runtime.CompilerServices.CallSiteとして表されます。

別の本は言う:

コンパイラーは、DLRが実行時にバインドする呼び出しサイトによって管理される、操作を説明する式ツリーを最終的に生成するコードを発行します。呼び出しサイトは、基本的に、呼び出し元と呼び出し先の間の仲介役として機能します。

申し訳ありませんが、これら3つの説明が1つの簡単な説明にまとめられている場所がわかりません。

簡単な説明をいただければ幸いです。

妻をどのように説明できますか-コールサイトとは何ですか?

4

2 に答える 2

16

最初の説明は、dlrまたは動的タイプとは関係ありません。簡単に言えば、呼び出しサイトは、メソッドが呼び出されるソースコード内の場所(またはサイト)です。

動的型を実装する際には、コードに含まれる動的メソッド呼び出しに関する情報を格納して、実行時に呼び出すことができるようにする必要があります(dlrはメソッドを検索し、オーバーロードを解決する必要があります)。この情報を表すオブジェクトを「コールサイト」とも呼ぶのは当然のようです。

于 2012-06-02T13:32:52.480 に答える
8

わかりました、これは私がそれを見る方法です。

この例の呼び出しは、コードを実行して戻るメソッドまたは関数のようなものです。

静的言語ランタイムプログラム(C、またはCLRなど)の場合、呼び出しサイトは基本的に関数呼び出しが行われる場所です。これは、通常の(例外ではない)フローで通話が戻る場所です。これは静的プログラムであるため、呼び出しサイトは単なるメモリの場所であり、スタックにプッシュされます。

動的言語プログラム(Ruby、Pythonなど)の場合、呼び出しているコードは実行時まで処理されません。これは、正しい関数呼び出しを行い、呼び出し後にクリーンアップするプロセスを管理するために、何らかの形式のロジックが必要であることを意味します(必要な場合)。動的言語プログラムが.NET4上にある場合、これはSystem.Runtime.CompilerServices.CallSiteタイプのdlr(動的言語ランタイム)オブジェクトを使用して実行されます。したがって、呼び出しはCallSiteオブジェクト内のメソッドに戻り、次に元の呼び出しの場所に戻ります。

したがって、答えは、通話の方法、つまり使用しているプラ​​ットフォームによって異なるということです。

于 2012-06-02T10:53:18.283 に答える