Rust 有問有答之 crate 是什麼

文章儘量以一個初學者的角度開始 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,需要一個程序包源,地址是 https://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。

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

參考:


  1. 具體使用方法不在本篇詳細敘述 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章