Rust 1.66 scaoileadh teanga cláir

Tá scaoileadh na teanga ríomhchláraithe ilchuspóireach Rust 1.66, a bhunaigh an tionscadal Mozilla, ach atá forbartha anois faoi choimirce na heagraíochta neamhspleách neamhbhrabúis Rust Foundation, foilsithe. Díríonn an teanga ar shábháilteacht chuimhne agus cuireann sé bealaí ar fáil chun comhthreomhaireacht ard poist a bhaint amach agus úsáid á baint as bailitheoir truflais agus am rite a sheachaint (laghdaítear am rite go buntúsú agus cothabháil na leabharlainne caighdeánach).

Sábhálann modhanna láimhseála cuimhne Rust an forbróir ó earráidí nuair a bhíonn leideanna á n-ionramháil agus cosnaíonn siad i gcoinne fadhbanna a thagann chun cinn mar gheall ar láimhseáil cuimhne ar leibhéal íseal, mar shampla rochtain a fháil ar limistéar cuimhne tar éis é a shaoradh, leideanna nialais a dhíroghnú, róchaiteachas maoláin, etc. Chun leabharlanna a dháileadh, tógáil a sholáthar agus spleáchais a bhainistiú, forbraíonn an tionscadal an bainisteoir pacáiste lasta. Tacaítear leis an stór crates.io chun leabharlanna a óstáil.

Cuirtear sábháilteacht chuimhne ar fáil i Rust ag am tiomsaithe trí sheiceáil tagartha, súil a choinneáil ar úinéireacht réad, súil a choinneáil ar shaolréanna réad (scóip), agus measúnú a dhéanamh ar cheart an rochtain chuimhne le linn fhorghníomhú an chóid. Soláthraíonn Rust cosaint freisin i gcoinne ró-shreabhadh slánuimhir, éilíonn túsú éigeantach luachanna athraitheacha roimh úsáid, láimhseálann sé earráidí níos fearr sa leabharlann caighdeánach, cuireann sé coincheap na dtagairtí agus na n-athróg do-athraithe i bhfeidhm de réir réamhshocraithe, cuireann clóscríobh statach láidir ar fáil chun earráidí loighciúla a íoslaghdú.

Príomh-nuálaíochtaí:

  • В перечислениях c целочисленными представлениями (атрибутом «#[repr(Int)]») разрешено явное указание дискриминанта (номера варианта в перечислении), даже если перечисление содержит поля. #[repr(u8)] enum Foo { A(u8), # дискриминант 0 B(i8), # дискриминант 1 C(bool) = 42, # дискриминант 42 }
  • Добавлена функция core::hint::black_box, которая просто возвращает назад принятое значение. Так как компилятор считает, что данная функция выполняет определённое действие, функцию black_box можно использовать для отключения оптимизации компилятором циклов при проведении тестирования производительности кода или при изучении генерируемого машинного кода (чтобы компилятор не посчитал код неиспользуемым и не убрал его). Например, в примере ниже указание black_box(v.as_ptr()) не позволяет компилятору считать, что вектор v не используется. use std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • В пакетном менеджере «cargo» предложена команда «remove», позволяющая из командной строки удалять зависимости из манифеста Cargo.toml.
  • Aistríodh cuid nua den API chuig an gcatagóir de chobhsaí, lena n-áirítear modhanna agus cur i bhfeidhm na dtréithe a chobhsú:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Реализации Add AsFd для типов блокировок stdio при применении WASI.
    • impl TryFrom<Vec<T>> для Box<[T; N]>
    • core::hint::black_box
    • Duration::try_from_secs_{f32,f64}
    • Option::unzip
    • std::os::fd
  • В шаблонах разрешено применение диапазонов «..X» и «..=X».
  • При сборке фронтэнда компилятора rustc и бэкенда LLVM задействованы режимы оптимизации LTO (Link Time Optimization) и BOLT (Binary Optimization and Layout Tool), позволяющие увеличить производительность результирующего кода и снизить потребление памяти.
  • Реализован третий уровень поддержки для платформ armv5te-none-eabi и thumbv5te-none-eabi. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
  • Добавлена поддержка связывания с универсальными библиотеками macOS.

Дополнительно можно отметить включение в кодовую базу GCC фронтэнда компилятора языка Rust (gccrs). Фронтэнд включён в ветку GCC 13, релиз которой состоится в мае 2023 года. Начиная с GCC 13 штатный инструментарий GCC сможет использоваться для компиляции программ на языке Rust без необходимости установки компилятора rustc, построенного с использованием наработок LLVM. Реализация Rust в GCC 13 будет иметь статус бета-версии, не включаемой по умолчанию.

Foinse: oscailtenet.ru

Add a comment