D'Verëffentlechung vun der Systemprogramméierungssprooch Rust 1.57, gegrënnt vum Mozilla-Projet, awer elo entwéckelt ënner der Regie vun der onofhängeger Asbl Rust Foundation, gouf publizéiert. D'Sprooch konzentréiert sech op Erënnerung Sécherheet, stellt automatesch Erënnerung Gestioun, a stellt d'Mëttel fir eng héich Aufgab parallelism ze erreechen ouni e Gerempels Sammelstécker oder Runtime benotzen (Runtime ass reduzéiert op Basis initialization an Ënnerhalt vun der Standard Bibliothéik).
D'automatesch Erënnerungsmanagement vum Rust eliminéiert Feeler beim Manipulatioun vun Pointer a schützt géint Probleemer déi aus der Manipulatioun vun der Gedächtnis op engem nidderegen Niveau entstinn, sou wéi Zougang zu enger Erënnerungsregioun nodeems se befreit gouf, Null Pointer-Dereferenzen, Pufferiwwerschlag, etc. Fir Bibliothéiken ze verdeelen, Assemblée ze garantéieren an Ofhängegkeeten ze managen, entwéckelt de Projet de Cargo Package Manager. De crates.io Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten.
Haaptinnovatiounen:
- Стабилизировано использование макроса «panic!» в контекстах, создаваемых при компиляции, таких как объявления «const fn». Кроме того, помимо использования «panic!» в const-объявлениях разрешено использование макроса «assert!» и некоторых других API стандартной библиотеки. Стабилизация пока не охватывает всю инфраструктуру форматирования, поэтому в текущем виде макрос «panic!» может использоваться только со статическими строками (panic!(«…»)) или с одним интерполированным значением «&str» при подстановке (panic!(«{}», a)), которое должно ограничиваться подстановкой «{}» без спецификаторов форматирования и других типажей. В будущем применимость макросов в константных контекстах будет расширена, но стабилизированных возможностей уже достаточно для выполнения assert-проверок на этапе компиляции: const _: () = assert!(std::mem::size_of::<u64>() == 8); const _: () = assert!(std::mem::size_of::<u8>() == 1);
- В пакетном менеджере Cargo разрешено использование профилей с произвольными именами, не ограниченными «dev», «release», «test» и «bench». Например, для включения оптимизации на этапе связывания (LTO) только при формирования финальных сборок продукта можно в Cargo.toml создать профиль «production» и добавить в него флаг «lto = true». При этом при определении собственных профилей обязательно требуется указать существующий профиль для наследования из него настроек по умолчанию. В примере ниже создаётся профиль «production», который дополняет профиль «release» включением флага «lto = true». Сам профиль активируется при вызове cargo с опцией «—profile production», а сборочные артефакты будут размещены в каталоге «target/production». [profile.production] inherits = «release» lto = true
- Стабилизировано использование try_reserve для типов Vec, String, HashMap, HashSet и VecDeque, что позволяет заранее резервировать место для определённого числа элементов заданного типа для того, чтобы снизить частоту выполнения операций выделения памяти и избежать аварийного завершения в процессе работы из-за нехватки памяти.
- Разрешено указание макросов с фигурными скобками в выражениях подобных «m!{ .. }.method()» и «m!{ .. }?».
- Оптимизировано выполнение функций File::read_to_end и read_to_string.
- Ënnerstëtzung fir d'Unicode Spezifizéierung gouf op Versioun 14.0 aktualiséiert.
- Расширено число функций, помеченных «#[must_use]» для вывода предупреждения в случае игнорирования возвращаемого значения, что помогает выявить ошибки, вызванные предположением, что функция изменит значения, а не вернёт новое значение.
- Добавлен экспериментальный бэкенд для генерации кода с использованием libgccjit.
- En neien Deel vun der API gouf an d'Kategorie vum Stall geplënnert, dorënner d'Methoden an d'Implementatioune vun de Charaktere goufen stabiliséiert:
- [T; N]::as_mut_slice
- [T; N]::as_slice
- collections::TryReserveError
- HashMap::try_reserve
- HashSet::try_reserve
- String::try_reserve
- String::try_reserve_exact
- Vec::try_reserve
- Vec::try_reserve_exact
- VecDeque::try_reserve
- VecDeque::try_reserve_exact
- Iterator::map_while
- iter::MapWhile
- proc_macro::is_available
- Command::get_program
- Command::get_args
- Command::get_envs
- Command::get_current_dir
- CommandArgs
- CommandEnvs
- Признак «const», определяющий возможность использования в любом контексте вместо констант, применён в функции hint::unreachable_unchecked.
- Реализован третий уровень поддержки для платформ armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi и armv7a-kmc-solid_asp3-eabihf. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
Source: opennet.ru