0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

cargo careful:為你的代碼提供更多安全保證

jf_wN0SrCdH ? 來源:Rust語言中文社區(qū) ? 作者:hsqStephenZhang ? 2022-10-27 09:52 ? 次閱讀

cargo careful:為你的代碼提供更多安全保證

您是否知道標(biāo)準(zhǔn)庫充滿了用戶永遠看不到的有用檢查?標(biāo)準(zhǔn)庫中有很多斷言,它們會做一些事情,比如檢查char::from_u32_unchecked必須針對一個有效的 char、CStr::from_bytes_with_nul_unchecked只能在沒有內(nèi)部 null 字節(jié)的情況下調(diào)用,copy或者copy_nonoverlapping必須針對內(nèi)存布局對齊的非 null 指針(非重疊)。但是,由 rustup 分發(fā)的常規(guī)標(biāo)準(zhǔn)庫是在沒有調(diào)試斷言的情況下編譯的,因此用戶很難從這些額外檢查中受益。

cargo careful 就是為了彌補這個差距,它在第一次調(diào)用時,會從源代碼構(gòu)建一個帶有調(diào)試斷言的標(biāo)準(zhǔn)庫,然后使用該標(biāo)準(zhǔn)庫運行您的程序或測試套件。

您可以通過cargo install cargo-careful快速安裝,然后執(zhí)行cargo +nightly careful run/test用于執(zhí)行二進制 crate 或測試,并進行額外的調(diào)試檢查。

需要注意的是,這自然會比常規(guī)調(diào)試或發(fā)布版本慢,但它比在 Miri 中執(zhí)行程序要快得多,并且仍然有助于找到一些未定義的行為。當(dāng)然,如果您想要更加徹底的檢查,Miri 會是一個更好的選擇,兩者結(jié)合使用,體驗更佳。

Axum 風(fēng)格的函數(shù)參數(shù)示例

作者使用 Axum 時候,思考了這樣一件事:Rust 是一個靜態(tài)編譯的語言,并且沒有函數(shù)重載和可選參數(shù)這類特性,但是 Axum 中,get函數(shù)卻可以接收不同類型的函數(shù)指針,這是為什么呢?

pYYBAGNZ5MCAYh6nAAD3HjtnuF0048.jpg

作者創(chuàng)建了一個倉庫,動手實踐,詳細解釋了其中的奧秘。

值得一提的是,Axum 當(dāng)時也參考了 bevy 的 query system 設(shè)計。

編譯器優(yōu)化的思考

Rust 編譯器背后為我們做了很多優(yōu)化,但是,如果讓你來實現(xiàn),你會如何下手呢?典型的思路可能是:

找到可以應(yīng)用特定優(yōu)化方法的場景

通過分析,找到這種場景

應(yīng)用你的優(yōu)化方法

如果將很多編譯優(yōu)化方法結(jié)合起來,編譯器的性能就能提升一大截。但是,這也絕非易事,在一個場景下實現(xiàn)編譯優(yōu)化,所要考慮的因素和需要的信息,遠比你想象的要多。

本文的作者就通過幾個例子,解釋了他對于編譯優(yōu)化背后的思考,相信你耐心看完,肯定有不少收獲。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1602

    瀏覽量

    48896
  • rust語言
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    2988

原文標(biāo)題:【Rust日報】2022-09-27 cargo careful:為你的代碼提供更多安全保證

