RUST · MACROS

토큰을 코드로 바꾸는 두 경로

선언적 매크로는 패턴으로 치환하고, 절차적 매크로는 토큰 스트림을 받아 러스트 코드로 분석하고 생성합니다.

compile time
macro_rules!

선언적 매크로

호출 토큰이 정의된 패턴과 맞으면, 캡처한 조각을 반복과 치환 규칙에 따라 코드로 펼칩니다.

패턴 매칭$( $x:expr ),* 같은 규칙으로 입력을 잡습니다.
반복 확장잡힌 표현식을 원하는 코드 템플릿 안에 배치합니다.
타입 검사확장된 코드가 평범한 러스트 코드처럼 검사됩니다.
proc_macro

절차적 매크로

컴파일러가 넘긴 TokenStream을 함수가 분석하고, 새 TokenStream을 반환합니다.

derive구조체나 열거형에 구현 코드를 자동으로 붙입니다.
attribute아이템에 붙은 속성과 본문을 함께 변환합니다.
function-like함수 호출처럼 보이지만 임의 문법을 파싱할 수 있습니다.