TL;DR
- Rust 1.99.0에서
C및C-unwindABI를 사용하는 C 가변 함수 정의와 raw pointer의 크기·정렬 정보 조회 기능이 안정화됨. VaList와VaArgSafe를 통해 가변 인자 목록을 다루며, 비CABI의 naked 가변 함수 정의도 인라인 어셈블리를 사용하는 방식으로 지원됨.Layout::for_value_raw,mem::size_of_val_raw,mem::align_of_val_raw가 안정화돼Sized및 비Sized타입을 가리키는 raw pointer의 레이아웃 정보 조회가 가능함.Box::leak문서는 나중에 메모리를 해제하는 패턴을 권장하지 않으며, 대신Box::into_non_null을 선호하도록 안내함.- 이터레이터,
VecDeque,Box,Vec, 문자열, 파일 시스템 시간 설정 등을 포함한 표준 라이브러리 API가 추가로 안정화됨.
Rust 1.99.0 출시
- Rust 팀이 프로그래밍 언어 Rust의 새 버전인 1.99.0을 발표함. Rust는 누구나 신뢰할 수 있고 효율적인 소프트웨어를 만들 수 있도록 지원하는 프로그래밍 언어임.
rustup으로 이전 버전의 Rust를 설치했다면rustup update stable명령으로 1.99.0을 설치할 수 있음.rustup이 설치돼 있지 않다면 Rust 웹사이트의 해당 페이지에서 설치할 수 있으며, 1.99.0의 상세 릴리스 노트도 확인할 수 있음.- 향후 릴리스를 테스트하려면 로컬 기본 채널을 베타(
rustup default beta) 또는 나이틀리(rustup default nightly)로 변경할 수 있으며, 발견한 버그를 보고하도록 요청함.
Rust 1.99.0 안정 버전의 주요 변경 사항
`extern "C"` 가변 함수
- Rust 1.99.0에서
C및C-unwindABI로 C 가변 함수(variadic function)를 정의하는 기능이 안정화됨. - 이 방식으로 정의한 함수는 가변 인자 목록(
...)을 사용해 임의 개수의 인자를 받음. Rust는 이전부터libc::printf처럼 외부에서 정의된 가변 함수를 호출할 수 있었으며, 이제 Rust 코드 자체에서 해당 함수를 정의할 수 있음. ...의 타입은VaList이며, 모든 대상 플랫폼에서 C의va_list타입과 ABI 호환됨.VaList에서 읽을 수 있는 타입은VaArgSafe트레이트로 제한됨.- C 가변 함수에 관한 자세한 내용은 Reference에서 확인할 수 있음.
- 이 릴리스에서는 비
CABI의 naked 가변 함수 정의 지원도 안정화됨. 해당 함수는 인라인 어셈블리로 작성해야 함.
raw pointer의 레이아웃 정보
- 이번 릴리스에서
Sized및 비Sized타입을 가리키는 raw pointer의 크기와 정렬을 조회하는 데 필요한 안전성 요건이 정리됨.Sized타입 조회는 trivially safe하며 이미 안정 버전에서 가능했음. - 다음 세 함수가 안정화됨.
Layout::for_value_rawmem::size_of_val_rawmem::align_of_val_raw- Rust 1.99.0에서 언어 의미론 변경은 없음. 다만
Box::leak문서가 해당 메모리를 나중에 해제하는 패턴을 권장하지 않도록 갱신됨. - 그런 코드가 현재 및 향후 가능성이 있는 컴파일러 최적화와 문제가 있는 상호작용을 일으키는 것으로 확인됐으며, 곧 안정화될 사용자 정의 할당자(custom allocator)와 특히 문제가 됨. 대신
Box::into_non_null을 선호하도록 안내함. - 이 지침은 표준 라이브러리의 다른 누수 함수에도 적용됨.
안정화된 API
IntoIteratorforBox<[T; N]>IntoIteratorfor&Box<[T; N]>IntoIteratorfor&mut Box<[T; N]>VecDeque::retain_backcore::ffi::VaListBox::into_non_nullBox::from_non_nullVec::into_partsVec::from_partscore::mem::size_of_val_rawcore::mem::align_of_val_rawcore::alloc::Layout::for_value_rawString::from_utf8_lossy_ownedstring::FromUtf8Error::into_utf8_lossyFusedIteratorforStepBy<I>std::fs::set_timesstd::fs::set_times_nofollow
기타 변경 사항
- Rust, Cargo, Clippy에서 변경된 전체 내용을 확인할 수 있음.
Rust 1.99.0 기여자
- 많은 사람이 함께 Rust 1.99.0을 만들었으며, 모두의 기여에 감사를 전함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요