Rust 中的 Packages 與 Crates模塊化構(gòu)建的基礎(chǔ)及開發(fā)流程
什么是 Crate?
在 Rust 中,一個(gè) crate 是編譯器在編譯時(shí)所考慮的最小代碼單元。無(wú)論是通過(guò) rustc
編譯一個(gè)單獨(dú)的源文件,還是使用 Cargo 構(gòu)建整個(gè)項(xiàng)目,Rust 都會(huì)把輸入的源文件當(dāng)作一個(gè) crate。一個(gè) crate 可以包含多個(gè)模塊,而這些模塊又可以分散在不同的文件中。
二進(jìn)制 Crate 與 庫(kù) Crate
Rust 中的 crate 分為兩種形式:
- 二進(jìn)制 Crate
二進(jìn)制 crate 生成可執(zhí)行文件。每個(gè)二進(jìn)制 crate 都必須包含一個(gè)名為 main
的函數(shù)作為程序的入口點(diǎn)。例如,我們?cè)谇皫渍戮帉懙拿钚谐绦蚨际嵌M(jìn)制 crate。
- 庫(kù) Crate
庫(kù) crate 不包含 main
函數(shù),也不會(huì)編譯成可執(zhí)行文件。它們主要用于定義可以在多個(gè)項(xiàng)目間共享的功能。例如,常用的 rand
庫(kù)提供了生成隨機(jī)數(shù)的功能。通常 Rustaceans 在提到 “crate” 時(shí),多數(shù)情況下指的是庫(kù) crate,二者在概念上可視為庫(kù)或模塊化的 API。
Crate Root
每個(gè) crate 都有一個(gè) crate root,即編譯器開始編譯時(shí)首先查找的源文件。對(duì)于二進(jìn)制 crate,Cargo 默認(rèn)將 src/main.rs
作為 crate root;而對(duì)于庫(kù) crate,默認(rèn)的 crate root 是 src/lib.rs
。
什么是 Package?
一個(gè) package 則是包含一個(gè)或多個(gè) crate 的代碼集合。每個(gè) package 都包含一個(gè) Cargo.toml
文件,該文件描述了如何構(gòu)建 package 中的所有 crate。簡(jiǎn)單來(lái)說(shuō),package 是 Cargo 用來(lái)管理和構(gòu)建多個(gè) crate 的單位。
例如,當(dāng)你執(zhí)行以下命令創(chuàng)建一個(gè)新項(xiàng)目時(shí):
$ cargo new my-project Created binary (application) `my-project` package
這時(shí),Cargo 會(huì)為你生成如下目錄結(jié)構(gòu):
my-project/ ├── Cargo.toml └── src └── main.rs
在這個(gè)例子中,Cargo.toml
定義了 package,而 src/main.rs
則是一個(gè)二進(jìn)制 crate 的 crate root。注意:Cargo 會(huì)自動(dòng)按照約定將 src/main.rs
視為與 package 同名的二進(jìn)制 crate。如果你的 package 中既有 src/main.rs
又有 src/lib.rs
,那么該 package 同時(shí)包含一個(gè)二進(jìn)制 crate和一個(gè)庫(kù) crate。
此外,你還可以通過(guò)在 src/bin
目錄中放置額外的文件來(lái)創(chuàng)建多個(gè)二進(jìn)制 crate。每個(gè)文件都會(huì)被編譯成一個(gè)獨(dú)立的可執(zhí)行文件,這為需要構(gòu)建多個(gè)工具或命令行程序的項(xiàng)目提供了極大的靈活性。
Package 與 Crate 的關(guān)系
- Package:是一個(gè)包含一個(gè)或多個(gè) crate 的集合,包含一個(gè)
Cargo.toml
文件來(lái)描述項(xiàng)目的元數(shù)據(jù)和構(gòu)建配置。 - Crate:是編譯器處理的最小單元,分為二進(jìn)制 crate 和庫(kù) crate。每個(gè) package 至少包含一個(gè) crate,但可以包含多個(gè)二進(jìn)制 crate(放在
src/bin
下),同時(shí)只能包含一個(gè)庫(kù) crate。
這種設(shè)計(jì)使得 Rust 在組織和管理代碼時(shí)非常靈活,既能讓你將功能拆分為獨(dú)立的 crate,又能通過(guò) package 將相關(guān)的 crate 組合在一起進(jìn)行統(tǒng)一管理。
小結(jié)
- Crate 是 Rust 編譯器處理的最小代碼單元,可以是二進(jìn)制或庫(kù)。
- Crate Root 是每個(gè) crate 的入口文件,二進(jìn)制 crate 默認(rèn)是
src/main.rs
,庫(kù) crate 默認(rèn)是src/lib.rs
。 - Package 是一個(gè)包含一個(gè)或多個(gè) crate 的集合,Cargo 通過(guò)
Cargo.toml
管理 package 的元數(shù)據(jù)和構(gòu)建配置。 - 一個(gè) package 可以包含多個(gè)二進(jìn)制 crate(通過(guò)
src/bin
目錄),但至多只能包含一個(gè)庫(kù) crate。
掌握了這些基本概念后,你就能更好地理解 Rust 的模塊系統(tǒng),并利用 Cargo 高效地管理你的項(xiàng)目。無(wú)論是構(gòu)建一個(gè)簡(jiǎn)單的命令行工具,還是開發(fā)一個(gè)龐大的庫(kù)項(xiàng)目,正確的包和 crate 結(jié)構(gòu)都是成功的關(guān)鍵。
希望這篇博客能幫助你更清晰地理解 Rust 中的 Packages 與 Crates 概念,開啟你高效模塊化開發(fā)的旅程。Happy coding!
到此這篇關(guān)于Rust 中的 Packages 與 Crates:模塊化構(gòu)建的基礎(chǔ)的文章就介紹到這了,更多相關(guān)Rust Packages 與 Crates內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Rust中三種循環(huán)(loop,while,for)的使用
我們常常需要重復(fù)執(zhí)行同一段代碼,針對(duì)這種場(chǎng)景,Rust?提供了多種循環(huán)(loop)工具。一個(gè)循環(huán)會(huì)執(zhí)行循環(huán)體中的代碼直到結(jié)尾,并緊接著回到開頭繼續(xù)執(zhí)行。而?Rust?提供了?3?種循環(huán):loop、while?和?for,下面逐一講解2022-09-09C和Java沒(méi)那么香了,Serverless時(shí)代Rust即將稱王?
Serverless Computing,即”無(wú)服務(wù)器計(jì)算”,其實(shí)這一概念在剛剛提出的時(shí)候并沒(méi)有獲得太多的關(guān)注,直到2014年AWS Lambda這一里程碑式的產(chǎn)品出現(xiàn)。Serverless算是正式走進(jìn)了云計(jì)算的舞臺(tái)2021-06-06詳解rust?自動(dòng)化測(cè)試、迭代器與閉包、智能指針、無(wú)畏并發(fā)
這篇文章主要介紹了rust?自動(dòng)化測(cè)試、迭代器與閉包、智能指針、無(wú)畏并發(fā),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11在Rust應(yīng)用中訪問(wèn).ini格式的配置文件方式
Rust應(yīng)用中訪問(wèn).ini格式的配置文件,可以使用ini或config庫(kù),以ini庫(kù)為例,在Cargo.toml中添加依賴,然后在代碼中讀取和解析ini文件,確保配置文件路徑正確,使用section和get方法訪問(wèn)配置值2025-02-02