Опубликован релиз языка программирования Rust 1.91, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Droša atmiņas apstrāde Rust tiek nodrošināta kompilācijas laikā, pārbaudot atsauces, izsekojot objektu īpašumtiesības, ņemot vērā objektu dzīves ilgumu (redzamības jomas) un novērtējot piekļuves atmiņai pareizību koda izpildes laikā. Rust arī nodrošina līdzekļus aizsardzībai pret veselu skaitļu pārpelnēm, prasa obligātu mainīgo vērtību inicializāciju pirms to izmantošanas, labāk pārvalda kļūdas standarta bibliotēkā, piemēro invarianti (immutable) atsauču un mainīgo principu pa noklusējumu un piedāvā stipru statisku tipizāciju, lai minimizētu loģiskās kļūdas.
Galvenās jauninājumi:
- Улучшена поддержка 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.
- Jauna API daļa ir pārcelta uz stabilo kategoriju, tostarp ir stabilizēti metodes un tipāžu realizācijas:
- Path::file_prefix
- AtomicPtr::fetch_ptr_add
- AtomicPtr::fetch_ptr_sub
- AtomicPtr::fetch_byte_add
- AtomicPtr::fetch_byte_sub
- AtomicPtr::fetch_or
- AtomicPtr::fetch_and
- AtomicPtr::fetch_xor
- {integer}::strict_add
- {integer}::strict_sub
- {integer}::strict_mul
- {integer}::strict_div
- {integer}::strict_div_euclid
- {integer}::strict_rem
- {integer}::strict_rem_euclid
- {integer}::strict_neg
- {integer}::strict_shl
- {integer}::strict_shr
- {integer}::strict_pow
- i{N}::strict_add_unsigned
- i{N}::strict_sub_unsigned
- i{N}::strict_abs
- u{N}::strict_add_signed
- u{N}::strict_sub_signed
- PanicHookInfo::payload_as_str
- core::iter::chain
- u{N}::checked_signed_diff
- core::array::repeat
- PathBuf::add_extension
- PathBuf::with_added_extension
- Duration::from_mins
- Duration::from_hours
- impl PartialEq<str> for PathBuf
- impl PartialEq<String> for PathBuf
- impl PartialEq<str> for Path
- impl PartialEq<String> for Path
- impl PartialEq<PathBuf> for String
- impl PartialEq<Path> for String
- impl PartialEq<PathBuf> for str
- impl PartialEq<Path> for str
- Ipv4Addr::from_octets
- Ipv6Addr::from_octets
- Ipv6Addr::from_segments
- impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
- impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
- impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
- Cell::as_array_of_cells
- u{N}::carrying_add
- u{N}::borrowing_sub
- u{N}::carrying_mul
- u{N}::carrying_mul_add
- BTreeMap::extract_if
- BTreeSet::extract_if
- impl Debug for windows::ffi::EncodeWide<‘_>
- str::ceil_char_boundary
- str::floor_char_boundary
- impl Sum for Saturating<u{N}>
- impl Sum<&Self> for Saturating<u{N}>
- impl Product for Saturating<u{N}>
- impl Product<&Self> for Saturating<u{N}>
- Zīme «const» tiek izmantota funkcijās:
- <[T; N]>::each_ref
- <[T; N]>::each_mut
- OsString::new
- PathBuf::new
- TypeId::of
- ptr::with_exposed_provenance
- ptr::with_exposed_provenance_mut
- Компилятор обновлён до ветки LLVM 21.
Avots: opennet.lv
