Rust 1.77 프로그래밍 언어 릴리스

Mozilla 프로젝트에 의해 설립되었지만 현재는 독립적인 비영리 조직인 Rust Foundation의 후원으로 개발된 Rust 1.77 범용 프로그래밍 언어의 출시가 발표되었습니다. 이 언어는 메모리 안전에 중점을 두고 가비지 수집기 및 런타임(런타임은 표준 라이브러리의 기본 초기화 및 유지 관리로 축소됨)의 사용을 피하면서 높은 작업 병렬성을 달성할 수 있는 수단을 제공합니다.

Rust의 메모리 처리 방법은 포인터를 조작할 때 개발자를 오류로부터 보호하고 메모리 영역이 해제된 후 액세스, null 포인터 역참조, 버퍼 오버런 등과 같은 저수준 메모리 처리로 인해 발생하는 문제로부터 보호합니다. 라이브러리 배포, 빌드 제공 및 종속성 관리를 위해 프로젝트는 Cargo 패키지 관리자를 개발합니다. crates.io 저장소는 라이브러리 호스팅을 위해 지원됩니다.

메모리 안전은 컴파일 시간에 참조 확인, 개체 소유권 추적, 개체 수명(범위) 추적 및 코드 실행 중 메모리 액세스의 정확성 평가를 통해 Rust에서 제공됩니다. Rust는 또한 정수 오버플로에 대한 보호 기능을 제공하고, 사용하기 전에 변수 값의 필수 초기화가 필요하며, 표준 라이브러리에서 오류를 더 잘 처리하고, 기본적으로 불변 참조 및 변수 개념을 적용하고, 강력한 정적 유형 지정을 제공하여 논리적 오류를 최소화합니다.

주요 혁신:

  • Добавлена поддержка литералов для Си-строк (c»текст»), которые хранятся в памяти с завершающим нулевым символом и ассоциированы с типом «CStr». Предполагается, что поддержка Си-строк упростит написание кода, взаимодействующего с прослойками на языках программирования, в которых применяются завершаемые нулевым байтом строки, и позволит выполнять необходимые проверки на стадии компиляции. const HELLO: &core::ffi::CStr = c»Hello, world!»;
  • В асинхронно выполняемых функциях, объявленных при помощи выражения «async fn», разрешено использование рекурсии, т.е. подобные функции теперь могут вызывать сами себя. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await } }
  • Стабилизирован макрос offset_of!, позволяющий определить байтовое смещение полей структур, перечислений, объединений и кортежей, относительно начала типа. На практике макрос может быть полезен в ситуациях, когда требуется работа на уровне смещения полей при отсутствии экземпляра типа. В частности, функциональность offset_of необходима при разработке низкоуровневых компонентов, таких как драйверы. use std::mem; #[repr(C)] struct FieldStruct { first: u8, second: u16, third: u8 } assert_eq!(mem::offset_of!(FieldStruct, first), 0); assert_eq!(mem::offset_of!(FieldStruct, second), 2); assert_eq!(mem::offset_of!(FieldStruct, third), 4);
  • В пакетном менеджере Cargo в профилях релизов по умолчанию включена очистка файлов от отладочных данных (strip = «debuginfo»), если в профиле Cargo явно не включён режим отладки, т.е. если параметр debug = 0.
  • Включена по умолчанию опция «-Zthir-unsafeck=on», обеспечивающая проверку unsafe для промежуточного представления THIR («Typed High-Level Intermediate Representation»).
  • Добавлена lint-проверка static_mut_refs для вывода предупреждения при использовании ссылок на изменяемые статические значения.
  • Реализована возможность применения типажа «From<&[T; N]>» для типа «Cow<[T]>». fn foo(data: impl Into<Cow<‘static, [&’static str]>>) { /* … */ } fn main() { foo(&[«hello», «world»]); }
  • В компиляторе обеспечено выравнивание 16-байтовых типов i128 и u128 для систем x86.
  • API의 새로운 부분이 안정화된 특성의 메서드 및 구현을 포함하여 안정적인 범주로 이동되었습니다.
    • array::each_ref
    • array::each_mut
    • core::net
    • f32::round_ties_even
    • f64::round_ties_even
    • mem::offset_of!
    • slice::first_chunk
    • slice::first_chunk_mut
    • slice::split_first_chunk
    • slice::split_first_chunk_mut
    • slice::last_chunk
    • slice::last_chunk_mut
    • slice::split_last_chunk
    • slice::split_last_chunk_mut
    • slice::chunk_by
    • slice::chunk_by_mut
    • Bound::map
    • File::create_new
    • Mutex::clear_poison
    • RwLock::clear_poison
  • Реализован третий уровень поддержки для платформ aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf и riscv32im-risc0-zkvm-elf. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

출처 : opennet.ru

코멘트를 추가