피드로 돌아가기
Hacker NewsInfrastructure
원문 읽기
Async Rust State Machine 최적화를 통한 바이너리 크기 5% 절감
Async Rust never left the MVP state
AI 요약
Context
Rust의 async 구현체는 MIR 단계에서 State Machine으로 변환되며 불필요한 상태 필드를 생성함. 특히 리소스 제약이 심한 Embedded 환경에서 이러한 Bloat 현상이 Zero-cost Abstraction 원칙을 저해하는 병목 지점으로 작용함.
Technical Solution
- Returned 상태의 Panic 처리 로직을 Poll::Pending 반환으로 대체하여 런타임 오버헤드 제거
- await 키워드가 없는 async 블록에 대해 State Machine 생성을 생략하고 즉시 Ready를 반환하는 최적화 적용
- 동일한 코드 경로와 상태를 가진 Future들을 하나의 상태로 통합하는 Collapse pass 도입
- 단일 await를 가진 Future에 대한 Inlining을 통해 상태 전이 단계 축소
- Release 빌드와 Debug 빌드 간의 Panic 전략을 분리하여 안전성과 바이너리 크기를 동시에 확보하는 스위치 구조 제안
실천 포인트
- Embedded 환경에서 Async Rust 도입 시 바이너리 크기 Bloat 발생 여부 검토 - Future의 상태 전이 구조를 파악하기 위해 컴파일러의 MIR dump 및 CoroutineLayout 분석 활용 - 불필요한 State Machine 생성을 방지하기 위해 await가 없는 async 블록의 사용 최소화