파싱 및 확장 (Parsing & Expansion): 코드를 토큰화하고 매크로를 인라인으로 확장하며, 코드 구조와 의미를 반영하는 추상 구문 트리(AST)를 생성하는 초기 단계입니다. 🌳
고수준 중간 표현 (HIR - High-level Intermediate Representation): Rust 코드를 단순화하고 문법적 설탕을 제거하여 컴파일러가 쉽게 이해할 수 있도록 명시적으로 만듭니다. 이 단계에서 타입 검사, 소유권 규칙 등 코드의 정확성을 보장합니다. 🍬
중간 수준 중간 표현 (MIR - Mid-level Intermediate Representation): Rust 코드보다는 작업 흐름도에 가까운 모호하지 않은 작업 목록으로 코드를 변환합니다. 컴파일러가 빌림(borrowing)을 확인하고 메모리 안전성을 보장하며 프로그램을 최적화합니다. 📊
LLVM 중간 표현 (LLVM IR - Low-level Virtual Machine Intermediate Representation): 코드를 저수준의 플랫폼 독립적인 명령어 세트로 번역하며, 추가 최적화 및 기계어 코드 변환을 위한 준비를 합니다. 🤖
어셈블리 코드 (Assembly Code): LLVM IR로부터 생성되며, 특정 플랫폼의 기계어 명령(메모리 및 레지스터 처리)을 포함합니다. 🛠️
nightly 툴체인과 특정 rustc 플래그(-Zunstable-options, --pretty expanded, --emit=hir, --emit=mir, --emit=llvm-ir, --emit=asm)를 사용하여 각 컴파일 단계를 시각화할 수 있습니다. 🔬
각 단계는 코드를 추상화에서 벗어나 기계가 이해할 수 있는 형식으로 점진적으로 변환하는 과정을 보여줍니다. 🚀