Rust ծրագրավորման լեզվի թողարկում 2021 (1.56)

Հրապարակվել է համակարգային ծրագրավորման լեզվի Rust 1.56 թողարկումը, որը հիմնադրվել է Mozilla նախագծի կողմից, բայց այժմ մշակվել է անկախ ոչ առևտրային կազմակերպություն Rust Foundation-ի հովանու ներքո: Սովորական տարբերակի համարից բացի, թողարկումը կոչվում է նաև Rust 2021 և նշանավորում է վերջին երեք տարիների ընթացքում առաջարկված փոփոխությունների կայունացումը: Rust 2021-ը նաև հիմք կհանդիսանա հաջորդ երեք տարիների ընթացքում ֆունկցիոնալության բարձրացման համար, նման այն բանին, թե ինչպես Rust 2018 թողարկումը հիմք հանդիսացավ լեզվի մշակման համար վերջին երեք տարիների ընթացքում:

Համատեղելիությունը պահպանելու համար մշակողները կարող են օգտագործել իրենց ծրագրերում «2015», «2018» և «2021» պիտակները՝ ծրագրերը կապելու ընտրված Rust տարբերակներին համապատասխանող լեզվի վիճակի հատվածների հետ։ Տարբերակները ներկայացվել են անհամատեղելի փոփոխությունները առանձնացնելու համար և կարգավորվում են cargo փաթեթի մետատվյալներում՝ «[փաթեթ]» բաժնի «տարբերակ» դաշտի միջոցով։ Օրինակ, «2018» տարբերակը ներառում է 2018 թվականի վերջում կայունացված ֆունկցիոնալությունը և ներառում է նաև բոլոր ապագա փոփոխությունները, որոնք չեն խախտում համատեղելիությունը։ «2021» տարբերակը լրացուցիչ ներառում է ընթացիկ 1.56 թողարկման մեջ առաջարկված և ապագա ներդրման համար հաստատված խախտումներ առաջացնող գործառույթներ։ Բացի լեզվից, տարբերակները հաշվի են առնում նաև գործիքակազմի և փաստաթղթերի վիճակը։

Rust 2021-ում ամրագրված հիմնական անհամատեղելիություններն են.

  • Առանձին գրանցում փակումներում - Փակումները այժմ կարող են գրանցում առանձին դաշտերի անունները՝ ամբողջ նույնականացուցիչի փոխարեն: Օրինակ՝ «|| ax + 1»-ը կգրանցի միայն «ax»-ը՝ «a»-ի փոխարեն:
  • Զանգվածների IntoIterator հատկանիշը՝ array.into_iter() ֆունկցիան թույլ է տալիս իտերացիա կատարել զանգվածի տարրերի վրա արժեքներով, այլ ոչ թե հղումներով։
  • Macro_rules-ում փոխվել է նախշերում "|" արտահայտությունների (տրամաբանական ԿԱՄ գործողություն) մշակումը. համընկնումների ":pat" սպեցիֆիկատորն այժմ հաշվի է առնում "A | B" նախշերը։
  • Cargo փաթեթների կառավարիչն այժմ ներառում է ֆունկցիաների լուծիչի երկրորդ տարբերակը, որը լռելյայն ներկայացվել էր Rust 1.51-ում։
  • TryFrom, TryInto և FromIterator հատկանիշները ավելացվել են նախերգանքի ստանդարտ գրադարանի մոդուլին։
  • Panic!(..) և assert!(expr, ..) մակրոները այժմ միշտ օգտագործում են format_args!(..)՝ տողերը ձևաչափելու համար, նման println!()-ին։
  • Լեզվի շարահյուսությունում պահպանված են ident#, ident»…» և ident'…' արտահայտությունները։
  • bare_trait_objects և ellipsis_inclusive_range_patterns նախազգուշացումները վերածվել են սխալների։

Ի՞նչ նորություններ կան Rust 1.56-ում։

  • Cargo.toml-ում, «[փաթեթ]» բաժնում, ավելացվել է rust-version դաշտ, որի միջոցով կարող եք որոշել Rust-ի նվազագույն աջակցվող տարբերակը crate փաթեթի համար: Եթե ընթացիկ տարբերակը չի համապատասխանում նշված պարամետրին, Cargo-ն կդադարի աշխատել և կարտացոլի սխալ:
  • Երբ կաղապարը համընկնում է «binding @ pattern» արտահայտությունների միջոցով, այժմ աջակցություն է իրականացվում լրացուցիչ կապեր նշելու համար (օրինակ՝ "let matrix @ Matrix { row_len, .. } = get_matrix();"):
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • std::os::unix::fs::chroot
    • ԱնապահովCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • Տող::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • «Const» դրոշը, որը սահմանում է ցանկացած համատեքստում օգտագործման հնարավորությունը հաստատունների փոխարեն, կիրառվում է ֆունկցիաներում։
    • std::mem::transmute
    • [T]::first
    • [T]::split_first
    • [T]::վերջին
    • [T]::split_last
  • Կոմպիլյատորը փոխվել է LLVM 13-րդ տարբերակի օգտագործման համար։
  • Երկրորդ մակարդակը aarch64-apple-ios-sim հարթակի և երրորդ մակարդակը powerpc-unknown-freebsd և riscv32imc-esp-espidf հարթակների համար արդեն ներդրված է։ Երրորդ մակարդակը ենթադրում է հիմնական աջակցություն, բայց առանց ավտոմատացված թեստավորման, պաշտոնական տարբերակների հրապարակման և կոդի կառուցման ունակության ստուգման։

Հիշենք, որ Rust լեզուն կենտրոնացած է հիշողության անվտանգության վրա, ապահովում է հիշողության ավտոմատ կառավարում և հնարավորություն է տալիս հասնել առաջադրանքների կատարման բարձր զուգահեռության՝ առանց աղբահավաքի և գործարկման ժամանակի օգտագործման (գործարկման ժամանակը կրճատվում է ստանդարտ գրադարանի հիմնական նախնականացման և սպասարկման):

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

Source: opennet.ru

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster