Rust 1.98.0 발표

53 minutes ago 1

Rust 1.98.0 안정 버전은 대수적 부동소수점 연산, 버퍼 기반 정수 포맷팅, ManuallyDrop<Box<_>>의 동작 보장을 추가함 f32와 f64의 algebraic_* 메서드는 연산 재배치와 루프 벡터화를 허용하지만, 최적화 선택에 따라 결과가 비결정적일 수 있음 정수형의 format_into는 NumBuffer에 10진수 문자열을 기록하고 동적 디스패치를 대부분 우회해, 벤치마크에서 itoa와 비슷한 성능을 보임 Rust 1.96.0에서 제거된 ManuallyDrop<Box<_>> 이동 관련 미정의 동작은 1.98.0부터 앞으로도 미정의 동작이 아니라는 보장을 받음 문자열·슬라이스 범위, UTF-16 변환, 원자 타입 슬라이스 변환 등 여러 API가 안정화됐으며, 기존 설치는 rustup update stable 로 업그레이드할 수 있음 부동소수점 최적화와 정수 포맷팅 대수적 부동소수점 메서드가 f32와 f64의 덧셈·뺄셈·곱셈·나눗셈·나머지 연산에 추가됨 부동소수점 표현에서는 성립하지 않을 수 있는 실수의 대수적 성질을 최적화에 활용함 정확한 최적화 집합은 명시되지 않았으며, 다른 언어의 -ffast-math 옵션과 비슷한 최적화가 적용될 수 있음 일반적인 a + b + c + d는 ((a + b) + c) + d 순서로 계산해야 하지만, algebraic_add 체인은 (a + b) + (c + d)처럼 재배치할 수 있음 부분 합을 동시에 계산하고 더 폭넓은 루프 벡터화를 적용할 수 있음 컴파일러가 서로 다른 최적화를 선택할 수 있어 결과는 비결정적이지만, 미정의 동작을 일으키지는 않음 자세한 내용은 라이브러리 문서와 API 변경 제안에서 확인할 수 있음 모든 기본 정수형에 format_into가 추가됨 각 정수형의 어떤 값이든 10진수로 담을 수 있는 불투명 버퍼 &mut NumBuffer<Self>를 받음 반환되는 &str의 수명은 해당 버퍼에서 빌려옴 버퍼 기반 write! 포맷팅에서 발생하는 동적 디스패치를 대부분 우회함 itoa-benchmark에서 itoa 자체와 비슷한 성능을 보여, itoa와 유사한 의존성을 대체하는 표준 API로 활용할 수 있음 ManuallyDrop<Box<_>> 동작 보장 ManuallyDrop과 Box의 상호작용에 대한 안정적 보장이 문서화됨 Rust 1.96.0 이...

Read Entire Article