Documentation
https://doc.rust-lang.org/book/documentation.html
ソースコードに特殊なコメントを記載しておくと、ツールでドキュメント生成出来る。Java
のjavadoc
や、Python
等々サポートしている言語は多々ある有りますね。出自はクヌース先生の文芸的プログラミングですかね。
Conditional Compilation
https://doc.rust-lang.org/book/conditional-compilation.html
#[cfg]
にて色々設定できる。C言語でいう#if
、#ifdef
みたいなもののようです。
Testing
https://doc.rust-lang.org/book/testing.html
テストの実施環境について。言語に標準でテストの仕組みが含んでいたり、ドキュメントに記載されている。これだけでも今どきの言語だという感じがします。
テストの実施方法はドキュメントを読んだ限りではシンプル。assert_eq!
以外にもテスト用のマクロがあると思うので、実用となると色々と大変になるのでしょうが。
The Stack and the Heap
https://doc.rust-lang.org/book/the-stack-and-the-heap.html
スタックとヒープについて。 変数宣言でスタックが積み上がっていくなど、目新しいところはなさそう。
Unsafe
[https://doc.rust-lang.org/book/unsafe.html
危ない操作をどうしても行いたい時はunsafe
を使う。unsafe
を使わざるを得ない事は少ないようだ。
Raw Pointers
https://doc.rust-lang.org/book/raw-pointers.html
単に*
で宣言したポインタは安全ではない(何も指し示していないかもしれない)ので、unsafe
内で展開して使用する。
fn main() { let x = 5; let raw = &x as *const i32; // println!("raw points at {}", *raw); let points_at = unsafe { *raw }; println!("raw points at {}", points_at); let mut y = 10; let raw_mut = &mut y as *mut i32; // println!("raw points at {}", *raw_mut); let points_at = unsafe { *raw_mut }; println!("raw points at {}", points_at); // Explicit cast: let i: u32 = 1; let p_imm: *const u32 = &i as *const u32; // Implicit coercion: let mut m: u32 = 2; let p_mut: *mut u32 = &mut m; unsafe { let ref_imm: &u32 = &*p_imm; let ref_mut: &mut u32 = &mut *p_mut; } }
Macros #2
https://doc.rust-lang.org/book/macros.html
再帰的にマクロを使ったり、マクロは奥が深そう。 章の量も他の章と比べ、明らかに多い。
unreachable!
が面白い。デバッグ等で活躍しそう。
if false { unreachable!(); }