G - 러스트가 만들어지는 과정과 ‘Nightly 러스트’
stable·beta·nightly 릴리스 채널과 기능 게이트·RFC 절차를 이해해 실험 기능과 안정 버전을 목적에 맞게 선택합니다.
이 부록은 러스트가 어떻게 만들어지는지와, 그것이 러스트 개발자인 여러분에게 어떤 영향을 주는지 이야기합니다.
부록 G - 러스트가 만들어지는 과정과 ‘Nightly 러스트’
정체되지 않는 안정성
언어로서 러스트는 코드의 안정성을 아주 중요하게 생각합니다. 러스트가 그 위에 무언가를 만들 수 있는 단단한 바탕이 되기를 바라는데, 무언가가 계속 바뀐다면 그럴 수 없을 것입니다. 동시에 새 기능을 실험할 수 없다면, 더는 무언가를 바꿀 수 없게 된 릴리스 뒤에야 중요한 결함을 발견할 수도 있습니다.
이 문제에 대한 러스트의 해결책은 정체되지 않는 안정성(stability without stagnation)이라고 부르는 것이며, 그 바탕의 원칙은 이렇습니다. 새 안정 버전의 러스트로 올리는 것을 결코 두려워하지 않아도 되어야 합니다. 업그레이드는 매번 아무 고통 없이 이루어져야 하며, 그러면서도 새 기능과 더 적은 버그, 더 빠른 컴파일 시간을 가져와야 합니다.
더 깊이: 안정성 약속에 남겨 둔 예외
새 안정 버전이 기존 코드를 깨뜨리지 않는다는 약속에도 정해진 예외가 있습니다. 언어의 버전 규칙을 정한 RFC 1122는 마이너 릴리스에 들어갈 수 있는 호환되지 않는 변경을 컴파일러의 버그나 타입 시스템의 문제를 고치는 것으로 제한합니다. 건전성(soundness)의 구멍을 막다 보면, 그 구멍에 우연히 기대던 코드가 컴파일되지 않을 수 있기 때문입니다. 명세가 덜 정해진 부분을 정하는 변경도 같은 방식으로 다루며, 타입 추론의 몇몇 세부 동작도 바뀔 수 있다고 적습니다.
대신 RFC는 그런 변경의 영향을 먼저 재도록 합니다. 첫 단계는 crater 같은 도구로 crates.io의 크레이트들에 미치는 영향을 평가하는 것이며, 영향을 받는 크레이트의 수를 전체 영향을 가늠하는 대략적인 지표로 봅니다. 영향이 크다면 정한 범위 안에서 새 규칙을 따르지 않게 하는 표시를 주는 것 같은 완화 방법을 함께 두도록 합니다. 그래서 안정 버전을 올린 뒤 오래된 코드가 컴파일되지 않는다면, 그 변경이 이런 수정에 해당하는지 릴리스 노트에서 먼저 확인해 봅니다.
칙칙폭폭! 릴리즈 채널과 기차 타기
러스트의 개발은 기차 일정(train schedule)에 따라 이루어집니다. 곧 모든 개발은 러스트 저장소의 main 브랜치에서 이루어집니다. 릴리스는 Cisco IOS와 다른 소프트웨어 프로젝트에서 써 온 소프트웨어 릴리스 기차 모델(train model)을 따릅니다. 러스트에는 세 개의 릴리스 채널이 있습니다.
| 채널 | 내용 |
|---|---|
| Nightly | main 브랜치에서 매일 만들어지는 판 |
| Beta | 6주마다 main에서 갈라져, 다음 안정 버전이 될 판 |
| Stable | 6주 동안 검증을 마친 beta가 올라온 안정 판 |
대부분의 러스트 개발자는 주로 안정(stable) 채널을 쓰지만, 실험적인 새 기능을 써 보고 싶은 사람은 nightly나 beta를 쓸 수 있습니다. 아래 그림은 이 세 채널이 6주 주기로 어떻게 맞물리는지 보여 줍니다.
Rust 릴리스 기차의 두 6주 구간
0/6/12주에 beta N이 stable N으로 승격되고 같은 시점 새 beta가 분기되는 실제 시간 모델이다. N의 추적과 새 N+1을 구분하고 매일 nightly snapshot·선별 backport·RFC 수락과 안정화의 차이를 보존한다.
Rust · release train · 6-week cadence
새 beta의 출발과 이전 beta의 stable 도착은 6주마다 겹친다
같은 폭은 같은 6주입니다. main의 일일 snapshot이 nightly가 되고, 6주마다 당시의 main에서 새 beta가 분기됩니다. 동시에 직전 beta는 검증을 마치고 stable로 승격됩니다.
beta N이 출발한다
현재 main에서 beta N을 분기합니다. 이전 구간에서 검증한 beta N−1은 stable N−1로 도착합니다.
N 도착과 N+1 출발
beta N은 stable N으로 승격되고, 같은 시점의 main에서 beta N+1이 분기됩니다.
N+1 도착과 N+2 출발
beta N+1이 stable N+1로 승격되고 당시 main에서 beta N+2가 새로 분기됩니다. 두 번째 구간도 6주입니다.
nightly는 계속 움직인다
main의 자동 snapshot이 매일 생성됩니다. beta에는 다음 stable에 꼭 필요한 수정만 선별해 백포트할 수 있습니다.
모든 변경이 RFC에서 시작하지는 않는다
중대한 설계 변경은 RFC를 거치는 경우가 많지만, 버그 수정, 문서 개선, 작은 구현 변경까지 모두 RFC가 필요한 것은 아닙니다.
RFC 수락과 stable 도착은 별개다
수락은 설계 방향의 합의입니다. 구현, nightly 기능 게이트 아래의 경험, 별도 안정화 판단이 뒤따라야 하며 구현이나 안정화가 보장되지는 않습니다.
릴리스 기차는 정해진 간격에 준비된 변경만 태웁니다. 준비되지 않은 기능을 마감에 맞춰 밀어 넣기보다 다음 6주 기회를 기다릴 수 있습니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 관계·조건 설명 | 0주 beta N은 6주 stable N으로, 6주 beta N+1은 12주 stable N+1로 승격된다. 각 시점의 main에서 새 beta가 분기되고 매일 nightly snapshot이 만들어진다. 필요한 수정만 기존 beta로 백포트한다. |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 0주 beta N과 stable N-1이 존재한다. |
|
|
| 6주 이전 beta N이 stable로 승격되고 새 beta가 분기한다. |
|
|
| 12주 beta N+1이 stable로 승격된다. |
|
|
Rust 릴리스 기차의 두 6주 구간
0/6/12주에 beta N이 stable N으로 승격되고 같은 시점 새 beta가 분기되는 실제 시간 모델이다. N의 추적과 새 N+1을 구분하고 매일 nightly snapshot·선별 backport·RFC 수락과 안정화의 차이를 보존한다.
Rust · release train · 6-week cadence
새 beta의 출발과 이전 beta의 stable 도착은 6주마다 겹친다
같은 폭은 같은 6주입니다. main의 일일 snapshot이 nightly가 되고, 6주마다 당시의 main에서 새 beta가 분기됩니다. 동시에 직전 beta는 검증을 마치고 stable로 승격됩니다.
beta N이 출발한다
현재 main에서 beta N을 분기합니다. 이전 구간에서 검증한 beta N−1은 stable N−1로 도착합니다.
N 도착과 N+1 출발
beta N은 stable N으로 승격되고, 같은 시점의 main에서 beta N+1이 분기됩니다.
N+1 도착과 N+2 출발
beta N+1이 stable N+1로 승격되고 당시 main에서 beta N+2가 새로 분기됩니다. 두 번째 구간도 6주입니다.
nightly는 계속 움직인다
main의 자동 snapshot이 매일 생성됩니다. beta에는 다음 stable에 꼭 필요한 수정만 선별해 백포트할 수 있습니다.
모든 변경이 RFC에서 시작하지는 않는다
중대한 설계 변경은 RFC를 거치는 경우가 많지만, 버그 수정, 문서 개선, 작은 구현 변경까지 모두 RFC가 필요한 것은 아닙니다.
RFC 수락과 stable 도착은 별개다
수락은 설계 방향의 합의입니다. 구현, nightly 기능 게이트 아래의 경험, 별도 안정화 판단이 뒤따라야 하며 구현이나 안정화가 보장되지는 않습니다.
릴리스 기차는 정해진 간격에 준비된 변경만 태웁니다. 준비되지 않은 기능을 마감에 맞춰 밀어 넣기보다 다음 6주 기회를 기다릴 수 있습니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 관계·조건 설명 | 0주 beta N은 6주 stable N으로, 6주 beta N+1은 12주 stable N+1로 승격된다. 각 시점의 main에서 새 beta가 분기되고 매일 nightly snapshot이 만들어진다. 필요한 수정만 기존 beta로 백포트한다. |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 0주 beta N과 stable N-1이 존재한다. |
|
|
| 6주 이전 beta N이 stable로 승격되고 새 beta가 분기한다. |
|
|
| 12주 beta N+1이 stable로 승격된다. |
|
|
main의 스냅숏이 매일 자동으로 만들어져 nightly가 됩니다. 0주에 그때의 main에서 beta N이 갈라지고, 이전 구간에서 검증한 beta N−1은 stable N−1로 올라옵니다. 6주가 지나면 beta N이 stable N으로 올라오고, 같은 시점의 main에서 beta N+1이 새로 갈라집니다. 12주에는 beta N+1이 stable N+1로 올라오고 beta N+2가 갈라집니다. 이처럼 새 beta가 출발하는 시점과 이전 beta가 stable에 도착하는 시점은 6주마다 겹칩니다. beta에는 다음 안정 버전에 꼭 필요한 수정만 골라 되돌려 넣을(backport) 수 있습니다.
개발과 릴리스 과정이 어떻게 동작하는지 예를 들어 봅니다. 러스트 팀이 Rust 1.5의 릴리스를 준비하고 있다고 합시다. 그 릴리스는 2015년 12월에 있었지만, 버전 번호를 현실적으로 보여 줄 것입니다. 러스트에 새 기능이 더해집니다. 새 커밋이 main 브랜치에 들어갑니다. 밤마다 러스트의 새 nightly 판이 만들어집니다. 매일이 릴리스 날이며, 이 릴리스들은 릴리스 기반 시설이 자동으로 만듭니다. 시간이 지나며 릴리스는 매일 밤 한 번씩 나옵니다.
6주마다 새 릴리스를 준비할 때가 됩니다. 러스트 저장소의 beta 브랜치가 nightly가 쓰는 main 브랜치에서 갈라집니다. 이제 nightly와 beta, 두 릴리스가 있습니다. 대부분의 러스트 사용자는 beta 릴리스를 직접 쓰지 않지만, 러스트의 CI 시스템에서 beta로 테스트해 전에는 되던 동작이 새 버전에서 깨지는 회귀(regression)를 찾도록 돕습니다. 변경 뒤에 이미 되던 동작을 다시 확인하는 회귀 테스트는 통합·인수·회귀 테스트에서 다룹니다. 그동안에도 nightly 릴리스는 여전히 매일 밤 나옵니다.
회귀가 발견되었다고 합시다. 회귀가 안정 릴리스로 몰래 들어가기 전에 beta 릴리스를 테스트할 시간이 있었던 것이 다행입니다. 수정은 main에 적용되어 nightly가 고쳐지고, 그 수정이 beta 브랜치로 되돌려 넣어져 beta의 새 릴리스가 만들어집니다.
첫 beta가 만들어지고 6주가 지나면 안정 릴리스를 할 때입니다. stable 브랜치가 beta 브랜치에서 만들어집니다. 만세! Rust 1.5가 끝났습니다. 하지만 하나를 잊었습니다. 6주가 지났으므로 다음 버전의 러스트인 1.6의 새 beta도 필요합니다. 그래서 stable이 beta에서 갈라진 뒤, 다음 버전의 beta가 다시 nightly에서 갈라집니다.
이것을 기차 모델이라고 부르는 까닭은, 6주마다 릴리스가 "역을 떠나지만", 안정 릴리스로 도착하기 전에 여전히 beta 채널을 지나는 여정을 거쳐야 하기 때문입니다.
러스트는 6주마다 시계처럼 릴리스합니다. 러스트 릴리스 하나의 날짜를 안다면 다음 릴리스의 날짜도 알 수 있습니다. 6주 뒤입니다. 6주마다 릴리스가 예정되어 있다는 점의 좋은 면은, 다음 기차가 곧 온다는 것입니다. 어떤 기능이 특정 릴리스를 놓치더라도 걱정할 필요가 없습니다. 짧은 시간 뒤에 또 다른 릴리스가 오기 때문입니다. 이것은 릴리스 마감일 즈음에 덜 다듬어진 기능을 몰래 넣으려는 압박을 줄여 줍니다.
이 과정 덕분에 언제든 다음 러스트 빌드를 미리 받아, 업그레이드가 쉬운지 직접 확인할 수 있습니다. beta 릴리스가 기대한 대로 동작하지 않는다면 팀에 알려, 다음 안정 릴리스가 나오기 전에 고치게 할 수 있습니다. beta 릴리스에서 무언가 망가지는 일은 비교적 드물지만, rustc도 소프트웨어이며 버그는 있습니다.
유지보수 기간
러스트 프로젝트는 가장 최근의 안정 버전을 지원합니다. 새 안정 버전이 릴리스되면, 이전 버전은 수명이 다합니다(end of life, EOL). 곧 각 버전은 6주 동안 지원됩니다.
불안정한 기능
이 릴리스 모델에는 하나가 더 있습니다. 불안정한 기능입니다. 러스트는 기능 플래그(feature flag)라는 기법으로 어떤 릴리스에서 어떤 기능을 켤지 정합니다. 새 기능이 개발 중이라면 main에 들어가므로 nightly에도 들어가지만, 기능 플래그 뒤에 있습니다. 사용자로서 개발 중인 기능을 써 보고 싶다면 그렇게 할 수 있지만, 러스트의 nightly 릴리스를 써야 하고 소스 코드에 알맞은 플래그를 달아 그 기능을 켜겠다고 선택해야 합니다.
#![feature(never_type)]
fn main() {}#![feature(...)] 같은 속성은 nightly 컴파일러에서만 받아들여지며, beta나 stable 릴리스에서 쓰면 컴파일 오류가 납니다. 사용자가 beta나 stable 릴리스를 쓴다면 기능 플래그는 쓸 수 없습니다. 이것이 새 기능을 영원히 안정이라고 선언하기 전에 실제로 써 볼 수 있게 해 주는 열쇠입니다. 최신 기능을 원하는 사람은 그렇게 선택할 수 있고, 단단한 경험을 원하는 사람은 stable에 머물며 자기 코드가 깨지지 않을 것이라고 알 수 있습니다. 정체되지 않는 안정성입니다.
이 교재는 안정된 기능에 대한 정보만 담고 있습니다. 개발 중인 기능은 계속 바뀌며, 이 교재가 쓰인 때와 그 기능이 안정 빌드에서 켜지는 때 사이에 분명 달라질 것입니다. nightly 전용 기능의 문서는 온라인에서 찾을 수 있습니다.
Rustup과 러스트 Nightly의 역할
rustup을 쓰면 전역으로든 프로젝트마다든 러스트의 서로 다른 릴리스 채널 사이를 쉽게 바꿀 수 있습니다. 기본으로는 안정 러스트가 설치되어 있습니다. 예를 들어 nightly를 설치하려면 다음을 실행합니다.
rustup toolchain install nightlyrustup으로 설치한 모든 툴체인(toolchain), 곧 러스트와 그에 딸린 구성 요소의 릴리스를 볼 수도 있습니다. 다음은 저자 한 명의 Windows 컴퓨터에서 본 예입니다.
rustup toolchain liststable-x86_64-pc-windows-msvc (active, default)
beta-x86_64-pc-windows-msvc
nightly-x86_64-pc-windows-msvc보이는 것처럼 안정 툴체인이 기본(default)이며, 지금 폴더에서 실제로 쓰이는 툴체인(active)도 안정 툴체인입니다. 대부분의 러스트 사용자는 대부분의 경우 stable을 씁니다. 대부분의 경우 stable을 쓰되, 최첨단 기능에 관심이 있어 특정 프로젝트에서 nightly를 쓰고 싶을 수도 있습니다. 그렇게 하려면 그 프로젝트의 폴더에서 rustup override를 써서, 그 폴더에 있을 때 rustup이 nightly 툴체인을 쓰게 합니다.
cd ~/projects/needs-nightly
rustup override set nightly이제 ~/projects/needs-nightly 안에서 rustc나 cargo를 부를 때마다, rustup은 기본인 안정 러스트 대신 nightly 러스트를 쓰도록 보장합니다. 러스트 프로젝트가 많을 때 아주 쓸모가 있습니다. 아래 표는 목적에 따라 툴체인을 어떻게 고르고 고정할지 정리한 것입니다.
Rustup · stable · beta · nightly
채널 이름보다 재현 범위와 종료 조건을 먼저 정한다
프로덕션 기준은 stable 하나로 끝나지 않습니다. 지원하는 MSRV를 함께 시험하고, beta는 사전 경보로, 날짜를 고정한 nightly는 추적 가능한 실험으로 분리합니다.
| 목적 | 툴체인 | 재현 장치 | 운영·종료 조건 |
|---|---|---|---|
| 배포 기준 | stable + MSRV |
Cargo.toml의 rust-version, stable·MSRV CI |
MSRV 변경은 릴리스 정책에 따라 명시하고 두 작업을 계속 통과시킨다. |
| beta 점검 | beta |
필수 배포 작업과 분리한 CI 보조 작업 | 회귀를 재현·보고하고, beta가 stable이 된 뒤에도 다음 beta를 계속 추적한다. |
| nightly 실험 | nightly-YYYY-MM-DD |
체크인한 rust-toolchain.toml로 날짜 고정 |
기능 게이트, 추적 이슈, 담당자, 갱신 주기와 stable 전환 또는 폐기 조건을 기록한다. |
| 일회성 비교 | cargo +toolchain |
프로젝트 기본값을 바꾸지 않는 명령 단위 선택 | 차이를 확인한 뒤 종료하며 팀 설정이나 CI에 암묵적으로 남기지 않는다. |
배포: stable + MSRV
rust-version으로 최소 버전을 선언하고 stable과 MSRV를 각각 CI에서 검증합니다.
사전 점검: beta CI
배포를 막는 기본 작업과 분리해 다음 stable의 회귀를 일찍 발견하고 보고합니다.
실험: 날짜 고정 nightly
체크인한 rust-toolchain.toml에 nightly-YYYY-MM-DD를 지정하고 추적 이슈, 담당자, 갱신 주기와 종료 조건을 남깁니다.
비교: +toolchain
한 명령에서만 툴체인을 선택해 저장소 기본값을 바꾸지 않습니다.
활성 툴체인의 우선순위
+toolchain → RUSTUP_TOOLCHAIN → 디렉터리 override → rust-toolchain.toml → rustup 기본값 순입니다. 디렉터리 설정과 툴체인 파일은 현재 위치에 더 가까운 쪽이 우선합니다.
팀 재현성은 저장소에 남긴다
로컬 override는 개인의 잠깐 실험에 적합합니다. 공동 실험은 날짜가 고정된 툴체인 파일을 체크인하고, CI에서 로컬 override가 결과를 가리지 않게 관리합니다.
nightly는 “더 최신인 stable”이 아니라 변경 가능한 계약입니다. 필요 기능과 추적 근거, 업데이트 책임, 빠져나갈 경로가 모두 있을 때만 운영 경계 안으로 들이세요.
배포의 기준은 stable 하나로 끝나지 않습니다. Cargo.toml의 rust-version으로 지원하는 최소 러스트 버전(minimum supported Rust version, MSRV)을 밝히고, stable과 MSRV를 각각 CI에서 검증하며, MSRV를 바꿀 때는 릴리스 정책에 따라 밝힙니다. beta는 배포를 막는 기본 CI 작업과 나눈 보조 작업으로 돌려, 다음 안정 버전의 회귀를 일찍 찾아 보고하는 데 씁니다. nightly로 실험할 때는 저장소에 넣은 rust-toolchain.toml에 nightly-YYYY-MM-DD처럼 날짜를 정해 고정하고, 기능 게이트, 추적 이슈, 담당자, 갱신 주기, stable로 옮기거나 그만둘 조건을 기록합니다. 한 번 비교해 보는 정도라면 cargo +nightly build처럼 명령 하나에서만 툴체인을 고르고, 저장소의 기본값이나 CI 설정을 바꾸지 않습니다.
RFC 과정과 팀
그렇다면 이 새 기능들은 어떻게 알게 될까요? 러스트의 개발 모델은 의견 요청(Request For Comments, RFC) 과정을 따릅니다. 러스트를 개선하고 싶다면 RFC라는 제안서를 쓸 수 있습니다.
누구나 러스트를 개선하는 RFC를 쓸 수 있으며, 제안은 여러 주제의 하위 팀으로 이루어진 러스트 팀이 검토하고 논의합니다. 팀의 전체 목록은 러스트 웹사이트에 있으며, 언어 설계, 컴파일러 구현, 기반 시설, 문서 같은 프로젝트의 각 영역마다 팀이 있습니다. 알맞은 팀이 제안과 의견을 읽고, 자신의 의견을 쓰고, 결국 그 기능을 받아들일지 거절할지 합의에 이릅니다.
기능이 받아들여지면, 러스트 저장소에 이슈가 열리고, 누군가 그것을 구현할 수 있습니다. 그 기능을 구현하는 사람이 처음에 그 기능을 제안한 사람이 아닐 수도 있습니다. 구현이 준비되면 앞의 불안정한 기능에서 이야기한 것처럼 기능 게이트 뒤에서 main 브랜치에 들어갑니다.
시간이 지나, nightly 릴리스를 쓰는 러스트 개발자들이 새 기능을 써 볼 수 있게 되면, 팀원들이 그 기능과 그것이 nightly에서 어떻게 동작했는지 논의하고, 안정 러스트에 들어가야 할지 정합니다. 앞으로 나아가기로 하면 기능 게이트가 없어지고, 이제 그 기능은 안정된 것으로 여겨집니다. 기차를 타고 새 안정 러스트 릴리스에 이릅니다. 다만 모든 변경이 RFC에서 시작하지는 않습니다. 중요한 설계 변경은 RFC를 거치는 경우가 많지만, 버그 수정이나 문서 개선, 작은 구현 변경은 보통 RFC 없이 이루어집니다.
정리
- 러스트는 정체되지 않는 안정성을 원칙으로, 안정 버전을 올려도 코드가 깨지지 않으면서 새 기능과 개선을 받게 합니다.
- nightly는
main에서 매일, beta는 6주마다main에서 갈라지고, 6주 동안 검증한 beta가 stable이 되며, 안정 버전은 다음 버전이 나올 때까지 6주 동안 지원됩니다. - 개발 중인 기능은 기능 플래그 뒤에 있어 nightly에서
#![feature(...)]로만 쓸 수 있습니다. - rustup으로
rustup toolchain install nightly처럼 툴체인을 설치하고,rustup override set이나rust-toolchain.toml로 프로젝트마다 툴체인을 고정하며,cargo +nightly로 명령 하나에서만 고를 수 있습니다. - 큰 설계 변경은 RFC로 제안되고 팀이 검토해 받아들이며, 구현은 기능 게이트 뒤에서 시험된 뒤 안정화됩니다.
연습 문제
1. 언제 stable이 될까
어떤 수정이 main에 들어간 날 beta가 막 갈라졌다면, 그 수정은 대략 언제 stable에 들어가나요? beta로 되돌려 넣는다면 어떻게 되나요?
해설 보기
방금 갈라진 beta에는 그 수정이 없으므로, 그 beta가 6주 뒤 stable이 될 때는 들어가지 않습니다. 다음 6주 시점에 main에서 갈라지는 새 beta에 들어가고, 그것이 다시 6주 뒤 stable이 되므로 대략 12주 뒤에 stable에 들어갑니다. 다음 안정 버전에 꼭 필요한 수정이라 지금의 beta로 되돌려 넣는다면, 약 6주 뒤의 stable에 들어갑니다.
2. 툴체인을 어떻게 고정할까
라이브러리를 배포하는 팀이 (가) 최소 Rust 1.85를 지원하겠다고 약속하고 싶다. (나) 아직 불안정한 기능 하나를 실험용 브랜치에서 쓰고 싶다. 각각 무엇을 하나요?
해설 보기
(가)는 Cargo.toml에 rust-version = "1.85"를 적고, CI에서 stable과 1.85 두 툴체인으로 각각 빌드하고 테스트합니다. (나)는 실험용 브랜치의 rust-toolchain.toml에 channel = "nightly-2026-10-15"처럼 날짜를 정한 nightly를 고정하고 #![feature(...)]로 기능을 켜며, 추적 이슈와 담당자, 그만둘 조건을 기록해 배포용 브랜치와 섞이지 않게 합니다.
이것으로 부록을 마칩니다. 처음부터 다시 훑어보고 싶다면 러스트 교재의 목차로 돌아가세요.