Rust 1.79부터 1.90까지의 핵심 변화를 주제별로 간단히 묶어 소개합니다. 언어 기능, 표준 라이브러리, 툴링 개선과 함께 2024 에디션, 10주년, 공식 명세(FLS) 소식도 다룹니다.
지난해 5월 저는 1.0 릴리스부터 1.78까지 Rust가 어떻게 진화했는지에 대해 블로그 글을 작성했습니다. 릴리스별로 하나씩 보는 대신 주제별로 변화를 묶어보니 무척 흥미로웠습니다. 지금은 1.90까지 왔고, 또 한 번 업데이트할 때라고 생각했습니다. 1년 반밖에 지나지 않았지만 꽤 많은 변화가 있었더군요(이 글을 쓰기 전엔 저도 이렇게까지 많은 줄 몰랐습니다). 아래에 적은 여러 새 기능들 외에도, 2024 에디션(2025년 2월 릴리스), Rust의 10번째 생일(5월), 그리고 FLS 형태의 공식 언어 명세가 추가되었습니다.
제가 생각하기에 가장 흥미로운 것들만 추려 요약했습니다. 물론 전체 변화의 일부에 불과합니다. 특히 표준 라이브러리 안정화나 const 관련 변화는 전부 나열하기 어렵습니다. 각 버전에 대한 전체 요약과 향후 업데이트는 Rust 블로그의 릴리스 공지를 확인하세요.
async |...| { ... } (1.85).let 체인: if나 while 표현식의 어떤 && 절에서도 let 사용 가능(기존 if let은 첫 절에서만 가능) (1.88 및 2024).impl Trait와 라이프타임 규칙 변경(2024), 그리고 라이프타임 경계를 위한 use<..> 문법(자세한 내용은 에디션 가이드의 해당 챕터 또는 RFC 참고) (1.82, 트레이트 함수는 1.87).&raw ... 연산자(또는 unsafe 블록 없이 가변/extern static에 대한 참조 취득) (1.82, 2024 에디션에서는 비-raw & 사용이 오류).unsafe extern 블록과 safe 키워드 (1.82).unsafe (1.82, 2024 에디션에서는 unsafe 없이 unsafe 속성을 쓰면 오류).const 제네릭 인자 추론을 위한 _ (1.89).const { std::mem::size_of::<T>() + 1 } (1.79).const 즉치값(Immediate) (1.82)과 Rust 코드로의 점프 (1.87).match i { 0..10 => println!("9 or under"), ... } (1.80).expect 린트 단계, 예: #[expect(unused)]( #[allow(dead_code)]의 더 나은 대안) 및 린트 속성에서 reason 사용 (1.81).trait CopyIterator: Iterator<Item: Copy> {} (1.79).#[diagnostic::do_not_recommend] 속성 (1.85).extern(C) 함수 내부에서 언와인딩이 발생하면 abort (1.81).if/match 블록 내부에서의 라이프타임 연장, 예: let x = if ... { &new() } ... ;처럼 참조의 라이프타임이 해당 블록이 아니라 둘러싼 스코프로 연장되어 합법 (1.79). if let과 블록의 마지막 표현식과 관련된 임시 값의 라이프타임 규칙 변경 (2024).! 또는 Infallible 사용)에 대한 패턴 분기 불필요 (1.82).LazyCell과 LazyLock — lazy_static, once_cell 크레이트의 대안 (1.80).io::pipe 및 관련 타입들 (1.87).File::lock 등 (1.89).Error 트레이트가 std에서 core로 이동 (1.81).NonNull의 API 대부분 (1.80, 1.84).get_disjoint_mut (1.86).Option::take_if (1.80), Option::is_none_or (1.82), Option::get_or_insert_default (1.83).collect (1.85).Vec::into_flattened와 배열의 as_flattened (1.80).Vec::pop_if (1.86) 및 Vec::extract_if (1.87, 해시맵은 1.88).is_sorted (1.82).Cell::update (1.88).str::from_utf8 (1.87).Box, Rc, Arc에서 초기화되지 않은 메모리를 위한 API (1.82).next_down과 next_up (1.86).ControlFlow API (1.83).Entry::insert_entry (1.83).hint::assert_unchecked (1.81).hint::select_unpredictable (1.88).Once와 OnceLock의 wait (1.86).PanicInfo를 PanicHookInfo로 개명 및 일부 패닉 메시지 변경 (1.81).Waker 디컨스트럭션을 위한 API (1.83).io::ErrorKind 변형(variants) (1.83, 1.85).proc_macro::Span API (1.88).Future와 IntoFuture 추가 (2024).cargo info (1.82).cargo publish --workspace (1.90).cfg 이름과 값 검사 (1.80).현재 러스트 코칭, 도입 지원, 개발 업무에 여유가 있습니다. 단 한 번의 통화부터 주 3일의 지속 협업까지 가능합니다. 팀이 목표를 달성하고 Rust를 더 효과적으로 도입·활용하거나, 새로운 기술로서 Rust를 정확히 평가하는 데 도움을 드릴 수 있습니다.
Rust를 도입 중이라면, 조언, 1:1 또는 그룹 멘토링, 설계/코드 리뷰, 온라인 지원으로 성공을 돕겠습니다. 코칭.
Rust로 제품을 개발 중이고 단기/중기적인 부스트가 필요하다면, 팀에 합류해 빠르게 상황을 파악하고 가치를 전달하겠습니다. 비동기와 unsafe 코드, 데이터베이스 구현, 분산 시스템, 개발 도구, 언어 구현에 전문성이 있습니다. 컨설팅.