20250823152929 アトリビュートって何?
#[derive(Debug)]みたいな、 # で始まるやつは何?
-
自動でトレイトを追加する時に使う
#[derive(Copy)]など -
linterに対してannotationとして使う
#[allow(dead_code)]など -
C/C++の
#pragma pack()的な構造体のアラインメント指定などに使う cf. 代替メモリレイアウト -
C/C++の
#ifdef _WIN32みたいに環境による切り変えに使える#[cfg(target_os = "linux")]など。 -
#ifdef DEBUGみたいなことはできるのか?- できる。
- attribute なら
#[cfg(debug_assertions)] - マクロもある
if cfg!(debug_assertions) - Conditional compilation - The Rust Reference
- attribute なら
- できる。
-
#pragmaっぽく、関数ごとに最適化ができるのか? 無い。 20250819 現在、RFCは作られているが、experimental。 Tracking issue for RFC 2412, “The optimize attribute” · Issue #54882 · rust-lang/rust あまり困っていないということなのだろうか? -
attributeは自分で作ることはできるのか?
- できるっぽい。 procedural macroというものを使って実装。 cf. Rustのcustom attributeチュートリアル - Qiita
-
標準ライブラリを見にいくと
#[stable(feature = "rust1", since = "1.0.0")]とか色々ある