도메인 특화 언어 (DSL)

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩에서는 Rust 매크로에 내장된 미니 "언어"인 Rust 의 도메인 특화 언어 (DSL, Domain Specific Languages) 개념을 탐구합니다. 이러한 매크로는 일반적인 Rust 구조로 확장되지만 특정 기능에 대한 간결하고 직관적인 구문을 제공합니다. 실용적인 예시로 계산기 API 를 사용하여 표현식을 매크로에 제공하고 출력을 콘솔에 출력하는 방법을 보여줍니다. 이를 통해 lazy_static 또는 clap과 같은 라이브러리에서 볼 수 있는 것과 같은 더 복잡한 인터페이스를 만들 수 있습니다.

참고: 랩에서 파일 이름을 지정하지 않은 경우 원하는 파일 이름을 사용할 수 있습니다. 예를 들어 main.rs를 사용하고 rustc main.rs && ./main으로 컴파일하고 실행할 수 있습니다.

도메인 특화 언어 (DSL, Domain Specific Languages)

DSL 은 Rust 매크로에 내장된 미니 "언어"입니다. 매크로 시스템이 일반적인 Rust 구조로 확장되기 때문에 완전히 유효한 Rust 코드이며, 작은 언어처럼 보입니다. 이를 통해 (제한 내에서) 특정 기능에 대한 간결하거나 직관적인 구문을 정의할 수 있습니다.

작은 계산기 API 를 정의하고 싶다고 가정해 보겠습니다. 표현식을 제공하고 출력을 콘솔에 출력하고 싶습니다.

macro_rules! calculate {
    (eval $e:expr) => {
        {
            let val: usize = $e; // Force types to be integers
            println!("{} = {}", stringify!{$e}, val);
        }
    };
}

fn main() {
    calculate! {
        eval 1 + 2 // hehehe `eval` is _not_ a Rust keyword!
    }

    calculate! {
        eval (1 + 2) * (3 / 4)
    }
}

출력:

1 + 2 = 3
(1 + 2) * (3 / 4) = 0

이것은 매우 간단한 예시였습니다.

또한 매크로에서 두 쌍의 중괄호를 확인하십시오. 외부 중괄호는 macro_rules! 구문의 일부이며, () 또는 [] 외에도 사용됩니다.

요약

축하합니다! 도메인 특화 언어 (DSL, Domain Specific Languages) 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.