Rust 1.36 ծրագրավորման լեզվի թողարկում

հրապարակված համակարգի ծրագրավորման լեզվի թողարկում Ժանգ 1.36, որը հիմնադրվել է Mozilla նախագծի կողմից։ Լեզուն կենտրոնանում է հիշողության անվտանգության վրա, ապահովում է հիշողության ավտոմատ կառավարում և ապահովում է առաջադրանքների բարձր զուգահեռության հասնելու միջոց՝ առանց աղբահանող սարքի կամ գործարկման ժամանակի օգտագործման:

Rust-ի հիշողության ավտոմատ կառավարումն ազատում է ծրագրավորողին ցուցիչի մանիպուլյացիայից և պաշտպանում է ցածր մակարդակի հիշողության մանիպուլյացիայից առաջացող խնդիրներից, ինչպիսիք են հիշողության ազատ մուտքերը, զրոյական ցուցիչի մատնանշումները, բուֆերների գերակատարումները և այլն: Մշակվում է փաթեթների կառավարիչ՝ գրադարանները բաշխելու, հավաքումն ապահովելու և ծրագրի կողմից կախվածությունները կառավարելու համար: բեռ, որը թույլ է տալիս մեկ սեղմումով ստանալ ծրագրի համար անհրաժեշտ գրադարանները: Գրադարանները հյուրընկալելու համար աջակցվում է պահեստ crates.io.

Հիմնական նորամուծություններ:

  • Հատկանիշը կայունացել է Ապագա, որը ներկայացնում է արժեք, որի գնահատումը դեռ չի ավարտվել async / .wait բլոկների օգտագործման ժամանակ: Future-ի միջոցով սահմանված ասինխրոն արժեքները հնարավորություն են տալիս շարունակել օգտակար աշխատանք կատարել թելի մեջ՝ միաժամանակ սպասելով որոշակի արժեքի հաշվարկների ավարտին.
  • Գրադարանը կայունացել է հատկացնել, որն ապահովում է խելացի ցուցիչներ և հավաքածուներ՝ հիշողության կողմից հատկացված արժեքները կառավարելու համար: Հիշողության տեղաբաշխումը std-ում այժմ օգտագործում է տեսակը Մի բան, որոնք վերաարտահանվում են ալոկ. alloc-ի առանձին օգտագործումը իմաստ ունի այն հավելվածներում, որոնք կապված չեն std-ի հետ («#![no_std]»), ինչպես նաև գրադարաններում, որոնք նախատեսված են առանց std-ի նմանատիպ ծրագրերում օգտագործելու համար;
  • Արժեքների ճիշտ սկզբնավորման ստուգումները շրջանցելու համար առաջարկել է միջանկյալ տեսակ Գուցե միավոր, որը կարող է օգտագործվել mem::uniitialized ֆունկցիայի փոխարեն՝ որպես ավելի անվտանգ այլընտրանք։ Mem::uniitialized ֆունկցիան հարմար է զանգվածներ արագ ստեղծելու համար, բայց այն մոլորեցնում է կոմպիլյատորին, քանի որ այն կարծես սկզբնավորվել է, բայց իրականում արժեքը մնում է չնախաստորագրված: MaybeUninit-ը թույլ է տալիս բացահայտորեն ցույց տալ կոմպիլյատորին, որ արժեքը չնախաձեռնված է, հաշվի առնել դրա հետ կապված հնարավոր չսահմանված վարքագիծը, ինչպես նաև կազմակերպել ստուգումներ ծրագրերում «maybe_t:» և քայլ առ քայլ սկզբնավորման միջոցով՝ նշելով դրա ավարտը: օգտագործելով «.assume_init()» զանգը: MaybeUninit-ի գալուստով mem::uniitialized ֆունկցիան հնացել է և խորհուրդ չի տրվում օգտագործել;
  • NLL (Non-Lexical Lifetimes) տեխնիկան, որն ընդլայնել է փոխառված փոփոխականների կյանքի տևողությունը գրանցելու համակարգը, կայունացվել է Rust 2015 լեզվի համար (սկզբում NLL-ն աջակցվում էր միայն Rust 2018-ի կողմից): Լեքսիկական մակարդակում ժամկետներ սահմանելու փոխարեն, NLL-ն դա անում է կատարման հոսքի գրաֆիկի ցուցիչների բազմության մակարդակում: Այս մոտեցումը թույլ է տալիս բարձրացնել փոփոխականների փոխառության ստուգման որակը (borrow checker) և թույլ տալ կատարել որոշ տեսակի ճիշտ կոդեր, որոնց օգտագործումը նախկինում հանգեցրել է սխալի։ Նոր վարքագիծը նաև շատ ավելի հեշտ է դարձնում վրիպազերծումը.
  • Ներառված է ասոցիատիվ զանգվածների նոր իրականացում HashMap, կառուցվածքի կիրառման հիման վրա Շվեյցարական սեղան (ավտոմատ բեռնված hashbrown::HashMap, եթե այլ բան հստակորեն նշված չէ, օրինակ՝ std::HashMap, որը հիմնված է SipHash 1-3-ի վրա): Ծրագրային ապահովման ինտերֆեյսը մնում է նույնը, և ծրագրավորողի համար նկատելի տարբերությունները հանգում են կատարողականի բարձրացման և հիշողության սպառման նվազեցմանը.
  • Փաթեթի մենեջերի բեռների մեջ ավելացրել է «--անցանց» տարբերակը, որը հնարավորություն է տալիս գործել առանց ցանց մուտք գործելու, որում կախվածություն տեղադրելիս օգտագործվում են միայն տեղական համակարգում քեշավորված փաթեթները: Եթե ​​կախվածությունը տեղական քեշում չէ, սխալ կհայտնվի: Նախքան ցանցից դուրս գալը կախվածությունները տեղական քեշում նախապես բեռնելու համար կարող եք օգտագործել «բեռների առբերում» հրամանը.
  • Իրականացրել է մակրո «dbg!» անվանելու հնարավորությունը: նշելով մի քանի փաստարկներ;
  • Մեթոդների համար օգտագործվում է «const» հատկանիշը, որը որոշում է հաստատունների փոխարեն ցանկացած համատեքստում օգտագործելու հնարավորությունը
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::կախված ու
    NonNull::cast;

  • API-ների նոր մասը փոխանցվել է կայուն կատեգորիայի՝ ներառյալ կայունացված մեթոդները
    առաջադրանք::Ուակեր, առաջադրանք::Հարցում,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::պատճենված,
    BorrowMut (տողերի համար) և str::as_mut_ptr:

Source: opennet.ru

Добавить комментарий