<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Rust:你知道 Packages 和 Crates 的區(qū)別嗎?

          共 1498字,需瀏覽 3分鐘

           ·

          2021-12-22 18:04

          很多語言有 Package 的概念,Rust 也有,但除了 Package,Rust 中更常見的是 Crate。那你清楚這兩個有什么不一樣嗎?今天搞清楚這個問題。

          一個常見的誤解是 packages 和 crates 是一樣的。對初學(xué) Rust 而言,這確實挺困擾。不過,了解其中的區(qū)別很重要,否則你將無法理解 Rust 代碼是如何組織、共享和使用的。

          Crate

          一個 crate,類似 crate 中的模塊,是一種代碼組織的方式。

          一個 crate,可以是一個二進制(可執(zhí)行)或庫。

          一個 crate 不會獨立發(fā)布,而是作為 package 的成員發(fā)布的。

          編譯器知道 crate 是什么,并使用 create 作為項目的命名空間。如果不在作用域內(nèi),你可以通過類似這樣的調(diào)用 std::hash::Hash 定義自己的 trait。

          Package

          一個 package 是至少一個 crate 的包裝器。

          package 是可發(fā)布的。

          一個 package 可以包含 0 或 1 個庫 create。

          一個 package 可以包含任意數(shù)量的二進制 create。

          將 package 加入依賴時,意味著使用 package 中的一個 create。

          當(dāng)你使用 cargo run 或 cargo install 而指定具體的 crate 時,意味著執(zhí)行 package 中的一個二進制 crate。

          當(dāng) cargo run --bincargo install --bin 后跟一個 crate 名稱時,意味著使用 package 中這個特定的 crate。

          為什么大家會混淆?

          通過上面的介紹,不知道大家清楚兩者的區(qū)別沒?

          之所以很多人容易混淆,我覺得主要是因為 crates.io 導(dǎo)致的。雖然叫做 crates.io,實際上它是 packages 的倉庫。你通過 crates.io 找到了某個庫,會將 package 加入 Cargo.toml 依賴中,你不需要指定具體的 crate,因為 package 只能有一個庫 crate。如果倉庫地址叫做:packages.io,可能就不會有那么多的混淆了。(我猜應(yīng)該 packages.io 被人注冊了?或者 Rust 對 crate 這個名字情有獨鐘。顯然,在 Rust 中,crate 的概念比 package 更重要)

          一句話:一個 package 會包含有一個 Cargo.toml 文件,闡述如何去構(gòu)建這些 crate。

          關(guān)于兩者的區(qū)別,官方的圖書也有介紹,這是中文版:https://kaisery.github.io/trpl-zh-cn/ch07-01-packages-and-crates.html。

          參考

          • https://jeffa.io/rust_packages_vs_crates



          往期推薦


          我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗!2012 年接觸 Go 語言并創(chuàng)建了 Go 語言中文網(wǎng)!著有《Go語言編程之旅》、開源圖書《Go語言標(biāo)準(zhǔn)庫》等。


          堅持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長!也歡迎加我微信好友交流:gopherstudio


          瀏覽 94
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩无码视频一区 | 99高清无码 | 哪里可以看日本黄色电影 | 婷婷色无码 | 成人性爱免费在线观看 |