2009-02-11 26 views
7

Ưu điểm của việc hiểu CIL là gì?Ưu điểm của kiến ​​thức CIL trong .NET

Bạn có phải biết lắp ráp để hiểu nó không? Mã trong các tệp này trông giống nhau.

Tôi làm cách nào để tìm hiểu thêm về nó? Bất kỳ cuốn sách nào về nó giống như cuốn sách C# của Jon Skeet?

+0

trùng lặp chính xác của http://stackoverflow.com/questions/44940/learning-cil – U62

+0

Không có câu hỏi này chủ yếu là về lợi thế của việc học nó. –

+0

gần giống với http://stackoverflow.com/questions/203019/reasons-to-learn-msil –

Trả lời

2

Bạn không cần phải biết lắp ráp để tìm hiểu nó - đó là hoàn toàn tách biệt với lắp ráp bản địa. Mặc dù trong thời gian chạy, CLR về cơ bản sẽ biến nó thành bản địa.

Một vài ưu điểm có thể:

1), bạn có thể ghé qua CIL đó là đầu ra bởi trình biên dịch và xem cụ thể những gì mã của bạn đang làm

2) để giải quyết một số loại vấn đề, bạn có thể tại một số điểm muốn tự động tạo mã .... ví dụ, kể từ khuôn khổ chính sách phun của Microsoft không phải là khá lên để hít thở và chúng tôi đã cần loại hành vi chúng tôi đã viết một số cấp thấp, khung loại hệ thống ống nước ..

6

Tôi thấy những cuốn sách này hữu ích khi học IL và về CLR:

Chỉ đọc qua chúng sẽ cung cấp cho bạn nhiều thông tin.

(Tôi cũng đã nghe CLR via C# là thực sự tốt, nhưng chưa đọc nó bản thân mình.)

Hiểu IL và CLR sẽ cung cấp cho bạn một chân lên khi bạn chạy vào một vấn đề. (Một trừu tượng bị rò rỉ?) Mặc dù, những ngày này với decompilers tốt đẹp như Reflector, tôi không tìm thấy bản thân mình bằng cách sử dụng ildasm càng nhiều.

Hiểu lắp ráp không cần thiết, nhưng sẽ giúp ích. IL thực sự là khá đơn giản cho hầu hết các phần.

Một ví dụ về nơi IL có ích là xác định chính xác cách F # biên dịch các cấu trúc nhất định. Một cách khác là có thể sử dụng DynamicMethod và System.Reflection.Emit, có thể mở ra một số giải pháp tốt đẹp trong các tình huống nhất định.

6

Kiến thức về CIL cho phép bạn khai thác thêm .NET framework trong một số tình huống cạnh.

Lưu ý rằng bạn không phải đọc mã vạch thô để hưởng lợi từ kiến ​​thức này.kiến thức chung của IL và lắp ráp, kết hợp với Mono.Cecil.dll có thể làm phép lạ:

PS: cho tôi cách nguồn tốt nhất để nhận được một số kiến thức thực tế IL đã đọc mã C# cho một số quy tắc Gendarme (nó là một tương tự của FxCop sử dụng Mono. Cecil để làm sự mâu thuẫn mã). Ngoài ra, bài viết này là một khởi đầu tốt: Parsing the IL of a Method Body.

3

CIL đơn giản hơn nhiều so với công cụ lắp ráp thông thường. Đối với một phần lớn điều này là do thực tế là máy ảo là ngăn xếp dựa, vì vậy tất cả mọi thứ đi vào ngăn xếp và không có đăng ký để theo dõi.

Cũng không có tính toán bù trừ, không có thao tác bộ nhớ trực tiếp, cuộc gọi phương thức được liệt kê bằng tên .NET của chúng và v.v. Tôi đoán rằng nếu bạn có một ít kinh nghiệm với bất kỳ loại ngôn ngữ lắp ráp nào khác, có thể bạn sẽ có thể nắm bắt được ý chính của mã CIL khá nhanh chóng.

Cá nhân tôi thấy rất hữu ích khi có thể kích hoạt ILDasm hoặc Reflector để xem những gì IL trình biên dịch C# thực sự tạo ra cho một số đoạn mã. Đối với nhiều tính năng mới hơn như các đại biểu ẩn danh/lambdas, các biến bị bắt, các trình vòng lặp và các kiểm tra tương tự như IL có thể rất hữu ích.

Những người khác đã đề cập đến sách hay và tôi sẽ chỉ bỏ phiếu của tôi cho Chuyên gia .NET 2.0 IL assembler bởi Serge Lidin. Nó có tất cả các chi tiết đẫm máu. Nếu bạn muốn điều gì đó gần gũi hơn với C# CLR của Jeffrey Ricther qua C# thật tuyệt vời. Cuốn sách của Jon Skeet rất tuyệt, nhưng nó không thực sự bao gồm CIL.

Các vấn đề liên quan