我正在寫一些處理原始指針的Rust代碼。這些原始指針然後通過使用ContravariantLifetime將結構的生命週期與我的對象綁定的結構暴露給用戶。我可以編寫無效生命期測試嗎?
我希望能夠編寫測試來驗證面向用戶的結構不能比我的對象壽命更長。我有如下代碼:
fn element_cannot_outlive_parts() {
let mut z = {
let p = Package::new();
p.create() // returns an object that cannot live longer than p
};
}
這不能編譯,這正是我想要的。不過,我希望有一些自動檢查,即使在對代碼進行任何重構之後,此行爲都是真實的。
我現在最好的想法是用此代碼編寫一次性的Rust文件,並配置bash腳本以嘗試編譯它們並查找特定的錯誤消息,這些都感覺很詭異。
唉,對失敗編譯的測試本身並不支持。 rustc本身具有實現這種功能的基礎設施('src/test/compile-fail'等),但是它是自定義的並且通常不可用。 – 2014-10-30 23:17:16
@ChrisMorgan:你認爲社區會支持這種測試嗎? Rust有一個真正發展的類型系統,可以執行大量的檢查,驗證檢查是否實際執行似乎很好。過去,在C++中,我使用了Clang的特定測試('-verify' flag + Clang的具體評論)來處理這類事情;這是相當先進的。 – 2014-10-31 08:48:18
@MatthieuM .:我知道在設計一個庫時,有能力測試驗證某些代碼無法編譯。 – 2014-10-31 12:08:53