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