文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    安全芯片能否保證芯片安全?

    ,由于軟件加密只是增加破解難度,不能防止復(fù)制,越來越多的設(shè)計采用硬件加密方式來保護IPCORE。以常見的MCu+存儲器系統(tǒng)例,通常的保護模式是在系統(tǒng)文件中設(shè)置一段用于驗證的加密安全代碼,通過存儲器
    發(fā)表于 10-10 14:42

    使用PMIC來保證的系統(tǒng)安全

    當(dāng)你在設(shè)計安全控制面板或是自動門鎖等電池供電運行的便攜式系統(tǒng)時,電路板上的每一英寸都很寶貴,每一秒鐘的操作與運行也十分重要,并且(最后一點,不過也很重要)系統(tǒng)所花費的每一分錢都應(yīng)該發(fā)揮其應(yīng)有
    發(fā)表于 09-06 15:31

    工業(yè)用物聯(lián)網(wǎng)多種行業(yè)提供更多服務(wù)

    (比如說能源、制造、養(yǎng)護維修等),并且為多種行業(yè)提供更高的安全和安防性能、更好的使用體驗、全新的業(yè)務(wù)服務(wù),以及其它更多功能,這些行業(yè)包括:智能制造業(yè):為了改進制造工藝,制造商正在將有線和無線連通性添加到
    發(fā)表于 09-10 11:57

    未來汽車的安全怎么保證

    ,同時讓我們可以更有效地利用現(xiàn)有的道路設(shè)施,在減少安全事故的同時實現(xiàn)更大的交通流量。 回到之前的話題,在改善駕駛員輔助、自動駕駛員服務(wù)和實現(xiàn)更多自主功能的同時,開發(fā)人員如何保證這些自主駕駛系統(tǒng)不會
    發(fā)表于 03-27 06:45

    能否提供示例的源代碼或為wifi連接模塊添加更多入門指南呢?

    預(yù)算項目使用繁重的操作系統(tǒng))。我喜歡“STM32H7B3I-DK 編譯的演示二進制文件”中的示例,但找不到源代碼。您能否提供示例的源代碼或為 wifi 連接模塊添加更多入門指南?謝謝。
    發(fā)表于 12-06 06:15

    如何在構(gòu)建yocto時將rust和cargo包安裝為圖像?

    我正在使用 5.15.72。 當(dāng)我制作 imx 完整圖像時,我嘗試包括 rust 和 cargo。 知不知道怎么?
    發(fā)表于 05-09 07:10

    如何保證安全用電

    如何保證安全用電是電工實用技術(shù)叢書,本書結(jié)構(gòu)合理、選材適當(dāng)、文字精練、深入淺出,對如何保證安全用電作了系統(tǒng)全面的分析介紹?!度绾?b class='flag-5'>保證
    發(fā)表于 11-09 14:27 ?0次下載
    如何<b class='flag-5'>保證</b><b class='flag-5'>安全</b>用電

    KIOCWORK:通過源代碼分析保證軟件安全

    KIOCWORK公司給軟件開發(fā)人員、構(gòu)架師和安全專家提供檢查、評估、處理、度量軟件安全漏洞的工具,這些活動是軟件開發(fā)過程中不可或缺的重要組成部分。 通過使用KIOCWORK源代碼分析工
    發(fā)表于 04-03 22:21 ?12次下載

    華為云順利通過TISAX認證,汽車行業(yè)上云提供更多安全保障

    極高保護要求和數(shù)據(jù)保護標(biāo)簽,是目前唯一國內(nèi)數(shù)據(jù)中心完成TISAX認證的云服務(wù)商。這表明華為云獲得了汽車行業(yè)提供云服務(wù)的重要資質(zhì),可以為汽車行業(yè)客戶安全上云提供
    的頭像 發(fā)表于 12-29 14:16 ?2579次閱讀
    華為云順利通過TISAX認證,<b class='flag-5'>為</b>汽車行業(yè)上云<b class='flag-5'>提供</b><b class='flag-5'>更多</b><b class='flag-5'>安全</b>保障

    保證鋰離子電池安全的設(shè)計資料下載

    電子發(fā)燒友網(wǎng)提供保證鋰離子電池安全的設(shè)計資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼
    發(fā)表于 04-05 08:40 ?8次下載
    <b class='flag-5'>保證</b>鋰離子電池<b class='flag-5'>安全</b>的設(shè)計資料下載

    cargo-offline命令解讀

    修改過,來給被包裝的 cargo 命令條件地增補 --offline 命令行參數(shù)(即,離線編譯)。形象地講,就是將 cargo check 條件地變形 cargo check --o
    的頭像 發(fā)表于 12-01 15:41 ?975次閱讀

    CodeArts如何保證客戶代碼和應(yīng)用安全?

    華為云有IAM統(tǒng)一認證。CodeArts原名“DevCloud”上每個項目均設(shè)有權(quán)限管理機制。 CodeArts讓企業(yè)級用戶使用安全、可靠的環(huán)境,提供企業(yè)級病毒防護。存儲和運行環(huán)境均有冗余節(jié)點,并提供跨區(qū)域容災(zāi)備份解決方案。
    的頭像 發(fā)表于 12-09 15:39 ?512次閱讀

    CARGO:改變您使用3D資產(chǎn)的方式

    今天我們發(fā)布了Cargo,這款軟件將徹底改變您使用3D資產(chǎn)的方式。Cargo適用于Windows,開箱即用,可與Blender、Unreal、3dsMax 和Maya等3D軟件一起使用。讓我們解開
    的頭像 發(fā)表于 06-26 10:08 ?876次閱讀

    如何安裝和使用cargo

    Cargo是Rust語言的包管理器和構(gòu)建工具。它能夠幫助我們管理依賴、構(gòu)建項目、運行測試和發(fā)布程序等。在Rust社區(qū)中,Cargo已經(jīng)成為了標(biāo)準(zhǔn)的構(gòu)建工具,它為Rust的開發(fā)者提供了極大的便利
    的頭像 發(fā)表于 09-20 11:28 ?1370次閱讀

    如何知道代碼是否線程安全

    的?如何知道代碼是否線程安全?要如何訪問數(shù)據(jù)才能保證數(shù)據(jù)的安全? 本篇文章會一一回答的問題
    的頭像 發(fā)表于 11-01 11:42 ?553次閱讀
    如何知道<b class='flag-5'>你</b>的<b class='flag-5'>代碼</b>是否線程<b class='flag-5'>安全</b>