[Rust] 매크로

0xDave·2022년 7월 25일
0

Rust

목록 보기
16/16

(수정중)

매크로란?


Rust에서 매크로는 다른 코드를 작성할 수 있게 하는 코드를 말한다. 함수랑은 다르게 뒤에 !를 붙인다.

다른 점이 이것밖에 없나?


종류


  1. Declarative macros
    인자를 받아서 코드를 작성하는 매크로. macro_rules! 라는 매크로로 만들어진다.(매크로를 통해 매크로를 만든다..)패턴 일치에서 나오는 match랑 비슷하다. 대표적인 예로 println! 이 있다.
  2. Procedural macros
    AST위에서 동작하는 매크로. ???

AST, 다른말로 "Abstract Syntax Tree" 혹는 "Syntax Tree" 라고 불리는 이 Tree는 프로그래밍 언어로 쓰여진 소스코드의 abstract syntactic 구조를 표현하기 위해서 사용됩니다. 쉽게 말하자면 특정 프로그래밍 언어로 작성된 프로그램 소스 코드를 각각 의미별로 분리하여 컴퓨터가 이해할 수 있는 구조로 변경시킨 트리를 의미합니다.
출처: https://code-giraffe.tistory.com/44 [기린의 공부 블로그:티스토리]


예시 코드


1. Declarative macros

1번예제

// macro_rules!를 통해 매크로 선언
macro_rules! add{
 // 소괄호로 인자를 받는다
    ($a:expr,$b:expr)=>{

		{
           println!("{}", $a+$b);
        }
    }
}

fn main(){
 // 마지막에 느낌표를 사용한다
    add!(1,2);
}

2번예제

macro_rules! add_as{
// using a ty token type for macthing datatypes passed to maccro
    ($a:expr,$b:expr,$typ:ty)=>{
        $a as $typ + $b as $typ
    }
}

fn main(){
    println!("{}",add_as!(0,2,u8));
}

expr 대신 사용할 수 있는 것들

참고자료 및 출처


  1. Macros in Rust: A tutorial with examples
  2. https://code-giraffe.tistory.com/44
  3. https://rinthel.github.io/rust-lang-book-ko/appendix-04-macros.html
profile
Just BUIDL :)

1개의 댓글

comment-user-thumbnail
2023년 1월 15일
답글 달기