Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rustの手続きマクロで黒魔術入門
Search
lemolatoon
March 11, 2023
Programming
2
870
Rustの手続きマクロで黒魔術入門
Rustの手続きマクロについて紹介します。そして、自作関数手続きマクロである direct_c_lang についても紹介します。
lemolatoon
March 11, 2023
Tweet
Share
More Decks by lemolatoon
See All by lemolatoon
【Rust × C++】 夢の共演を試した話
lemolatoon
1
1.4k
no_stdでもasyncしたい
lemolatoon
0
220
AI系サービスに代表されるAPIについて
lemolatoon
0
58
Other Decks in Programming
See All in Programming
SIMD Parallel Programming with the Vector API
josepaumard
0
110
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
Milestoner
bkuhlmann
1
410
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
200
Goのエラースタックトレースの歴史と今後
sonatard
7
1.1k
ONE WEDGE_company_guide
1wedge_one
0
460
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.3k
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
120
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
110
Fragment Composition of GraphQL
quramy
3
440
Site Reliability Engineering for GMO
pyama86
7
1k
Rethinking UI building strategies @ SFI 2024
letelete
0
270
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
42
12k
BBQ
matthewcrist
80
8.8k
[RailsConf 2023] Rails as a piece of cake
palkan
23
3.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
25
2.3k
Documentation Writing (for coders)
carmenintech
60
3.9k
GraphQLの誤解/rethinking-graphql
sonatard
50
9.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
116
18k
Facilitating Awesome Meetings
lara
42
5.6k
The Mythical Team-Month
searls
216
42k
The Cult of Friendly URLs
andyhume
74
5.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
14
1.5k
We Have a Design System, Now What?
morganepeng
43
6.7k
Transcript
Rustの手続きマクロで黒魔術入門 lemolatoon
自己紹介 慶應義塾大学 理工学部1年 セキュリティ・キャンプ2022 Cコンパイラゼミ修了生 Twitter (@lemolatoon1)
(このスライドは上記アカウントでツイートしています) 2
“Rustの手続きマクロ”って? Rustを書くときによく見る手続きマクロの例 1) deriveマクロ 2) attributeマクロ 3 ソースコードを受け取って、ソースコードを返すようなプログラミング言語Rustの特殊な関数
3) 関数マクロ
自由度の高い関数手続きマクロ 4 * カッコの対応などは入力時点で正しい必要がある 関数手続きマクロは正しいRustのコードを出力すれば、 どんな入力*でも受け付ける。
自作関数手続きマクロ direct_c_lang の紹介 5 https://github.com/lemolatoon/direct_c_lang_rs.git C言語のコードを受け取り、Rustから呼べるインターフェースを提供する。 (下記は実際に使っている例 ) Rust側からマクロ内で定義されたC言語
で書かれた関数を呼び出している。 (4~10行) C言語のソースコードをマクロに渡し ている。 (12~25行)
自作関数手続きマクロ direct_c_lang の紹介(マクロの展開) 6 ◼マクロの入力を global_asmマクロ+C言語側の関数 の宣言へ変換 ◼マクロ内部で自作Cコンパイラを使っている ◼マクロ展開前 ◼マクロ展開後
実際の手続きマクロの中身 7 * https://github.com/lemolatoon/direct_c_lang_rs.git マクロの変換前から、マクロの変換後の処理自体をRustでかける。 中略(Cの関数をRustの宣言に変換) マクロの入力として与えられ たC言語のソースコードを アセンブリに変換
マクロの出力(展開先)を関 数の戻り値として返す
まとめ Rustの手続きマクロは自由度が高い上に、マクロ処理自体をRustでかけるため、 C/C++のような複雑性が生じにくい 自由度を生かして自分の独自のマクロを作ると楽しい 「書けばいいことは明確になったけど、これ全部手で書かなきゃいけないのか ……」といったときに便利 8
ありがとうございました 9