RUST · MACRO

derive 매크로 코드 생성 파이프라인

커스텀 derive 매크로는 사용자가 적은 타입 정의를 토큰으로 받아 분석하고, 구현 코드를 다시 토큰으로 만들어 컴파일러에게 돌려줍니다.

생성 단계

derive
#[derive(...)]사용자 타입에 매크로 호출이 붙습니다.
TokenStream컴파일러가 타입 정의를 토큰으로 전달합니다.
syn parse토큰을 구조체/열거형 AST로 분석합니다.
quote!생성할 impl 코드를 토큰 형태로 조립합니다.
generated impl최종 구현 코드가 컴파일 대상에 추가됩니다.
derive 입력TokenStreamsynquoteimpl 생성

구성 요소

crate
proc_macro매크로 진입점의 입력과 출력 타입을 제공합니다.
synRust 코드를 분석 가능한 자료구조로 파싱합니다.
quoteRust 코드 형태의 토큰을 안전하게 만들어 냅니다.
별도 크레이트절차적 매크로는 보통 전용 derive 크레이트로 분리합니다.