rust: Rustがんばろう 7日目
2025/02/17
はじめに
Rust を勉強することにした。
7.1~7.3章くらい。
package / crate
パッケージはよく聞くがクレートは Rust で聞いたのが初めてだ。
木箱とか木枠とか、そんな言葉だ。
ツリー構造のモジュール群という”木”つながりでそうなったのかな?
“creat” で O_CREAT
が由来した言葉では、と思っていたのだが綴りが違った。
cargo new <名前>
はバイナリ(--bin
)やライブラリ(--lib
)のターゲットを作る- クレートはバイナリかライブラリと書いてあるのでクレートの新規作成かと思ったがヘルプの説明だとパッケージの新規作成だった
- パッケージは 1つ以上のクレートを持つ
- 0 or 1つのライブラリクレートを持つ
- バイナリクレートはいくつでもよい
- パッケージは 1つ以上のクレートを持つ
- パッケージは
Cargo.toml
を持つ
- クレートはバイナリかライブラリと書いてあるのでクレートの新規作成かと思ったがヘルプの説明だとパッケージの新規作成だった
- crate root
- コンパイルの開始点
- 実行の開始点ではないのでエントリーポイントのことではなさそうだ
- クレートのルートモジュールを作るソースコード
src/main.rs
はバイナリクレートのクレートルートsrc/lib.rs
はライブラリクレートのクレートルート
- コンパイルの開始点
- モジュールの宣言は
mod
で始まるmod
は入れ子にできる- C++ の
namespace
くらいの気持ちで良いのか? - クレートルートは
crate
というモジュール名だそうだ- なので
crate
を根っこ(root)にしてmod
がツリー構造になる
- なので
- 名前解決?のパス指定はモジュール名を
::
でつなげていくcrate::
で始まる場合は「絶対パス」- それ以外は「相対パス」
super
で 1つ上のパスにできる
super
で下のモジュール内の関数から上のモジュールにある関数は pub
が無くても呼び出せるようだ。
もし pub
がないと呼び出せないのだったら何でもかんでも pub
が付いて意味が無くなるということかな。
あくまで pub
は外側から守るためのもの、ということと考えることにした。
mod abc {
fn hello(label: &str, value: &i32) {
super::hello(label, value);
}
pub mod def {
pub fn hello(label: &str, value: &i32) {
super::hello(label, value);
}
}
}
fn hello(label: &str, value: &i32) {
println!("{}: {}", label, value);
}
fn main() {
let m = 10;
abc::def::hello("m", &m);
}
おわりに
テストコードを書くのに、引数の参照ってどうやるんだったっけ、とか、文字列はどうなんだっけ、とかいちいち調べ直していた。
まだまだ身についてないねー。