iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 27
0
自我挑戰組

WebAssembly + Rust 的前端應用系列 第 27

[Day 27] Rust Packages and Crates (實作 Actix 後的說明以及補充 PART2)

  • 分享至 

  • xImage
  •  

各位好,今天要延續專案的說明以及補充,以下是預計會說明的主題。

  • Struct
  • Managing Growing Projects with Packages, Crates, and Modules
  • Storing Lists of Values with Vectors
  • Advanced Types
  • Macros

上一篇我們已經認識了 Struct 今天我們要再來重新認識一下程式碼的引用、輸出到底是怎麼運作的。

初步認識 module system

之前寫了很多的程式並且可以在不同的檔案呼叫或是使用,首先我們先來看一下有幾種方式可以來管理我們的 module

  • Packages: A Cargo feature that lets you build, test, and share crates
  • Crates: A tree of modules that produces a library or executable
  • Modules and use: Let you control the organization, scope, and privacy of paths
  • Paths: A way of naming an item, such as a struct, function, or module

Packages

還記得 Cargo.toml 裡面的 dependencies 嗎?而 packages 就是 cargo 所提供的功能讓我們可以建立、測試、分享 crates。

[dependencies]

rand = "0.3.14"

Crates

Modules 的集合就成為了 Crates

Modules

可以組織管理 scope 還有 private 的 paths

Paths

最小的單位像是 Struct、function、module

Packages and Crates

Crate 是 binary 或是 library,而一個 package 可以同時有很多的 binary crate 但是最多只能有一個 library crate。

以下是使用 cargo new 的指令所建立出來的架構,

$ cargo new my-project
     Created binary (application) `my-project` package
$ ls my-project
Cargo.toml
src
$ ls my-project/src
main.rs

main.rs 就是預設的進入點也就是這個 package 的 binary crate 的 root,同樣若是有偵測到 src/lib.rs 則就會是這個 package 的 library crate 的 root。

而若是有多個 binary 檔案我們可以放在 src/bin 裡面也就是之前在寫Diesel 的 tutorial時的做法。

因此一個 package 可以把他裡面所有的 crates 和其他東西都打包起來給別的 package 使用例如我們第一個在 cargo.toml 裡面加的 rand 依賴,

[dependencies]

rand = "0.3.14"

總結

今天先介紹了 packages 和 crates 彼此的關係還有專案的一些基本架構也釐清了,這樣對照之前所做的又更清楚的理解了,那麼我們下一篇 modules 會繼續把這個主題講完。

那就明天見!

最後一樣有問題歡迎發問

/images/emoticon/emoticon07.gif

參考網址

ch07-00-managing-growing-projects-with-packages-crates-and-modules

ch07-01-packages-and-crates


上一篇
[Day 26] Rust Packages and Crates (實作 Actix 後的說明以及補充 PART1)
下一篇
[Day 28] Rust Modules (實作 Actix 後的說明以及補充 PART3)
系列文
WebAssembly + Rust 的前端應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言