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);
}
おわりに
テストコードを書くのに、引数の参照ってどうやるんだったっけ、とか、文字列はどうなんだっけ、とかいちいち調べ直していた。
まだまだ身についてないねー。
writer: hiro99ma