Rust 1.99.0 발표

2 hours ago 2

Rust 1.99.0에서 "C"와 "C-unwind" ABI의 가변 인자 함수를 직접 정의할 수 있게 됨 가변 인자 목록은 C의 va_list와 ABI 호환되는 VaList 로 다루며, 읽을 수 있는 타입은 VaArgSafe 트레이트로 제한됨 원시 포인터의 레이아웃 정보 조회 API 3개가 안정화되며, Sized와 Sized가 아닌 타입에 대한 안전성 요구사항이 확정됨 Box::leak 이후 메모리를 다시 해제하는 패턴을 피하도록 문서가 변경됨. 언어 의미론의 변경은 없으며, 대신 Box::into_non_null이나 Box::into_raw 사용을 권장함 컬렉션, 문자열, 파일 시간 설정 API도 안정화됨. 박싱된 배열의 IntoIterator, Vec의 구성 요소 변환, 손실 허용 UTF-8 변환 등이 포함됨 가변 인자 함수와 메모리 안전성 C ABI 가변 인자 함수 정의가 안정화됨 기존에는 libc::printf처럼 외부에서 정의한 가변 인자 함수를 호출할 수 있었지만, 이제 "C"와 "C-unwind" ABI로 Rust 자체에서 작성할 수 있음 ...로 가변 인자 목록을 받으며, 예제의 unsafe extern "C" fn sum(mut args: ...)은 호출자가 최소 2개의 i32 인자를 전달한다는 안전성 조건 아래 args.next_arg::<i32>()로 두 값을 읽어 더함 ...의 타입인 VaList는 각 타깃의 C va_list와 ABI 호환되며, 읽을 수 있는 타입은 VaArgSafe 트레이트가 제한함 "C"가 아닌 ABI의 naked 가변 인자 함수 정의도 안정화되며, 반드시 인라인 어셈블리로 작성해야 함 세부 규칙은 C 가변 인자 함수 레퍼런스에서 확인 가능함 원시 포인터의 레이아웃 정보 조회를 위한 API 3개가 안정화됨 Layout::for_value_raw, mem::size_of_val_raw, mem::align_of_val_raw가 대상임 Sized와 Sized가 아닌 타입 모두에 대해 크기와 정렬 정보를 조회할 때의 안전성 요구사항을 확정함 Sized 타입의 조회는 안전성 조건이 자명하며, 기존 안정 버전에서도 가능했음 Box::leak 문서는 누출한 메모리를 나중에 다시 해제하는 패턴을 피하도록 권고함 이 패턴은 현재 및 향후 도입될 수 있는 컴파일러 최적화와 상호작용할 때 문제가 있으며, 특히 향후 사용자 정의 할당자 안정화와 관련해 문제가 큼 대신 Box::...

Read Entire Article