2012-06-02 37 views
14

quét internet, không hiểu sự cố một cách đơn giản - thuật ngữ gọi trang web (@dlr). ive được đọc here rằng CallSite là:Giải thích trang web?

một trang web nói

Vị trí trong đó phương pháp này được gọi.

một cuốn sách nói: Trang web

gọi. Đây là loại nguyên tử của DLR - mảnh nhỏ nhất của codewhich có thể được coi là một đơn vị duy nhất. Một biểu thức có thể chứa rất nhiều trang web cuộc gọi, nhưng hành vi được tích hợp theo cách tự nhiên , đánh giá một trang web cuộc gọi tại một thời điểm. Đối với phần còn lại của cuộc thảo luận , chúng tôi sẽ chỉ giám sát một trang cuộc gọi tại một thời điểm. Đó là sẽ hữu ích để có một ví dụ nhỏ của một trang web kêu gọi tham khảo đến, vì vậy đây là một rất đơn giản, trong đó d là tất nhiên một biến loại động

d.Foo (10); Trang web cuộc gọi được thể hiện bằng mã là System.Runtime.CompilerServices.CallSite.

cuốn sách khác nói:

trình biên dịch phát ra mã mà cuối cùng dẫn đến một cây biểu mô tả các hoạt động, bởi một trang web gọi quản lý mà các DLR sẽ ràng buộc khi chạy. Trang web cuộc gọi chủ yếu hoạt động như một trung gian giữa người gọi và người được tán thành.

xin lỗi, tôi không thể xem xem 3 giải thích đó được kết hợp thành một lời giải thích đơn giản.

tôi sẽ rất vui khi nhận được một lời giải thích đơn giản:

Làm thế nào tôi có thể giải thích vợ tôi là -những gì gọi các trang web?

Trả lời

11

Giải thích đầu tiên không liên quan gì đến dlr hoặc loại động: chỉ cần nói, trang web gọi là vị trí (hoặc trang web) trong mã nguồn nơi phương thức được gọi.

Khi triển khai kiểu động, cần lưu trữ thông tin về lời gọi hàm động trong mã của bạn, để chúng có thể được gọi khi chạy (dlr cần tra cứu phương thức, giải quyết quá tải, v.v.). Có vẻ như tự nhiên rằng đối tượng đại diện cho thông tin này cũng nên được gọi là "trang web cuộc gọi".

4

Ok đây là cách tôi xem.

Đối với ví dụ này, gọi đơn giản là một phương thức hoặc hàm thực hiện một số mã và trả về.

Đối với chương trình thời gian chạy ngôn ngữ tĩnh (C, hoặc CLR, v.v.), trang web cuộc gọi về cơ bản là nơi thực hiện cuộc gọi hàm. Đó là vị trí mà các cuộc gọi sẽ trở lại trong một dòng chảy bình thường (không đặc biệt). Vì đây là một chương trình tĩnh nên trang gọi chỉ đơn giản là một vị trí bộ nhớ, được đẩy lên ngăn xếp.

Đối với một chương trình ngôn ngữ động (Ruby, Python, v.v.), mã bạn đang gọi không được thực hiện cho đến khi chạy. Điều này có nghĩa rằng một số hình thức logic là cần thiết để quản lý quá trình thực hiện cuộc gọi chức năng chính xác và sau đó làm sạch sau cuộc gọi (nếu cần). Nếu chương trình ngôn ngữ động được bật .NET 4, việc này được thực hiện bằng cách sử dụng các đối tượng dlr (ngôn ngữ động) trong kiểu System.Runtime.CompilerServices.CallSite.Vì vậy, cuộc gọi sẽ trở lại một phương thức trong đối tượng CallSite và sau đó vào vị trí của cuộc gọi ban đầu.

Vì vậy, câu trả lời là nó phụ thuộc vào cách bạn thực hiện cuộc gọi và do đó bạn đang sử dụng nền tảng nào.