Нашри забони барномасозии Rust 1.74. Аудити RustVMM. Навиштани Биндер дар Rust

Нашри забони барномасозии Rust 1.74, ки аз ҷониби лоиҳаи Mozilla асос ёфтааст, аммо ҳоло таҳти сарпарастии созмони мустақили ғайритиҷоратии Rust Foundation таҳия шудааст, нашр шуд. Забон ба бехатарии хотира тамаркуз мекунад ва воситаҳоро барои ноил шудан ба параллелизми баланди кор ҳангоми канорагирӣ аз истифодаи коллектори партовҳо ва вақти корӣ таъмин мекунад (вақти кор то оғозкунии асосӣ ва нигоҳдории китобхонаи стандартӣ кам карда мешавад).

Усулҳои коркарди хотираи Rust таҳиякунандаро аз хатогиҳо ҳангоми коркарди нишонаҳо наҷот медиҳанд ва аз мушкилоте, ки дар натиҷаи коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, барҳам додани ишораҳои нул, изофаи буфер ва ғайра муҳофизат мекунад. Барои паҳн кардани китобхонаҳо, таъмин кардани сохтан ва идоракунии вобастагӣ, лоиҳа менеҷери бастаи боркашониро таҳия мекунад. Анбори crates.io барои хостинги китобхонаҳо дастгирӣ карда мешавад.

Бехатарии хотира дар Rust дар вақти тартибдиҳӣ тавассути санҷиши истинод, нигоҳ доштани моликияти объект, нигоҳ доштани мӯҳлати умри объект (миқёс) ва арзёбии дурустии дастрасии хотира ҳангоми иҷрои код таъмин карда мешавад. Rust инчунин муҳофизатро аз фаромадани ададҳо таъмин мекунад, пеш аз истифода оғозкунии ҳатмии арзишҳои тағирёбандаро талаб мекунад, хатогиҳоро дар китобхонаи стандартӣ беҳтар идора мекунад, консепсияи истинодҳо ва тағирёбандаҳоро ба таври нобаёнӣ татбиқ мекунад, чопкунии қавии статикиро барои кам кардани хатогиҳои мантиқӣ пешниҳод мекунад.

Навовариҳои асосӣ:

  • Имконияти танзими чекҳои линт тавассути файли Cargo.toml бо манифести мудири бастаҳо илова карда шуд. Барои муайян кардани танзимоти линт, аз қабили сатҳи посух (манъ кардан, рад кардан, огоҳ кардан, иҷозат додан) бахшҳои нави "[lints]" ва "[workspace.lints]" пешниҳод карда мешаванд, ки тағирот ҳангоми қабули қарор дар бораи онҳо ба назар гирифта мешаванд. аз нав сохтан. Масалан, ба ҷои муайян кардани парчамҳои “-F”, “-D”, “-W” ва “-A” ҳангоми ҷамъ кардан ё илова кардани “#! :” атрибутҳо ба код) :enum_glob_use)]" акнун метавонад дар манифести боркаш истифода шавад: [lints.rust] unsafe_code = "манъ" [lints.clippy] enum_glob_use = "рад"
  • Менеҷери бастаи Crate қобилияти тасдиқи аутентификатсияро ҳангоми пайвастшавӣ ба анбор илова кардааст. Бастаи асосӣ дастгирии ҷойгиркунии параметрҳои аутентификатсияро дар мағозаҳои эътимоднокии Linux (дар асоси libsecret), macOS (Keychain) ва Windows (Менеҷери Credential Windows) дар бар мегирад, аммо система дар аввал модулӣ сохта шудааст ва ба шумо имкон медиҳад кор бо провайдерҳои гуногун барои нигоҳдорӣ ва тавлиди нишонаҳо, масалан, плагин барои истифодаи мудири пароли 1Password омода шудааст. Аутентификатсия метавонад аз ҷониби анбор барои ҳама гуна амалиёт талаб карда шавад, на танҳо барои тасдиқи интишори бастаҳо. ~/.cargo/config.toml [registry] global-credential-providers = ["бор:токен", "бор:libsecret"]
  • Дастгирии пешгӯиҳои навъи бозгашт (impl_trait_projections) мӯътадил карда шуд, ки имкон медиҳад Self ва T:: Assoc дар навъҳои бозгашт ба монанди "async fn" ва "->impl Trait" зикр шаванд. struct Wrapper<'a, T>(&'a T); // Навъҳои баргардонидани шаффоф, ки `Self`-ро зикр мекунанд: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } trait Trait<'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> барои () { type Assoc = (); fn new() {} } // Навъҳои баргардонидани шаффоф, ки навъи алоқамандро зикр мекунанд: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
  • Аттрибути "const", ки имкони истифодаи онро дар ҳама гуна контекст ба ҷои доимӣ муайян мекунад, дар функсияҳо истифода мешавад:
    • аслӣ :: mem :: transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • аслӣ ::num::Saturating
    • impl Аз барои std::process::Stdio
    • impl Аз барои std::process::Stdio
    • impl Аз барои std::process::Child{Stdin, Stdout, Stderr}
    • impl Аз барои std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std ::ffi :: OsString :: into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std ::ffi ::OsStr ::as_encoded_bytes
    • std ::io::Хато ::дигар
    • impl TryFrom барои u16
    • ишорат Аз<&[Т; N]>барои Век
    • ишорат Аз<&мут [Т; N]>барои Век
    • ишорат Аз<[Т; N]> барои Arc<[T]>
    • ишорат Аз<[Т; N]> барои Rc<[T]>
  • Компилятор, асбобҳо, китобхонаи стандартӣ ва барномаҳои иҷрошавандаи тавлидшуда талаботро барои платформаҳои Apple зиёд кардаанд, ки ҳоло ҳадди аққал MacOS 10.12 Sierra, iOS 10 ва tvOS 10-ро, ки соли 2016 бароварда шудаанд, талаб мекунанд.
  • Сатҳи сеюми дастгирӣ барои платформаи i686-pc-windows-gnullvm амалӣ карда шудааст. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматикунонидашуда, нашри сохторҳои расмӣ ва санҷиши қобилияти сохтани код.
  • Сатҳи дуюми дастгирӣ барои платформаи мақсаднок loongarch64-unknown-none амалӣ карда шуд. Сатҳи дуюми дастгирӣ кафолати васлкуниро дар бар мегирад.

