Tôi đang viết một số mã Rust xử lý các con trỏ thô. Những con trỏ thô sau đó được tiếp xúc với người dùng thông qua các cấu trúc sử dụng ContravariantLifetime để gắn kết vòng đời của cấu trúc với đối tượng của tôi.Tôi có thể viết các bài kiểm tra cho các kiếp sống không hợp lệ không?
Tôi muốn có thể viết các bài kiểm tra xác thực rằng cấu trúc người dùng không thể sống lâu hơn đối tượng của tôi. Tôi có mã như sau:
fn element_cannot_outlive_parts() {
let mut z = {
let p = Package::new();
p.create() // returns an object that cannot live longer than p
};
}
Điều này không biên dịch, chính xác là những gì tôi muốn. Tuy nhiên, tôi muốn có một số kiểm tra tự động rằng hành vi này là đúng ngay cả sau khi bất kỳ refactoring tôi làm gì để mã. Ý tưởng tốt nhất của tôi vào lúc này là viết các tệp Rust một lần với mã này và tạo các tập lệnh bash để cố gắng biên dịch chúng và tìm kiếm các thông báo lỗi cụ thể, tất cả đều cảm thấy khá khó khăn.
Than ôi, không có hỗ trợ gốc cho các bài kiểm tra không biên soạn. Bản thân rustc có cơ sở hạ tầng để đạt được điều này ('src/test/compile-fail' et al.), nhưng nó là tùy chỉnh và thường không có sẵn. –
@ ChrisMorgan: Bạn có tin rằng sẽ có sự quan tâm trong cộng đồng để hỗ trợ cho loại thử nghiệm này không? Rust có một hệ thống kiểu thực sự phát triển cho phép thực thi rất nhiều kiểm tra, và có vẻ tốt để xác minh rằng các kiểm tra thực sự được thực thi. Trong quá khứ, với C++, tôi đã sử dụng các bài kiểm tra cụ thể của Clang ('-verify' flag + các bình luận cụ thể của Clang) cho loại điều này; nó khá tiên tiến. –
@MatthieuM .: Tôi biết rằng tôi muốn có khả năng, khi thiết kế một thư viện, có các bài kiểm tra xác minh rằng mã nhất định không biên dịch. –