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

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

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

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

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

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

    Ամբողջական ինդեքսը ներբեռնելու հետևանքով առաջացած ձգձգումները նվազեցնելու համար Sparse-ը Git-ի միջոցով ինդեքս մուտք գործելու փոխարեն ներառում է HTTPS-ով ուղղակի ներբեռնում միայն անհրաժեշտ ինդեքսային տվյալները՝ ծածկելով որոշակի նախագծի կախվածությունը: Նոր ծառայություն՝ index.crates.io, օգտագործվում է ինդեքսի տվյալները տրամադրելու համար։ Լռելյայնորեն, նոր արձանագրությունը նախատեսվում է օգտագործել Rust 1.70 մասնաճյուղում, իսկ մինչ այդ, այն միացնելու համար, կարող եք սահմանել «CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse» միջավայրի փոփոխականը կամ ավելացնել «protocol =» պարամետրը «[registries. crates-io]» .cargo/config.toml ֆայլի «sparse» բաժինը:

  • Ավելացվեց «pin!» մակրո, որը թույլ է տալիս «T» արտահայտությունից ստեղծել Pin<&mut T> կառուցվածք՝ իր վիճակի տեղային ամրացմամբ (ի տարբերություն Box::pin-ի, այն հիշողություն չի հատկացնում կույտին, այլ կապում է: կույտի մակարդակով):
  • Առաջարկվել է հիշողության բաշխման սխալի կարգավորիչ, որն օգտագործվում է ստանդարտ բաշխման փաթեթի օգտագործման ժամանակ: Հավելվածները, որոնք միացնում են միայն հատկացումը (առանց std), այժմ կկանչեն «panic!» կարգավորիչը, երբ հիշողության բաշխումը ձախողվի, որը կամայականորեն կարող է ընդհատվել՝ օգտագործելով «#[panic_handler]»: Ծրագրերը, որոնք օգտագործում են std գրադարանը, կշարունակեն տպել սխալի մասին տեղեկությունները stderr-ում և խափանվել:
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • {core,std}::pin::pin!
    • impl From {f32,f64}-ի համար
    • std::ուղի::MAIN_SEPARATOR_STR
    • impl DerefMut PathBuf-ի համար
  • «const» հատկանիշը, որը որոշում է այն օգտագործելու հնարավորությունը ցանկացած համատեքստում հաստատունների փոխարեն, օգտագործվում է VecDeque::new ֆունկցիայում։
  • Android հարթակի վրա աշխատելու համար այժմ պահանջվում է առնվազն NDK r25 (API 19), այսինքն. Android-ի նվազագույն աջակցվող տարբերակը բարձրացվել է մինչև 4.4 (KitKat):
  • Աջակցության երրորդ մակարդակն իրականացվել է Sony PlayStation Vita պլատֆորմի համար (armv7-sony-vita-newlibeabihf): Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված թեստավորման, պաշտոնական կառուցումների հրապարակման կամ ստուգելու, թե արդյոք կոդը կարելի է կառուցել:

Source: opennet.ru

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