Илова бар ин, ду ҳодисаи марбут ба забони русиро метавон қайд кард:

  • OSTIF (Фонди такмили технологияҳои кушода), ки барои таҳкими амнияти лоиҳаҳои кушодаасос таъсис дода шудааст, натиҷаҳои аудити лоиҳаи RustVMM-ро нашр кард, ки ҷузъҳоро барои эҷоди гипервизорҳои мушаххас ва мониторҳои мошини виртуалӣ (VMMs) таъмин мекунад. Дар таҳияи лоиҳа ширкатҳо аз қабили Intel, Alibaba, Amazon, Google, Linaro ва Red Hat иштирок доранд. Гипервизорҳои Intel Cloud Hypervisor ва Dragonball дар асоси RustVMM таҳия карда мешаванд. Аудит сифати баланди базаи рамзӣ ва истифодаи техникаро дар меъморӣ ва татбиқи он, ки ба ноил шудан ба ҳадди аксар бехатарӣ нигаронида шудааст, тасдиқ кард. Дар рафти тафтиш 6 пробле-мае муайян карда шуд, ки ба техникам бехатарй таъсири бевосита нарасонда-аст.
  • Google татбиқи нави механизми муоширати байнипротсесси Binder-ро, ки дар Rust аз нав навишта шудааст, ба рӯйхати ирсолии таҳиягарони ядрои Linux муаррифӣ кард. Корҳои такрорӣ дар доираи лоиҳаи таҳкими амният, пешбурди усулҳои бехатари барномасозӣ ва баланд бардоштани самаранокии муайян кардани мушкилот ҳангоми кор бо хотира дар Android анҷом дода шуданд (тақрибан 70% тамоми осебпазириҳои хатарнок дар Android аз хатогиҳо ҳангоми кор бо хотира ба вуҷуд меоянд. ). Татбиқи Binder дар Rust дар функсионалӣ бо версияи аслӣ дар забони C баробарӣ ба даст овардааст, аз ҳама санҷишҳои AOSP (Android Open-Source Project) мегузарад ва метавонад барои сохтани версияҳои кории нармафзор истифода шавад. Иҷрои ҳарду татбиқ тақрибан дар як сатҳ аст (инҳироф дар ҳудуди -1.96% ва +1.38%).

Манбаъ: opennet.ru

Илова Эзоҳ