Објавување на програмскиот јазик Rust 1.74. Ревизија на RustVMM. Препишување врзивно средство во 'рѓа

Објавено е објавувањето на програмскиот јазик за општа намена Rust 1.74, основан од проектот Mozilla, но сега развиен под покровителство на независната непрофитна организација Rust Foundation. Јазикот се фокусира на безбедноста на меморијата и обезбедува средства за постигнување на висок паралелизам на работните места, притоа избегнувајќи употреба на собирач на ѓубре и време на работа (времето на работа е сведено на основна иницијализација и одржување на стандардната библиотека).

Методите за ракување со меморијата на Rust го спасуваат развивачот од грешки при манипулирање со покажувачите и го штитат од проблеми што се јавуваат поради ракување со меморијата на ниско ниво, како што се пристап до мемориската област откако ќе се ослободи, дереференцирање на нула покажувачи, пречекорувања на баферот итн. За да се дистрибуираат библиотеки, да се обезбедат градби и да управуваат со зависности, проектот го развива менаџерот на пакети Cargo. Репозиториумот crates.io е поддржан за хостирање библиотеки.

Безбедноста на меморијата е обезбедена во Rust за време на компајлирањето преку проверка на референци, следење на сопственоста на објектот, следење на животниот век на објектите (обеми) и проценка на исправноста на пристапот до меморијата за време на извршувањето на кодот. Rust исто така обезбедува заштита од прелевање на цели броеви, бара задолжителна иницијализација на вредностите на променливите пред употреба, подобро се справува со грешките во стандардната библиотека, стандардно го применува концептот на непроменливи референци и променливи, нуди силно статичко пишување за да се минимизираат логичките грешки.

Главните иновации:

  • Додадена е способност за конфигурирање на проверки на жици преку датотеката Cargo.toml со манифестот на менаџерот на пакети. За да се дефинираат поставките за влакненца, како што е нивото на одговор (забрани, одбие, предупредува, дозволи), се предлагаат нови делови „[lints]“ и „[workspace.lints]“, промените во кои се земаат предвид при донесување одлука за обнова. На пример, наместо да ги наведете знаменцата „-F“, „-D“, „-W“ и „-A“ при составување или додавање на „#![forbid(unsafe_code)]“ и „#![негирај(clippy) :” атрибути на кодот) :enum_glob_use)]" сега може да се користи во Карго манифестот: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "негирај"
  • Управувачот со пакети Crate додаде можност за автентикација кога се поврзувате со складиште. Основната дистрибуција вклучува поддршка за поставување параметри за автентикација во продавници за акредитиви на Linux (врз основа на libsecret), macOS (Keychain) и Windows (Windows Credential Manager), но системот првично беше направен модуларен и ви овозможува да организирате работа со различни провајдери за складирање и генерирање токени, на пример, подготвен е додаток за користење на менаџерот за лозинки 1Password. За секоја операција, складиштето може да бара автентикација, а не само да потврди дека пакетите се објавени. ~/.cargo/config.toml [регистар] global-credential-providers = ["cargo:token", "cargo: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 { /* … */ } } особина Особина<'a> { тип Доц; fn new() -> Self::Assoc; } impl Trait<'_> for () { 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
    • јадро::број::Заситеност
    • импл Од за std::process::Stdio
    • импл Од за std::process::Stdio
    • импл Од за std::process::Child{Stdin, Stdout, Stderr}
    • импл Од за 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::Грешка::друго
    • импл TryFrom за u16
    • импл Од<&[T; N]>за Век
    • импл Од<&mut [T; N]>за Век
    • импл Од<[T; N]> за Arc<[T]>
    • импл Од<[T; N]> за Rc<[T]>
  • Компајлерот, комплетот со алатки, стандардната библиотека и генерираните извршни датотеки ги зголемија барањата за платформите на Apple, па сега се потребни најмалку macOS 10.12 Sierra, iOS 10 и tvOS 10 објавени во 2016 година за да се извршуваат.
  • Третото ниво на поддршка е имплементирано за платформата i686-pc-windows-gnullvm. Третото ниво вклучува основна поддршка, но без автоматско тестирање, објавување на официјални изданија и верификација на градежливоста на кодот.
  • Второто ниво на поддршка за целната платформа loongarch64-unknown-none е имплементирано. Второто ниво на поддршка вклучува гаранција за склопување.

Дополнително, може да се забележат два настани поврзани со јазикот Руст:

  • OSTIF (Фонд за подобрување на технологијата со отворен код), создаден за зајакнување на безбедноста на проектите со отворен код, ги објави резултатите од ревизијата на проектот RustVMM, кој обезбедува компоненти за креирање хипервизори специфични за задачи и монитори на виртуелни машини (VMM). Во развојот на проектот учествуваат компании како Интел, Алибаба, Амазон, Гугл, Линаро и Ред Хет. Интел 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

Додадете коментар