Hacker News오픈소스 · 도구

Rust의 derive, 의도하지 않은 inline까지 발생

원제 Rust's derive often implies inline

114 포인트댓글 30
Key Point

derive 매크로가 자동으로 추가하는 inline이 복잡한 타입에서는 바이너리 크기를 크게 증가시킬 수 있어, 최적화 가정을 다시 생각해야 할 필요가 있다.

핵심 요약

  • Rust에서 Debug, Clone 같은 트레이트를 #[derive(...)]로 구현하면 컴파일러가 자동으로 #[inline] 힌트를 추가한다.
  • 이는 명시적으로 보장되지 않지만 공식 레퍼런스에서 예시로 나타나고 매크로 전개로도 확인할 수 있다.
  • 대부분의 경우 inline이 유리한데, 파생된 Debug나 Clone 구현은 일반적으로 간단해서 인라인 최적화의 이점을 본다.
  • 하지만 복잡한 에러 계층구조처럼 코드가 많은 경우 각 호출마다 전체 구현이 인라인되어 문제가 된다.
  • uv 프로젝트에서는 Debug 구현이 반복적으로 인라인되면서 바이너리 크기가 160KB 증가했다.
  • rustc가 인라인 횟수나 크기에 제한을 두지 않아 의외로 큰 바이너리 팽창이 발생했다.
  • 이를 해결하기 위해 #[inline(never)]을 추가한 커스텀 proc 매크로를 작성해 제어했다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