日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rust门卡有什么用_Rust能力养成之(10)用Cargo进行项目管理:扩展 调用与优化

發(fā)布時間:2025/4/16 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rust门卡有什么用_Rust能力养成之(10)用Cargo进行项目管理:扩展 调用与优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

上一篇我們講了Cargo運行測試

Cargo運行實例

Cargo工作空間

當(dāng)然,Cargo也能夠進(jìn)行擴(kuò)展,合并外部工具以增強(qiáng)開發(fā)體驗,在設(shè)計上,其可擴(kuò)展性已經(jīng)達(dá)到非常豐富和恰當(dāng)?shù)某潭取argo可以通過簡單的二進(jìn)制名稱(binary-name)語法調(diào)用開發(fā)人員所創(chuàng)建的命令行工具。

在這一節(jié)中,我們就來看看其中的一些經(jīng)常用得上的工具來幫助我們提升代碼的編寫效率和可讀性。

那么本篇內(nèi)容涉及子命令定制與安裝

用 Clippy來 Linting 代碼

子命令定制與安裝

為Cargo定制化命令行工具在結(jié)構(gòu)上歸為Cargo的子命令(subcommands)范疇。這些工具通常是二進(jìn)制文件,主要來自于GitHub,或者本地項目目錄,都可以通過cargo install 或者進(jìn)行安裝。

下面我們看一個實例cargo-watch tool。

cargo-watch

這里的watch肯定不是手表,顯然是崗哨觀察的意思。

每當(dāng)對代碼進(jìn)行更改時,通過在后臺自動生成項目,cargo-watch可以有助于縮短修復(fù)、編譯和運行周期。

默認(rèn)情況下,該工具只運行Rust的類型檢查器(cargo check命令),而不進(jìn)行代碼生成階段(這需要時間),便縮短了編譯時間;還可以使用-x flag 提供一個定制命令來代替cargo check。

我們可以通過運行cargo install cargo-watch來安裝cargo-watch,

然后在任何cargo項目中,都可以通過調(diào)用cargo watch來運行它。

現(xiàn)在,無論何時我們對項目進(jìn)行更改,cargo-watch都會在后臺運行cargo check并為我們重新編譯項目。

在下面的代碼中,做了一個拼寫錯誤:(如圖所示,將之寫過pow函數(shù)的返回值類型做成i6)

cargo watch提示有問題:

在我們進(jìn)行了糾正之后,Cargo watch重新編譯了這個項目:

這一點非常類似于Node.js生態(tài)系統(tǒng)中的watchman或nodemon包。

cargo-edit

Cargo -edit子命令可以用于自動添加Cargo.toml文件的依賴項,原則上可以添加所有類型的依賴項,包括dev依賴項和build依賴項,還可以添加任何依賴項的特定版本。

該工具可以通過運行cargo install cargo-edit來安裝,主要提供四個命令:cargo add

cargo rm

cargo edit

cargo upgrade

cargo-deb

這是另一個有用的社區(qū)開發(fā)的子命令,可以用來創(chuàng)建Debian包(.deb),以便在Debian Linux,比如Ubuntu上輕松發(fā)布Rust可執(zhí)行文件;

可以通過運行cargo install cargo-deb來安裝。我們將在本章末尾使用這個工具之前構(gòu)建的imgtool命令行可執(zhí)行文件打包成.deb包。

cargo-outdated

此命令行工具可以顯示Cargo項目中過期的crate依賴項;可以通過運行cargo install cargo-outdated來安裝。安裝完畢后,可以通過在項目目錄中運行cargo outdated來查看有哪些crate已經(jīng)“老”了。

現(xiàn)在,這些子命令與Cargo無縫協(xié)作的方式表現(xiàn)為:開發(fā)人員使用命名約定創(chuàng)建這些二進(jìn)制crate,比如Cargo -[cmd],當(dāng)使用 cargo install 安裝該二進(jìn)制crate時,Cargo將已安裝的二進(jìn)制文件傳遞給$PATH變量,然后可以使用cargo 進(jìn)行調(diào)用。

