こちらの記事は Rustマクロ冬期講習アドベントカレンダー 16日目の記事です!
関数風マクロはRustの手続きマクロの一種です。では作っていきます。
最小構成の関数風マクロ
ライブラリクレートを作成します。
cargo new --lib func_like_macro
cd func_like_macro
Cargo.toml
を書き換えます。
Cargo.toml
[package]
name = "func_like_macro"
version = "0.1.0"
edition = "2021"
+[lib]
+proc-macro = true
[dependencies]
src/lib.rs
を書き換えます。余計なクレート等入れるのは面倒なので入力をそのまま出力する関数風マクロにします。
src/lib.rs
use proc_macro::TokenStream as S;
#[proc_macro]
pub fn m(t: S) -> S {
t
}
動作確認します。
src/main.rs
use func_like_macro::m;
fn main() {
m!(println!("Hello, world!"););
}
cargo run
無事にコンパイルまでされたところでタイマーストップ。
まとめ・所感
あ、時間測り忘れた...w
「ただの手抜き記事じゃないか」って...?そうですよ...!
でもミニマルな技術記事も需要ってありますよね...?というわけで同じ形式を属性風マクロとderiveマクロでもやります!