Rust 1.100.0 공개, never 타입과 커스텀 할당자 안정화
- Rust 1.100.0에서 오래 미뤄지던 never 타입(
!)이 안정화됨. 리턴하지 않는 함수의 리턴 타입으로 쓰이며, 1.101에 들어갈Result::into_ok/into_err는 2주짜리 FCP 때문에 이번 릴리스 컷오프를 놓침 - 커스텀 할당자가 안정화됨.
std::alloc::Allocator트레이트와Global/System구현,Box::new_in,Vec::with_capacity_in,Box::allocator등 allocator를 인자로 받는 API가 stable로 올라옴 - Cargo에 의존성 쿨다운(minimum publish age) 설정이 추가됨(RFC 3923). 설정한 기간보다 최근에 게시된 버전은 Cargo.lock에 없으면 리졸버가 무시하며,
cargo install은 .crate 안의 lockfile을 기본으로 사용해--locked가 사실상 무의미해짐 - 플랫폼 지원이 바뀜. wasm32-wasip3가 Tier 2로 승격하고
i686-pc-windows-gnu는 호스트 도구 없는 Tier 2로 내려갔으며powerpc64-sony-ps3가 Tier 3로 추가됨 - 컴파일러에서
-Cprofile-sample-use가 안정화되고 orphanck에서 next solver가 기본 활성화됨. Cargo는 쓰지 않는 의존성을 경고로 알려주고,repr(packed)안의repr(align)필드는aligned_fields_in_packed린트로 거부됨
Hacker News opinions
공식 릴리스 블로그가 이미 올라왔으니 링크를 로 바꾸는 게 맞겠는데
개인적으로 제일 반가운 건 never 타입 안정화랑 커스텀 할당자임. Vec::new_in 하나 쓰려고 allocator-api2 끌어다 쓰던 시절이 끝났어
이제 진짜 'never'가 일어났네 ㅋㅋ 타입 이름이 안정화 날짜에서 따왔다는 농담도 이걸로 끝이겠다
stable ABI는 여전히 없네... 빌드된 Rust 라이브러리 좀 그냥 가져다 쓰게 해줘
unsafe extern C 있잖아. Rust 전용 stable ABI를 고정하는 건 전방 호환성 악몽이 될 듯
제네릭 때문임. dyn으로만 짜인 ABI면 Vec를 못 넘기고 Vec<Box>로 우겨야 해서 끔찍함. Swift도 비슷한 방식으로 푸는데 한계가 있음
ABI보다 빌드 시간 줄여주는 게 급함. cargo clean 안 해도 되게 타깃 디렉터리부터 좀
컴파일러는 계속 빨라지고 있음. 디버깅 빌드면 cranelift 백엔드가 LLVM보다 확실히 빠르고, 안 쓰는 아티팩트 정리해서 디스크 먹는 것도 줄이는 중임
Cargo가 안 쓰는 의존성 경고해주는 것도 좋음. tracing-subscriber 같은 잔재가 바로 걸림
never 타입이 뭔지 모르겠다는 반응 많은데, 정상적으로 리턴하지 않는 함수의 리턴 타입이라고 보면 됨
Result::into_ok랑 into_err는 1.101로 밀렸더라. 2주짜리 FCP 때문에 컷오프를 못 맞췄다고 함
bool::toggle(), Box::map(), str::trim_prefix()도 안정화된 것 같은데 블로그 'Stabilized APIs' 항목에 다 들어있음
의존성 쿨다운(RFC 3923)이 조용히 들어간 게 은근 큼. 설정하면 최근에 올라온 버전은 Cargo.lock에 없으면 무시함
LLM이 코드 짜는 시대엔 하위 호환성에 덜 집착하고 언어를 좀 더 빨리 움직여도 된다고 봄
never 타입 안정화가 이번 릴리스에서 제일 큰 사건인데, 블로그 예제의 infallible_unwrap이 그걸 그대로 보여줌