Выпуск мовы праграмавання Rust 1.43

Апублікаваны рэліз мовы сістэмнага праграмавання Іржа 1.43, заснаванага праектам Mozilla. Мова сфакусаваная на бяспечнай працы з памяццю, забяспечвае аўтаматычнае кіраванне памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і час выканання.

Аўтаматычнае кіраванне памяццю ў Rust пазбаўляе распрацоўніка ад маніпулявання паказальнікамі і абараняе ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэння зборкі і кіравання залежнасцямі праектам развіваецца пакетны менеджэр грузавы, які дазваляе атрымаць патрэбныя для праграмы бібліятэкі ў адзін клік. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.

Асноўныя навіны:

  • У макрасах забяспечана магчымасць выкарыстання фрагментаў элементаў для іх ператварэння ў код тыпажоў (trait), рэалізацый (impl) або вонкавых блокаў. Напрыклад:

    macro_rules! mac_trait {
    ($i:item) => {
    trait T { $i }
    }
    }
    mac_trait! {
    fn foo() {}
    }

    Прывядзе да генерацыі:

    trait T {
    fn foo() {}
    }

  • Палепшана вызначэнне тыпу прымітываў, спасылак і двайковых аперацый.
    Напрыклад, наступны код, раней які выклікаў памылку, зараз зможа быць скампіляваны (Rust зараз карэктна вызначае, што 0.0 і &0.0 павінны быць тыпу f32):

    let n: f32 = 0.0 + &0.0;

  • У Cargo дададзена новая зменная асяроддзі CARGO_BIN_EXE_{імя}, якая выстаўляецца пры пабудове інтэграцыйных тэстаў і якая дазваляе вызначыць поўны шлях да выкананага файла, вызначанага ў секцыі «[[bin]]» пакета.
  • У выразах "if" дазволена выкарыстанне атрыбутаў, такіх як "#[cfg()]".
  • У бібліятэцы прадастаўлена магчымасць выкарыстання асацыіраваных канстант напрамую для цэлых і дробавых тыпаў, без імпарту модуля. Напрыклад, можна адразу пісаць u32::MAX ці f32::NAN без папярэдняга ўказання "use std::u32" і "use std::f32".
  • Дададзены новы модуль прымітыўны, Які рээкспартуе прымітыўныя тыпы Rust, напрыклад, калі неабходна напісаць макрас і пераканацца, што тыпы не схаваныя.
  • У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны

    Once::is_completed,
    f32::LOG10_2,
    f32::LOG2_10,
    f64::LOG10_2,
    f64::LOG2_10 і
    iter::once_with.

Крыніца: opennet.ru

Дадаць каментар