應(yīng)該說,這是一種簡單而有效的方式,Cargo通過社區(qū)開發(fā)的子命令來擴(kuò)展自身。當(dāng)然還有許多其他類似的擴(kuò)展,可以在下面網(wǎng)址上找到所有社區(qū)管理的子命令工具列表。https://github.com/rust-lang/cargo/wiki/Third-party-cargo-subcommands?github.com

cargo install也用于安裝任何二進(jìn)制crate或在Rust中開發(fā)的可執(zhí)行文件/應(yīng)用程序,這些文件和程序默認(rèn)安裝在/home//.cargo/bin/目錄。

我們將以此來安裝和構(gòu)建的imgtool應(yīng)用程序,使其在系統(tǒng)范圍內(nèi)可用。

用 Clippy來 Linting 代碼

在編程實踐中,將有助于將代碼寫的容易維護(hù),質(zhì)量合乎一定規(guī)范的做法,稱為Linting,在Rust中,相應(yīng)的工具是clippy。

在本節(jié)中,我們將安裝clippy并在之前建立的庫中試用一下:添加一些虛擬代碼,并看看clippy能給出什么建議。

在項目中使用clippy有多種方法,但本節(jié)只使用cargo clippy子命令的方式,簡單起見。Clippy可以對代碼進(jìn)行分析,是一個編譯器插件,可以訪問很多編譯器的內(nèi)部API。要使用clippy,先運行rustup component add clippy來安裝。

現(xiàn)在,為了演示clippy如何在代碼中指出一些寫的不怎樣的地方,我們在之前寫過的myexponent 的crate中的pow函數(shù)里面的if條件中加入了一些爛語句。

如下所示:

// myexponent/src/lib.rs

pub fn pow(base: i64, exponent: usize) -> i64 {

/// Dummy code for clippy demo

let x = true;

if x == true {

}

///

let mut res = 1;

if exponent == 0 {

return 1;

}

for _ in 0..exponent {

res *= base as i64;

}

res

}

#[cfg(test)]

mod tests {

use super::pow;

#[test]

fn minus_two_raised_three_is_minus_eight() {

assert_eq!(pow(-2, 3), -8);

}

}

此時,我們運行cargo clippy

代碼對應(yīng)結(jié)果如下:

不難看出,顯然是說添加的語句寫的太多余了,“equality checks against true are unnecessary”,并給出了改進(jìn)建議“ try simplifying it as shown: `x`”。

以此可以看出,clippy還是有使用價值的,可以指出我們代碼上的潛在錯誤和不當(dāng)之處。更多的實例,可以參見:https://rust-lang-nursery.github.io/rust-clippy/master/index.html#absurd_extreme_comparisons?rust-lang-nursery.github.io

有關(guān)clippy多種方式的配置,可以直接去https://github.com/rust-lang/rust-clippy?github.com

結(jié)語

本篇所介紹的都是在現(xiàn)階段比較有用的工具,同時也是后續(xù)篇章的基礎(chǔ)。

下一篇,會探索一下Cargo的項目清單文件cargo.toml,而后再說一下如何用vscode創(chuàng)建一個Rust的開發(fā)環(huán)境。

主要參考和建議讀者進(jìn)一步閱讀的文獻(xiàn)The Rust Programming Language?doc.rust-lang.org

Rust編程之道,2019, 張漢東

The Complete Rust Programming Reference Guide,2019, Rahul Sharma,Vesa Kaihlavirta,Claus Matzinger

Hands-On Data Structures and Algorithms with Rust,2018,Claus Matzinger

Beginning Rust ,2018,Carlo Milanesi

Rust Cookbook,2017,Vigneshwer Dhinakaran

總結(jié)

以上是生活随笔為你收集整理的rust门卡有什么用_Rust能力养成之(10)用Cargo进行项目管理:扩展 调用与优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。