Выпуск Rust 1.91

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 562
Зарегистрирован: 20.08.2022

#

Выпуск Rust 1.91
Дата публикации:Fri, 31 Oct 2025 10:55:57 +0300

Опубликован релиз языка программирования Rust 1.91, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Основные новшества:
  • Улучшена поддержка 64-разрядных ARM-систем с ОС Windows. Целевая платформа "aarch64-pc-windows-msvc" переведена со второго на первый уровень поддержки. Обеспечен второй уровень поддержки для архитектур aarch64-pc-windows-gnullvm и x86_64-pc-windows-gnullvm. Первый уровень поддержки подразумевает формирование бинарных сборок, проведение досконального тестирования и предоставление наивысшей гарантии поддержки платформы - каждое изменение в компиляторе проверяется выполнением полного тестового набора. Второй уровень поддержки включает формирование бинарных сборок и гарантию сборки, но не гарантирует прохождение тестового набора. Третий уровень охватывает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода. Добавлено lint-предупреждение "dangling_pointers_from_locals" для выявления возвращения функциями висячих raw-указателей (dangling raw pointer), указывающих на данные, хранящиеся в локальных переменных, определённых в вызванной функции. Подобные переменные удаляются после завершения функции, а raw-указатели на связанные с этими переменными данные, становятся висячими, т.е. указывающими на освобождённую память. Последующее разыменование подобного указателя приводит к неопределённому поведению. fn f() -> *const u8 { let x = 0; &x // warning: a dangling pointer will be produced because the local variable "x" will be dropped } Добавлено lint-предупреждение "integer_to_ptr_transmutes", информирующее о преобразовании целых чисел в указатели с помощью функции std::mem::transmute. В пакетном менеджере Cargo стабилизирована поддержка параметра "build.build-dir", определяющего каталог для хранения временных сборочных артефактов, создаваемых cargo и rustc на этапе сборки. Для ABI sysv64, win64, efiapi и aapcs стабилизирована поддержка объявления функций с переменным числом аргументов в стиле Си. Стабилизирована поддержка inline-ассемблера для архитектуры LoongArch32. В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
  • Path::file_prefix
    [/url]
  • AtomicPtr::fetch_ptr_add
    [/url]
  • AtomicPtr::fetch_ptr_sub
    [/url]
  • AtomicPtr::fetch_byte_add
    [/url]
  • AtomicPtr::fetch_byte_sub
    [/url]
  • AtomicPtr::fetch_or
    [/url]
  • AtomicPtr::fetch_and
    [/url]
  • AtomicPtr::fetch_xor
    [/url]
  • {integer}::strict_add
    [/url]
  • {integer}::strict_sub
    [/url]
  • {integer}::strict_mul
    [/url]
  • {integer}::strict_div
    [/url]
  • {integer}::strict_div_euclid
    [/url]
  • {integer}::strict_rem
    [/url]
  • {integer}::strict_rem_euclid
    [/url]
  • {integer}::strict_neg
    [/url]
  • {integer}::strict_shl
    [/url]
  • {integer}::strict_shr
    [/url]
  • {integer}::strict_pow
    [/url]
  • i{N}::strict_add_unsigned
    [/url]
  • i{N}::strict_sub_unsigned
    [/url]
  • i{N}::strict_abs
    [/url]
  • u{N}::strict_add_signed
    [/url]
  • u{N}::strict_sub_signed
    [/url]
  • PanicHookInfo::payload_as_str
    [/url]
  • core::iter::chain
    [/url]
  • u{N}::checked_signed_diff
    [/url]
  • core::array::repeat
    [/url]
  • PathBuf::add_extension
    [/url]
  • PathBuf::with_added_extension
    [/url]
  • Duration::from_mins
    [/url]
  • Duration::from_hours
    [/url]
  • impl PartialEq<str> for PathBuf
    [/url]
  • impl PartialEq<String> for PathBuf
    [/url]
  • impl PartialEq<str> for Path
    [/url]
  • impl PartialEq<String> for Path
    [/url]
  • impl PartialEq<PathBuf> for String
    [/url]
  • impl PartialEq<Path> for String
    [/url]
  • impl PartialEq<PathBuf> for str
    [/url]
  • impl PartialEq<Path> for str
    [/url]
  • Ipv4Addr::from_octets
    [/url]
  • Ipv6Addr::from_octets
    [/url]
  • Ipv6Addr::from_segments
    [/url]
  • impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
    [/url]
  • impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
    [/url]
  • impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
    [/url]
  • Cell::as_array_of_cells
    [/url]
  • u{N}::carrying_add
    [/url]
  • u{N}::borrowing_sub
    [/url]
  • u{N}::carrying_mul
    [/url]
  • u{N}::carrying_mul_add
    [/url]
  • BTreeMap::extract_if
    [/url]
  • BTreeSet::extract_if
    [/url]
  • impl Debug for windows::ffi::EncodeWide<'_>
    [/url]
  • str::ceil_char_boundary
    [/url]
  • str::floor_char_boundary
    [/url]
  • impl Sum for Saturating<u{N}>
    [/url]
  • impl Sum<&Self> for Saturating<u{N}>
    [/url]
  • impl Product for Saturating<u{N}>
    [/url]
  • impl Product<&Self> for Saturating<u{N}>
    [/url]
Признак "const" применён в функциях:
  • <[T; N]>::each_ref
    [/url]
  • <[T; N]>::each_mut
    [/url]
  • OsString::new
    [/url]
  • PathBuf::new
    [/url]
  • TypeId::of
    [/url]
  • ptr::with_exposed_provenance
    [/url]
  • ptr::with_exposed_provenance_mut
    [/url]
Компилятор обновлён до ветки LLVM 21.

Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=64149

Жизнь за Нер'зула!

Ответить