January 2022
Intermediate to advanced
680 pages
11h 35m
Japanese
cento(「パッチワーク」を意味するラテン語由来)は、他の詩作者の作品からの引用だけで構成される詩である。
−Matt Madden†1
[†1] 訳注:米国の漫画家、作家。この文章は、『99 Ways to Tell a Story: Exercises in Style』からの引用。
Rustはマクロ(macro)機能をサポートしている。関数だけではできないような言語拡張が、マクロでなら実現できる。例えば既に紹介した、テストに便利なassert_eq!は、マクロで実現されている。
assert_eq!(gcd(6, 10), 2);
このようなことはジェネリック関数で書けなくはないが、assert_eq!マクロには、関数では決して実現できない機能がいくつかある。その1つは、アサーションが失敗した際に、ファイル名と行番号を含んだエラーメッセージを出力することだ。関数で、この種の情報を得ることはできない。マクロでこれができるのは、関数とマクロでは動作機構がまったく異なるからだ。
マクロはある種の短縮記法だ。コンパイルの際に、型チェックより前に、そして機械コードの生成よりもずっと前の段階で、マクロ呼び出しは展開される。すなわち、何らかのRustコードに置き換えられる。上のマクロを展開するとおおよそ下のようになる。
match (&gcd(6, 10), &2) { (left_val, right_val) => { if !(*left_val == *right_val) { panic!("assertion failed: `(left == right)`, \ (left: `{:?}`, right: `{:?}`)", left_val, right_val); ...Read now
Unlock full access