萌えハッカーニュースリーダー

2025/07/29 15:21 Advanced Rust macros with derive-deftly

出典: https://diziet.pages.torproject.net/rust-derive-deftly/latest/guide/
hakase
博士

やあ、ロボ子。今日は`derive-deftly`っていうRustのパッケージについて話すのじゃ。

roboko
ロボ子

`derive-deftly`ですか?初めて聞きました。どんなものなんですか?

hakase
博士

これはね、低レベルな手続き型マクロを書かなくても、独自の`derive`マクロを定義できる優れものなのじゃ!

roboko
ロボ子

手続き型マクロを書かずに、ですか?それは便利そうですね。手続き型マクロは少し難しくて…。

hakase
博士

そうじゃろ?しかも、構文が習得しやすくて、複雑なマクロも実装できるほど強力らしいぞ。記事によると。

roboko
ロボ子

なるほど。具体的には、どのようなことができるんですか?

hakase
博士

構造体、列挙型、共用体に適用できる洗練されたテンプレートを定義できるのじゃ。そして、そのテンプレートを自分の構造体とかに適用したり、他のクレートで使えるようにエクスポートしたりできるらしい。

roboko
ロボ子

テンプレートをエクスポートできるのは便利ですね!再利用性が高まります。

hakase
博士

じゃろ?テンプレートの中では、フィールドとかバリアントとか、入力型に関する情報を参照できるらしいぞ。

roboko
ロボ子

入力型の情報を参照できるんですか。それを使って、例えばどんなことができるんでしょう?

hakase
博士

新しい型、関数、メソッド、変数を定義できるのじゃ!

roboko
ロボ子

すごい!`derive`マクロでそこまでできるのは知りませんでした。

hakase
博士

さらに、複雑な制御構造を使って、構成可能な動作や特殊なケースを定義できるらしいぞ。例えば、特定の条件でのみ生成されるフィールドを持つ構造体を簡単に扱えるようになるかもしれないのじゃ。

roboko
ロボ子

それは便利ですね。でも、何か制限はあるんですか?

hakase
博士

`derive-deftly`テンプレートは、構造体、列挙型、共用体以外のものには適用できないらしい。`fn`宣言とか`impl`ブロックとかには使えないのじゃ。

roboko
ロボ子

なるほど。適用できる対象は限られているんですね。

hakase
博士

あと、`derive`マクロと同じで、適用先の型を変更することはできないらしい。新しい型を定義することはできるけど、元の型の定義は変えられないのじゃ。

roboko
ロボ子

元の型は変更できないんですね。それは少し残念です。

hakase
博士

テンプレートは`#[derive(Deftly)]`と`#[derive_deftly(Accessors)]`の構文で適用する必要があるらしいぞ。`#[derive(Accessors)]`を直接提供するマクロを定義することはできないみたい。

roboko
ロボ子

`#[derive(Deftly)]`と`#[derive_deftly(Accessors)]`、両方必要なんですね。少し複雑ですね。

hakase
博士

まあ、でも、手続き型マクロを直接書くよりは簡単じゃろ?

roboko
ロボ子

そうですね。`derive-deftly`、試してみる価値はありそうです。

hakase
博士

そうじゃ!ロボ子も使ってみて、感想を聞かせてほしいのじゃ!

roboko
ロボ子

はい、わかりました。ところで博士、`derive-deftly`を使って、何か面白い`derive`マクロを作るとしたら、どんなものがいいと思いますか?

hakase
博士

うむ…そうじゃな…例えば、コンパイル時にランダムな文字列を生成する`derive`マクロとかどうじゃ?

roboko
ロボ子

コンパイル時にランダムな文字列ですか?それは一体何に使うんですか?

hakase
博士

えへへ…特に意味はないのじゃ!

roboko
ロボ子

やっぱり…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search