Опубликован релиз языка программирования общего назначения Rust 1.79, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository crates.io.
Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.
Novitetet kryesore:
- Добавлена поддержка inline-констант, которые можно указывать прямо в коде при помощи блоков «const { … }», обрабатываемых в контексте констант и позволяющих обойтись без отдельного определения констант. Указанный в блоке «const { … }» код вычисляется на этапе компиляции и используется как константа, без выполнения во время работы программы. В отличие от определения констант через выражение «const ITEM: … = …» в блоках «const { … }» можно не указывать тип, так как в них поддерживается автоматический вывод типов. Например, код с отдельным определением константы
const EMPTY: Option<Vec<u8>> = None;
let foo = [EMPTY; 100];можно заменить на использование по месту:
let foo = [const { None }; 100];
- Стабилизирован синтаксис «T: Trait<Assoc: Bounds…>» для задания ограничений в позиции ассоциативного типа, позволяющий сократить определение выражений с вложенными ограничениями типа, которые ранее требовали указания вложенного impl Trait или нескольких условий «where».
- Обеспечено автоматическое продление времени жизни временных значений, которые используются в конструкциях «match» и «if».
let a = if true {
..;
&temp() // время жизни будет продлено
} else {
..;
&temp() // время жизни будет продлено
}; - Стабилизирована возможность импорта функции main из других модулей и crate-пакетов.
- При сборке стандартной библиотеки в компиляторе задействован флаг «-Cforce-frame-pointers=yes», добавляющий данные для реконструкции стека во время профилирования программ.
- Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
- {integer}::unchecked_add
- {integer}::unchecked_mul
- {integer}::unchecked_sub
- <[T]>::split_at_unchecked
- <[T]>::split_at_mut_unchecked
- <[u8]>::utf8_chunks
- str::Utf8Chunks
- str::Utf8Chunk
- <*const T>::is_aligned
- <*mut T>::is_aligned
- NonNull::is_aligned
- <*const [T]>::len
- <*mut [T]>::len
- <*const [T]>::is_empty
- <*mut [T]>::is_empty
- NonNull::<[T]>::is_empty
- CStr::count_bytes
- io::Error::downcast
- num::NonZero<T>
- path::absolute
- proc_macro::Literal::byte_character
- proc_macro::Literal::c_string
- Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в функциях:
- Atomic*::into_inner
- io::Cursor::new
- io::Cursor::get_ref
- io::Cursor::position
- io::empty
- io::repeat
- io::sink
- panic::Location::caller
- panic::Location::file
- panic::Location::line
- panic::Location::column
- Стабилизирована
часть возможностей, которые можно использовать при компиляции в промежуточное представление Webassembly (WASM). - Реализован третий уровень поддержки для платформ aarch64-apple-visionos, aarch64-apple-visionos-sim и riscv32ima-unknown-none-elf. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
- Реализован второй уровень поддержки целевых платформ aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm и x86_64-pc-windows-gnullvm. Второй уровень поддержки подразумевает гарантию сборки.
Кроме того, организация Rust Foundation, которая курирует связанную с языком Rust экосистему, объявила о создании консорциума «Safety-Critical Rust Consortium», нацеленного на использовании языка Rust в решениях, требующих повышенной надёжности (Safety-Critical Software), сбой в которых может угрожать жизни людей, нанести вред окружающей среде или привести к серьёзным повреждениям оборудования. К консорциуму присоединились компании ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle и Woven by Toyota. Среди задач, которые будет решать консорциум упоминается написание руководств и разработка библиотек, линтеров и статических анализаторов, а также применение методов формальной верификации надёжности и разработка подмножеств языка для высоконадёжных систем.
Из проектов, связанных с высоконадёжными системами, можно отметить Verus — инструментарий для проверки корректности кода, написанного на языке Rust. Проверка осуществляется путём определения спецификации, описывающей допустимое поведение кода. Во время выполнения исполняемого кода Verus проверяет соответствие спецификации для подтверждения корректности работы.
Burimi: opennet.ru
