有問有答之 crate 是什麼

AllenXu9527發表於2020-05-09

文章儘量以一個初學者的角度開始 Rust 的學習,但顯然很難不帶個人主觀色彩和角度,只能盡力去客觀寫。

第一次知道 Rust 的時候,免不了搜尋,百度、谷歌、必應等都可以搜出來官網地址:Rust Programming Language 。首頁看到一個字眼 crate,於我而言是陌生的。

In 2018, the Rust community decided to improve programming experience for a few distinct domains (see the 2018 roadmap). For these, you can find many high-quality crates and some awesome guides on how to get started.

crate 是什麼?

crate 類似於 .NET class library,因為我對 .Net 更熟悉,所以會拿 .Net 做比對,類比是學習的好方式。

但是顯然不能真的認為它們非常相似,並且試圖尋找它們的相同點,做比對是為了幫助理解。

.Net 引用類庫的關鍵字是 using,Rust 引用 crate 的關鍵字是 use。

.Net 宣告名稱空間關鍵字是 namespace,Rust 宣告 module 的關鍵字是 mod。

C# 對型別和型別成員規定了幾種可訪問性級別,同樣 Rust 也有訪問性級別規定。mod 中的方法,預設私有訪問,同 mod 下可訪問,外部訪問該模組的方法的話,需使用關鍵字 pub 定義該方法。我想關鍵字 pub,可類比 C# 的 public 修飾符。當然二者絕對不可等同。 pub 可用於載入深層目錄下的模組 - pub mod 或者 pub use ^1

.Net 專案中新增一個 nuget package,需要一個程式包源,地址是 api.nuget.org/v3/index.json 。如果想線上瀏覽檢視有多少種或者有哪些包,可訪問 NuGet Gallery | Packages 。Rust 也有類似的地址,可以檢視有哪些 crate 可供選擇,可訪問 Crates - crates.io: Rust Package Registry

最後還是要給出一個定義,回答 crate 是什麼這個問題。

Rust 中,crate 是一個獨立的可編譯單元。具體說來,就是一個或一批檔案(如果是一批檔案,那麼有一個檔案是這個 crate 的入口)。它編譯後,會對應著生成一個可執行檔案或一個庫。

各位看官或許會覺得奇怪,上面的一堆比對又是為了什麼呢?是為了通過比對加深理解和記憶,將不熟悉的概念和知識內化為自己的知識,通過熟悉的知識作為橋接,使其易於自己接受。

同時在不斷引申和解讀的過程,也會不斷的產生問題,例如為什麼有關鍵字 use mod pub ,它們的出現是為了解決什麼問題,這些關鍵字有沒有更多的使用場景,顯然我在上文中並沒有展開寫;還有如何生成一個 crate,並將其上傳到 crates.io。

所以有問有答的學習方式,似乎是真的非常適合我。我會盡量保持這種不斷挖掘好奇心的方式。

參考:

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章