Chaidh foillseachadh cànan prògramadh adhbhar coitcheann Rust 1.59, a chaidh a stèidheachadh le pròiseact Mozilla, ach a chaidh a leasachadh a-nis fo sgèith na buidhne neo-eisimeileach neo-phrothaideach Rust Foundation, fhoillseachadh. Tha an cànan a’ cuimseachadh air sàbhailteachd cuimhne agus a’ toirt seachad dòighean air co-shìnteachd obrach àrd a choileanadh fhad ‘s a tha e a’ seachnadh cleachdadh neach-cruinneachaidh sgudail agus ùine ruith (tha ùine ruith air a lughdachadh gu toiseach tòiseachaidh agus cumail suas an leabharlann àbhaisteach).
Bidh dòighean làimhseachaidh cuimhne Rust a’ sàbhaladh an leasaiche bho mhearachdan nuair a bhios iad a’ làimhseachadh chomharran agus a’ dìon an aghaidh dhuilgheadasan a thig am bàrr mar thoradh air làimhseachadh cuimhne aig ìre ìosal, leithid faighinn gu raon cuimhne às deidh dha a bhith air a shaoradh, a’ toirt iomradh air comharran null, cus bufair, msaa. Gus leabharlannan a sgaoileadh, togail a thoirt seachad agus eisimeileachd a riaghladh, bidh am pròiseact a’ leasachadh manaidsear pacaid Cargo. Tha an stòr crates.io a’ faighinn taic airson aoigheachd a thoirt do leabharlannan.
Tha sàbhailteachd cuimhne air a thoirt seachad ann an Rust aig àm cruinneachaidh tro sgrùdadh iomraidh, cumail sùil air seilbh nithean, cumail sùil air beatha nithean (scopes), agus measadh dè cho ceart ‘s a tha ruigsinneachd cuimhne rè coileanadh còd. Bidh Rust cuideachd a’ toirt dìon an aghaidh thar-shruthan iomlan, a’ feumachdainn luachan caochlaideach a thòiseachadh mus tèid an cleachdadh, a’ làimhseachadh mhearachdan nas fheàrr san leabharlann àbhaisteach, a’ cur an gnìomh bun-bheachd iomraidhean neo-sheasmhach agus caochladairean gu bunaiteach, a’ tabhann clò-sgrìobhadh làidir statach gus mearachdan loidsigeach a lughdachadh.
Prìomh innleachdan:
- Предоставлена возможность использования ассемблерных вставок, востребованных в приложениях, которым необходимо управлять выполнением на низком уровне или иметь возможность использования специализированных машинных инструкций. Ассемблерные вставки добавляются при помощи макросов «asm!» и «global_asm!» с использованием для именования регистров синтаксиса форматирования строк, аналогичного тому, что используется в строковых подстановках в Rust. Компилятором поддерживаются ассемблерные инструкции для архитектур x86, x86-64, ARM, AArch64 и RISC-V. Пример вставки: use std::arch::asm; // Multiply x by 6 using shifts and adds let mut x: u64 = 4; unsafe { asm!( «mov {tmp}, {x}», «shl {tmp}, 1», «shl {x}, 2», «add {x}, {tmp}», x = inout(reg) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
- Добавлена поддержка деструктурированных (параллельных) присвоений, в которых в левой части выражения указывается несколько типажей, слайсов или структур. Например: let (a, b, c, d, e); (a, b) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
- Предоставлена возможность указания значений по умолчанию для константных дженериков («const generics»): struct ArrayStorage<T, const N: usize = 2> { arr: [T; N], } impl<T> ArrayStorage<T> { fn new(a: T, b: T) -> ArrayStorage<T> { ArrayStorage { arr: [a, b], } } }
- В пакетном менеджере Cargo обеспечен вывод предупреждений об использовании в зависимостях недопустимых конструкций, обрабатываемых из-за ошибок в компиляторе (например, из-за ошибки допускалось заимствование полей упакованных структур в safe-блоках). Поддержка подобных конструкций будет прекращена в будущей версии Rust.
- В cargo и rustc встроена возможность генерации исполняемых файлов, очищенных от отладочных данных (strip = «debuginfo») и символов (strip = «symbols»), без необходимости вызова отдельной утилиты. Настройка очистки реализуется через параметр «strip» в Cargo.toml: [profile.release] strip = «debuginfo», «symbols»
- По умолчанию отключена инкрементальная компиляция. В качестве причины называется временный обход ошибки в компиляторе, приводящей к сбоям и выводу ошибок десериализации. Исправление ошибки уже подготовлено и войдёт в состав следующего выпуска. Для возвращения инкрементальной компиляции можно использовать переменную окружения RUSTC_FORCE_INCREMENTAL=1.
- Chaidh cuibhreann ùr den API a ghluasad chun roinn de stàball, a’ toirt a-steach dòighean agus buileachadh feartan air an socrachadh:
- std::thread::available_parallelism
- Result::copied
- Result::cloned
- arch::asm!
- arch::global_asm!
- ops::ControlFlow::is_break
- ops::ControlFlow::is_continue
- TryFrom for u8
- char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
- iter::zip
- NonZeroU8::is_power_of_two
- NonZeroU16::is_power_of_two
- NonZeroU32::is_power_of_two
- NonZeroU64::is_power_of_two
- NonZeroU128::is_power_of_two
- DoubleEndedIterator для структуры ToLowercase
- DoubleEndedIterator для структуры ToUppercase
- TryFrom<&mut [T]> for [T; N]
- UnwindSafe для структуры Once
- RefUnwindSafe для Once
- встроенные в компилятор функции поддержки armv8 neon для aarch64
- Tha am feart “const”, a tha a’ dearbhadh comasachd a chleachdadh ann an co-theacsa sam bith an àite seasmhach, air a chleachdadh anns na gnìomhan:
- mem::MaybeUninit::as_ptr
- mem::MaybeUninit::assume_init
- mem::MaybeUninit::assume_init_ref
- ffi::CStr::from_bytes_with_nul_unchecked
Source: fosgailtenet.ru