Rust 1.39 Варақаи забони барномасозӣ

нашр шудааст нашри забони барномасозии система Занги 1.39, аз ҷониби лоиҳаи Mozilla таъсис дода шудааст. Забон ба бехатарии хотира тамаркуз мекунад, идоракунии автоматии хотираро таъмин мекунад ва воситаеро барои ноил шудан ба параллелизми баланди вазифаҳо бидуни истифодаи коллектор ё вақти корӣ таъмин мекунад.

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

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

  • Муътадил гардид синтаксиси нави барномасозии асинхронӣ дар асоси функсияи "асинхронӣ", блоки ҳаракати асинхронӣ { ... } ва оператори ".await", ки навиштани коркардкунандагонро, ки ҷараёни фармони асосиро манъ намекунанд, осон мекунад. Дар муқоиса бо API-и қаблан пешниҳодшуда барои вуруди асинхронӣ / баромад, конструксияҳои async/.await барои фаҳмидан осон, хеле хондан мумкин аст ва ба шумо имкон медиҳад, ки бо истифода аз усулҳои идоракунии ҷараёни шинос дар асоси ҳалқаҳо, изҳороти шартӣ ва истисноҳо амалҳои мутақобилаи мураккаби асинхронӣ дошта бошед.

    Синтаксиси Async-await ба шумо имкон медиҳад, ки функсияҳое эҷод кунед, ки метавонанд иҷрои онҳоро таваққуф кунанд, назоратро ба риштаи асосӣ баргардонанд ва сипас иҷроро аз ҷое, ки онҳо мондаанд, идома диҳанд. Масалан, чунин таваққуф ҳангоми коркарди воридот ва баромад зарур аст, ки дар он ҳангоми интизории омадани порчаи навбатии додаҳо дигар корҳоро анҷом додан мумкин аст. Функсияҳо ва блокҳои бо "async fn" ва "async move" муайяншуда хислатро бармегардонанд оянда, ки муаррифии ҳисобҳои асинхронии таъхиршударо муайян мекунад. Шумо метавонед бевосита бо истифода аз оператори ".await" ҳисобкунии таъхирро оғоз кунед ва натиҷаро ба даст оред. То он даме, ки .await даъват карда нашавад, ягон амал иҷро намешавад ё пешакӣ ба нақша гирифта намешавад, ки имкон медиҳад, ки сохторҳои мураккаби лонашуда бидуни сарбории иловагӣ эҷод карда шаванд.

    async fn first_function() -> u32 { .. }
    ...
    бигзор оянда = first_function();
    ...
    бигзор натиҷа: u32 = future.await;

  • Муътадил гардид "#![функсия(боб_бо_ҳаракат_намудҳои_муҳофизаткунандагон)]", имкон медиҳад, ки истифодаи тағирёбандаҳо бо навъи ҳатмӣ "бо ҳаракат" дар қолабҳо истифода баред ва истинод ба ин тағирёбандаҳоро дар бахши "агар" -и ифодаи "гӯгирд". Масалан, ҳоло ба сохтмонҳои зерин иҷозат дода мешавад:

    fn main() {
    массиви let: Box<[u8; 4]> = Қутти::нав([1, 2, 3, 4]);

    массиви мувофиқ {
    нум
    агар nums.iter ().sum::() == 10

    => {
    тарки (рақамҳо);
    }
    _ => дастнорас!(),
    }
    }

  • Нишондод иҷозат дода шудааст атрибутҳо ҳангоми муайян кардани параметрҳои функсия, бастаҳо ва нишондиҳандаҳои функсия. Атрибутҳои компиляцияи шартӣ (cfg, cfg_attr), ки ташхисро тавассути lint (иҷоза додан, огоҳ кардан, рад кардан ва манъ кардан) назорат мекунанд ва атрибутҳои ёрирасони даъвати макрос дастгирӣ мешаванд.

    fn len (
    #[cfg(windows)] бурида: &[u16], // параметрро дар Windows истифода баред
    #[cfg(не(windows))] бурида: &[u8], // дар дигар ОС истифода кунед
    ) -> истифода бурдан {
    slice.len()
    }

  • Огоҳӣ дар бораи мушкилоте, ки ҳангоми санҷиши қарзгирии тағирёбандаҳо (тафтишоти қарз) бо истифода аз техникаи NLL (Non-Lexical Lifetimes) муайян карда шудаанд, тарҷума шудааст ба категорияи хатогиҳои марговар. Ёдовар мешавем, ки системаи тафтиш дар асоси механизми нави ба ҳисоб гирифтани мӯҳлати истифодабарии тағирёбандаҳои қарзӣ имкон дод, ки баъзе мушкилоте, ки аз ҷониби коди санҷиши кӯҳна нодида гирифта шудаанд, муайян карда шаванд. Азбаски баромади хатогӣ барои чунин санҷишҳо метавонад ба мутобиқат бо коди қаблан коркунанда таъсир расонад, дар аввал ба ҷои хатогиҳо огоҳиҳо дода мешуданд. Ҳоло огоҳиҳо ҳангоми кор дар реҷаи Rust 2018 бо хатогиҳо иваз карда шуданд. Дар нашри навбатӣ, баромади хатогӣ низ дар ҳолати Rust 2015 амалӣ карда мешавад, ки дар ниҳоят аз санҷиши қарзи кӯҳна халос мешавад;
  • Аттрибути "const", ки имкони истифода дар ҳама гуна контекст ба ҷои константаҳоро муайян мекунад, барои функсияҳои Vec::new, String::new, LinkedList::new, str::len, [T]::len истифода мешавад. , str::as_bytes,
    abs, wrapping_abs ва overflowing_abs;

  • Қисмати нави APIҳо ба категорияи устувор, аз ҷумла усулҳое, ки мӯътадил шудаанд, гузаронида шуд
    Pin ::into_inner, Instant ::checked_duration_sice ва Instant ::saturating_duration_sice;

  • Менеҷери бастаи боркаш ҳоло имкон дорад, ки тамдиди ".toml" -ро барои файлҳои конфигуратсия истифода барад. Дастгирии пешакӣ барои сохтани китобхонаи стандартӣ мустақиман аз Cargo илова карда шуд. Ба ҷои парчами баҳсбарангези "--all" парчами "--workspace" илова карда шуд. Майдони нав ба метамаълумот илова карда шуд "чоп кардан", ки ба шумо имкон медиҳад вобастагиҳоро тавассути муайян кардани теги git ва рақами версия интишор кунед. Варианти санҷишии "-Ztimings" илова карда шуд, то гузориши HTML дар бораи вақти иҷрои марҳилаҳои гуногуни тартибдиҳӣ тавлид кунад.
  • Дар compiler rustc паёмҳои ташхисӣ буридани думҳои кодро дар бар мегиранд, ки ба терминал мувофиқат намекунанд. Сатҳи сеюми дастгирӣ барои платформаҳои мавриди ҳадаф
    i686-uefi-номаълум ва sparc64-номаълум-openbsd. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматӣ ва нашри сохторҳои расмӣ.

Манбаъ: opennet.ru

Илова Эзоҳ