Rust 1.74 бағдарламалау тілінің шығарылымы. RustVMM аудиті. Тұтқырды Rust тілінде қайта жазу

Mozilla жобасы негізін қалаған, бірақ қазір Rust Foundation тәуелсіз коммерциялық емес ұйымының қолдауымен әзірленген Rust 1.74 жалпы мақсаттағы бағдарламалау тілінің шығарылымы жарияланды. Тіл жад қауіпсіздігіне назар аударады және қоқыс жинаушы мен жұмыс уақытын пайдалануды болдырмай, жоғары жұмыс параллелизміне қол жеткізу құралдарын қамтамасыз етеді (орындау уақыты стандартты кітапхананың негізгі инициализациясы мен қызмет көрсетуіне дейін қысқарады).

Rust жадты өңдеу әдістері әзірлеушіні көрсеткіштерді өңдеу кезіндегі қателерден сақтайды және жадтың төменгі деңгейін өңдеуге байланысты туындайтын мәселелерден қорғайды, мысалы, оны босатқаннан кейін жад аймағына қол жеткізу, нөлдік көрсеткіштерге сілтеме жасау, буфердің асып кетуі және т.б. Кітапханаларды тарату, құрастыруды қамтамасыз ету және тәуелділіктерді басқару үшін жоба Cargo пакетінің менеджерін әзірлейді. Crates.io репозиторийіне хостинг кітапханалары үшін қолдау көрсетіледі.

Жадтың қауіпсіздігі Rust бағдарламасында компиляция уақытында анықтамалық тексеру, объект иеленуін қадағалау, объектінің қызмет ету мерзімін (аумақтарын) қадағалау және кодты орындау кезінде жадқа қол жеткізудің дұрыстығын бағалау арқылы қамтамасыз етіледі. Rust сонымен қатар бүтін сандардың толып кетуінен қорғауды қамтамасыз етеді, пайдалану алдында айнымалы мәндерді міндетті түрде инициализациялауды талап етеді, стандартты кітапханада қателерді жақсы өңдейді, әдепкі бойынша өзгермейтін сілтемелер мен айнымалылар тұжырымдамасын қолданады, логикалық қателерді азайту үшін күшті статикалық теруді ұсынады.

Негізгі инновациялар:

  • Бума менеджері манифестімен Cargo.toml файлы арқылы линт тексерулерін конфигурациялау мүмкіндігі қосылды. Жауап деңгейі (тыйым салу, жоққа шығару, ескерту, рұқсат ету) сияқты линт параметрлерін анықтау үшін «[lints]» және «[workspace.lints]» жаңа бөлімдері ұсынылады, оларда өзгерістер туралы шешім қабылдау кезінде ескеріледі. қайта құру. Мысалы, құрастыру немесе қосу кезінде «-F», «-D», «-W» және «-A» жалауларын көрсетудің орнына «#![тыйым салу(қауіпсіз_код)]» және «#![dey(clippy) :” кодының атрибуттары) :enum_glob_use)]" енді Жүк манифестінде қолданылуы мүмкін: [lints.rust] unsafe_code = "тыйым салу" [lints.clippy] enum_glob_use = "dey"
  • Crate пакетінің менеджері репозиторийге қосылу кезінде аутентификация мүмкіндігін қосты. Негізгі пакетке аутентификация параметрлерін Linux тіркелгі деректері дүкендерінде (libsecret негізінде), macOS (Keychain) және Windows (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); // `Өзін-өзі` ескертетін мөлдір емес қайтару түрлері: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Итератор { /* … */ } } trait Trait <'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Байланысты түрді айтатын мөлдір емес қайтару түрлері: impl<'a, T: Trait<'a>> Орауыш<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Итератор { /* … */ } }
  • API жаңа бөлігі тұрақты санатқа ауыстырылды, оның ішінде белгілердің әдістері мен іске асырылуы тұрақтандырылды:
  • Оны тұрақты мәндердің орнына кез келген контексте пайдалану мүмкіндігін анықтайтын "const" атрибуты функцияларда қолданылады:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Қанығу
    • impl From std::process::Stdio үшін
    • impl From std::process::Stdio үшін
    • impl From std::process::Child{Stdin, Stdout, Stderr} үшін
    • impl From 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 үшін
    • импл From<&[T; N]>Vec үшін
    • импл From<&mut [T; N]>Vec үшін
    • импл From<[T; Arc<[T]> үшін N]>
    • импл From<[T; Rc<[T]> үшін N]>
  • Компилятор, құралдар жинағы, стандартты кітапхана және жасалған қолданбаның орындалатын файлдары Apple платформаларына қойылатын талаптарды арттырды, енді іске қосу үшін кемінде macOS 10.12 Sierra, iOS 10 және tvOS 10 қажет.
  • Қолдау көрсетудің үшінші деңгейі i686-pc-windows-gnullvm платформасы үшін жүзеге асырылды. Үшінші деңгей негізгі қолдауды қамтиды, бірақ автоматтандырылған тестілеусіз, ресми құрастыруларды жариялаусыз немесе кодты құрастыру мүмкіндігін тексерусіз.
  • loongarch64-unknown-none мақсатты платформасын қолдаудың екінші деңгейі жүзеге асырылды. Қолдау көрсетудің екінші деңгейі құрастыру кепілдігін қамтиды.

Сонымен қатар, Rust тіліне қатысты екі оқиғаны атап өтуге болады:

  • Ашық бастапқы жобалардың қауіпсіздігін күшейту үшін құрылған OSTIF (Open Source Technology Improvement Fund) тапсырмаға арнайы гипервизорлар мен виртуалды машина мониторларын (VMM) құруға арналған құрамдастарды қамтамасыз ететін RustVMM жобасының аудитінің нәтижелерін жариялады. Жобаны әзірлеуге Intel, Alibaba, Amazon, Google, Linaro және Red Hat сияқты компаниялар қатысуда. Intel Cloud Hypervisor және Dragonball гипервизорлары RustVMM негізінде әзірленуде. Аудит кодтық базаның жоғары сапасын және архитектурада және максималды қауіпсіздікке қол жеткізуге бағытталған енгізуде әдістерді қолдануды растады. Тексеру барысында қауіпсіздікке тікелей әсер етпеген 6 мәселе анықталды.
  • Google Linux ядросының әзірлеушілерінің жіберу тізіміне Rust тілінде қайта жазылған Binder процессаралық байланыс механизмінің жаңа нұсқасын енгізді. Қайта өңдеу қауіпсіздікті нығайту, қауіпсіз бағдарламалау әдістерін ілгерілету және Android жүйесінде жадпен жұмыс істеу кезінде ақауларды анықтау тиімділігін арттыру жобасының бөлігі ретінде жүзеге асырылды (Android жүйесінде анықталған барлық қауіпті осалдықтардың шамамен 70% жадпен жұмыс істеу кезіндегі қателерден туындайды). ). Binder in Rust іске асырылуы C тіліндегі түпнұсқа нұсқасымен функционалдық теңдікке қол жеткізді, барлық AOSP (Android Open-Source Project) сынақтарынан өтті және микробағдарламаның жұмыс басылымдарын жасау үшін пайдаланылуы мүмкін. Екі іске асырудың өнімділігі шамамен бірдей деңгейде (ауытқулар -1.96% және +1.38%).

Ақпарат көзі: opennet.ru

пікір қалдыру