cargo careful:為你的代碼提供更多安全保證
您是否知道標準庫充滿了用戶永遠看不到的有用檢查?標準庫中有很多斷言,它們會做一些事情,比如檢查char::from_u32_unchecked必須針對一個有效的 char、CStr::from_bytes_with_nul_unchecked只能在沒有內部 null 字節的情況下調用,copy或者copy_nonoverlapping必須針對內存布局對齊的非 null 指針(非重疊)。但是,由 rustup 分發的常規標準庫是在沒有調試斷言的情況下編譯的,因此用戶很難從這些額外檢查中受益。
cargo careful 就是為了彌補這個差距,它在第一次調用時,會從源代碼構建一個帶有調試斷言的標準庫,然后使用該標準庫運行您的程序或測試套件。
您可以通過cargo install cargo-careful快速安裝,然后執行cargo +nightly careful run/test用于執行二進制 crate 或測試,并進行額外的調試檢查。
需要注意的是,這自然會比常規調試或發布版本慢,但它比在 Miri 中執行程序要快得多,并且仍然有助于找到一些未定義的行為。當然,如果您想要更加徹底的檢查,Miri 會是一個更好的選擇,兩者結合使用,體驗更佳。
Axum 風格的函數參數示例
作者使用 Axum 時候,思考了這樣一件事:Rust 是一個靜態編譯的語言,并且沒有函數重載和可選參數這類特性,但是 Axum 中,get函數卻可以接收不同類型的函數指針,這是為什么呢?
作者創建了一個倉庫,動手實踐,詳細解釋了其中的奧秘。
值得一提的是,Axum 當時也參考了 bevy 的 query system 設計。
編譯器優化的思考
Rust 編譯器背后為我們做了很多優化,但是,如果讓你來實現,你會如何下手呢?典型的思路可能是:
找到可以應用特定優化方法的場景
通過分析,找到這種場景
應用你的優化方法
如果將很多編譯優化方法結合起來,編譯器的性能就能提升一大截。但是,這也絕非易事,在一個場景下實現編譯優化,所要考慮的因素和需要的信息,遠比你想象的要多。
本文的作者就通過幾個例子,解釋了他對于編譯優化背后的思考,相信你耐心看完,肯定有不少收獲。
審核編輯:劉清
-
編譯器
+關注
關注
1文章
1634瀏覽量
49128 -
rust語言
+關注
關注
0文章
57瀏覽量
3009
原文標題:【Rust日報】2022-09-27 cargo careful:為你的代碼提供更多安全保證
文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論