Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

부록 E: 에디션

1장에서 cargo newCargo.toml 파일에 에디션 관련 메타데이터를 조금 추가하는 것을 보았습니다. 이 부록에서는 그 의미를 설명합니다.

러스트 언어와 컴파일러는 6주 릴리스 주기를 가집니다. 즉, 사용자는 새 기능을 꾸준히 받게 됩니다. 다른 프로그래밍 언어는 더 큰 변화를 더 드물게 릴리스하는 경우가 많지만, 러스트는 더 작은 업데이트를 더 자주 릴리스합니다. 시간이 지나면 이런 작은 변화들이 쌓입니다. 그러나 릴리스와 릴리스 사이만 비교하면 “Rust 1.10에서 1.31 사이에 러스트가 정말 많이 변했구나!”라고 실감하기는 어렵습니다.

러스트 팀은 대략 3년마다 새로운 러스트 에디션 을 만듭니다. 각 에디션은 그동안 도입된 기능들을, 완전히 업데이트된 문서와 도구를 함께 갖춘 명확한 패키지로 묶어 제공합니다. 새 에디션 역시 평소의 6주 릴리스 과정의 일부로 배포됩니다.

에디션은 사람마다 다른 목적을 가집니다.

  • 활발히 러스트를 쓰는 사람에게는 점진적 변화들을 이해하기 쉬운 패키지로 묶어 줍니다.
  • 아직 러스트를 쓰지 않는 사람에게는 큰 진전이 있었다는 신호가 되어, 다시 한번 러스트를 살펴볼 이유가 될 수 있습니다.
  • 러스트를 개발하는 사람들에게는 프로젝트 전체의 결집점을 제공합니다.

이 글을 쓰는 시점에는 네 가지 러스트 에디션이 있습니다. Rust 2015, Rust 2018, Rust 2021, Rust 2024 입니다. 이 책은 Rust 2024 에디션 스타일을 기준으로 작성되었습니다.

Cargo.tomledition 키는 컴파일러가 여러분의 코드에 어떤 에디션을 적용해야 하는지를 나타냅니다. 이 키가 없으면 하위 호환성 때문에 러스트는 2015 를 에디션 값으로 사용합니다.

각 프로젝트는 기본값인 2015 에디션이 아닌 다른 에디션을 선택해 사용할 수 있습니다. 에디션에는 코드 안의 식별자와 충돌하는 새 키워드 추가처럼 호환되지 않는 변화가 들어갈 수 있습니다. 하지만 그런 변화를 직접 opt-in 하지 않는 한, 사용하는 러스트 컴파일러 버전을 올려도 여러분의 코드는 계속 컴파일됩니다.

모든 러스트 컴파일러 버전은 자신이 릴리스되기 이전에 존재하던 모든 에디션을 지원하며, 지원되는 어떤 에디션의 크레이트끼리도 함께 링크할 수 있습니다. 에디션 변화는 컴파일러가 코드를 처음 파싱하는 방식에만 영향을 줍니다. 따라서 여러분이 Rust 2015 를 쓰고 있고 의존성 하나가 Rust 2018 을 쓴다 해도 프로젝트는 컴파일되고 그 의존성을 사용할 수 있습니다. 반대로 프로젝트가 Rust 2018 을 쓰고 의존성이 Rust 2015 를 쓰는 경우도 마찬가지입니다.

분명히 해 두자면, 대부분의 기능은 모든 에디션에서 사용할 수 있습니다. 어떤 러스트 에디션을 사용하든 개발자는 새로운 안정 릴리스가 나올 때마다 계속 개선 사항을 누릴 수 있습니다. 다만 경우에 따라, 특히 새 키워드가 추가될 때는 일부 새 기능이 더 나중 에 나온 에디션에서만 제공될 수 있습니다. 그런 기능을 활용하고 싶다면 에디션을 전환해야 합니다.

더 자세한 내용은 The Rust Edition Guide 를 참고하세요. 이 문서는 에디션 사이의 차이를 정리하고, cargo fix 로 코드를 새 에디션으로 자동 업그레이드하는 방법까지 설명하는 완전한 책입니다.