2009-07-23 24 views
6

tôi gần đây đã kích thích bởi ý tưởng về tĩnh kiểm tra thiết kế theo hợp đồng trong .net 4.0/Visual Studio 2010.Tĩnh kiểm tra thiết kế theo hợp đồng

Tuy nhiên tôi rất buồn khi nhận ra rằng nó sẽ chỉ có sẵn trong Visual Studio Hệ thống nhóm. http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx

Có bất kỳ lựa chọn thay thế nào cung cấp thiết kế được kiểm tra tĩnh theo hợp đồng cho C# không?

Dự án mono có bổ sung tính năng functaionality này vào trình biên dịch không?

Trả lời

3

Anh ấy đang đề cập đến định lý ngữ.

Không có gì ngăn cản cộng đồng nguồn mở hoặc thương mại thực hiện riêng của họ. Các lớp Hợp đồng là một phần của BCL và dễ dàng để thêm vào, ví dụ như Mono. "Chúng tôi sẽ" cần phải làm một định lý prover nếu chúng ta muốn kiểm tra tĩnh mọi thứ.

Trình giải thích không phải là một phần của trình biên dịch. Về cơ bản nó chạy như sau:

  • Biên dịch phiên bản nhị phân với CONTRACTS_FULL được xác định. Điều này phát ra tất cả các thuộc tính của Hợp đồng và gọi tới các phương thức tĩnh lớp học Contract.
  • Tải lắp ráp "chỉ để phản chiếu" và phân tích cú pháp tất cả mã byte của phương thức. Phân tích lưu lượng chi tiết với thông tin tiểu bang sẽ cho phép một số hợp đồng nhất định được hiển thị "luôn đúng". Một số sẽ được "biết sai tại một số điểm." Những người khác sẽ "không thể chứng minh tĩnh hợp đồng."

Khi công cụ trở nên tốt hơn, nó sẽ đi từ việc đưa ra cảnh báo về mọi hợp đồng để cung cấp kết quả chứng minh tương tự cho phiên bản Microsoft.

Chỉnh sửa: Man, nếu Reflector được mở nguồn, nó sẽ là tuyệt vời cho việc này. Việc triển khai lần đầu tiên có thể hoạt động như một plugin. Bằng cách đó, logic prover có thể được thiết kế mà không phải lo lắng về cách các tệp nhị phân được tải. Một khi nó chứng minh chức năng (có được nó?), Logic có thể được trích xuất và xây dựng để hoạt động trên các cây cú pháp được tạo ra bởi một bộ tải lắp ráp khác (một trong đó là mã nguồn mở). Điều quan trọng/mới lạ ở đây là logic prover - bộ nạp lắp ráp đã được thực hiện nhiều lần và không có gì thay đổi ngoạn mục cho việc sử dụng này.

+0

gendarme đã có cơ sở hạ tầng đáng kể để tải hội đồng và phân tích cú pháp bytecode: http://www.mono-project.com/Gendarme –

0

Các hợp đồng mã không yêu cầu trình biên dịch C# khi chúng được triển khai dưới dạng các lớp trong Khuôn khổ .NET 4.0. Bất kỳ trình biên dịch .NET nào có thể phát ra một assembly được quản lý có thể sử dụng được, mặc dù C++/CLI có thể sẽ phát ra một assembly không tương thích khi trộn mã được quản lý và mã nguồn gốc. Có các công cụ bổ sung được thực hiện bởi IDE để ghi lại IL kết quả để các hợp đồng xuất hiện ở vị trí chính xác, và do đó các tác giả dự án Mono sẽ cần phải viết các công cụ tương tự cho các hợp đồng làm việc trên nền tảng Mono.

Xem this post để biết thêm thông tin.

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