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

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

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

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

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

  • Rustc կոմպիլյատորն ունի կայունացված համակարգ, որը հիմնված է LLVM-ի վրա՝ ծածկույթի տվյալների ստեղծման համար, որն օգտագործվում է փորձարկման ընթացքում ծածկույթի ծածկույթը գնահատելու համար: Հավաքման ընթացքում ծածկույթի տվյալները միացնելու համար դուք պետք է օգտագործեք «-Cinstrument-coverage» դրոշը, օրինակ՝ հավաքումը սկսելով «RUSTFLAGS=»-C instrument-coverage» cargo build» հրամանով: Այս ձևով կազմված գործարկվող ֆայլը գործարկելուց հետո default.profraw ֆայլը կպահվի ընթացիկ գրացուցակում, որի մշակման համար կարող եք օգտագործել llvm-profdata կոմունալը llvm-tools-preview բաղադրիչից։ Այնուհետև llvm-profdata-ի կողմից մշակված ելքը կարող է փոխանցվել llvm-cov-ին՝ ծանոթագրված ծածկույթի հաշվետվություն ստեղծելու համար: Աղբյուրի կոդի հղման մասին տեղեկատվությունը վերցված է ուսումնասիրվող գործարկվող ֆայլից, որը ներառում է ծածկույթի հաշվիչների և կոդի միջև կապի մասին անհրաժեշտ տվյալներ: 1| 1|fn main() {2| 1| println! («Բարև, աշխարհ»); 3| 1|}
  • Բեռնափոխադրումների փաթեթի կառավարիչում կայունացվել է «-timings» դրոշի աջակցությունը, որը ներառում է կառուցման առաջընթացի և յուրաքանչյուր քայլի կատարման ժամանակի վերաբերյալ մանրամասն զեկույցի ստեղծում: Զեկույցը կարող է օգտակար լինել հավաքման գործընթացի արդյունավետությունը օպտիմալացնելու համար:
  • Բեռնափոխադրումների փաթեթի կառավարիչը առաջարկում է նոր շարահյուսություն պայմանական կոմպիլյացիայի մեխանիզմի և կամընտիր կախվածությունների ընտրության համար, որը կազմաձևված է Cargo.toml ֆայլում՝ ցուցակելով անվանված հատկությունների ցանկը [հատկանիշներ] բաժնում և ակտիվացված՝ փաթեթի կառուցման ընթացքում հատկությունները միացնելու միջոցով: օգտագործելով «--features» դրոշը: Նոր տարբերակն ավելացնում է կախվածության աջակցություն առանձին անունների տարածքներում և թույլ կախվածությունների համար:

    Առաջին դեպքում հնարավոր է օգտագործել «dep:» նախածանցով տարրեր «[հատկանիշներ]» բաժնի ներսում՝ բացահայտորեն կապակցելու կամընտիր կախվածությանը, առանց այդ կախվածությունը որպես հատկանիշ անուղղակի ներկայացնելու: Երկրորդ դեպքում ավելացվել է «?» նշանով նշելու աջակցություն։ («փաթեթի անուն?/հատկանիշի անուն») կամընտիր կախվածություններ, որոնք պետք է ներառվեն միայն այն դեպքում, եթե որևէ այլ հատկություն ներառում է տվյալ ընտրովի կախվածությունը: Օրինակ, ստորև բերված օրինակում, serde հատկությունը միացնելը հնարավորություն կտա «serde» կախվածությունը, ինչպես նաև «serde» հատկությունը «rgb» կախվածության համար, բայց միայն այն դեպքում, եթե «rgb» կախվածությունը միացված է այլ տեղ. [կախվածություններ] serde = {տարբերակ = " 1.0.133", ընտրովի = ճշմարիտ } rgb = {տարբերակ = "0.8.25", ընտրովի = ճշմարիտ } [հատկանիշներ] serde = ["dep:serde", "rgb?/serde"]

  • Աջակցություն լրացուցիչ կազմման համար, որն անջատված էր վերջին թողարկումում, վերադարձվել է: Կոմպիլյատորի սխալը, որի պատճառով գործառույթն անջատվել է, լուծվել է:
  • Լուծվել են որոշ խնդիրներ՝ ակնթարթային ժամանակաչափերի տրամադրման հետ կապված միապաղաղ ժամանակի երաշխիքով, որը հաշվի է առնում համակարգի կողմից քնի ռեժիմում անցկացրած ժամանակը: Նախկինում ժամանակաչափը գործարկելու համար հնարավորության դեպքում օգտագործվում էր OS API-ն, որը հաշվի չէր առնում ժամանակի միապաղաղությունը խախտող խնդրահարույց իրավիճակները, ինչպիսիք են ապարատային խնդիրները, վիրտուալացման օգտագործումը կամ օպերացիոն համակարգում առկա սխալները:
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_pacity_mut
    • ԳուցեՄիասնություն::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • օգտագործել::abs_diff
    • Ցուցադրել io::ErrorKind-ի համար
    • From ExitCode-ի համար
    • Ոչ համար! (մուտքագրեք «երբեք»)
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Աջակցության երրորդ մակարդակն իրականացվել է mips64-openwrt-linux-musl* և armv7-unknown-linux-uclibceabi (softfloat) հարթակների համար: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված թեստավորման, պաշտոնական կառուցումների հրապարակման կամ ստուգելու, թե արդյոք կոդը կարելի է կառուցել:
  • Կազմողն անցել է LLVM 14-ի օգտագործման:

Բացի այդ, կարող եք նշել.

  • Ավելացվեց rustc կոմպիլյատորի bootstrapping-ի աջակցություն՝ օգտագործելով rustc_codegen_gcc backend-ը, որը թույլ է տալիս օգտագործել GCC նախագծի libgccjit գրադարանը որպես rustc կոդի գեներատոր, որը թույլ է տալիս rustc-ին աջակցություն տրամադրել GCC-ում հասանելի ճարտարապետություններին և օպտիմալացումներին: Կոմպիլյատորի առաջխաղացումը նշանակում է rustc-ում GCC-ի վրա հիմնված կոդերի գեներատոր օգտագործելու հնարավորություն՝ ինքն իրեն rustc կոմպիլյատորը կառուցելու համար: Գործնականում այս հատկությունը թույլ է տալիս ստեղծել rust ծրագրեր ճարտարապետությունների համար, որոնք նախկինում չեն ապահովվել rustc-ում:
  • Հասանելի է uutils coreutils 0.0.13 գործիքակազմի թողարկումը, որի շրջանակներում մշակվում է Rust լեզվով վերագրված GNU Coreutils փաթեթի անալոգը: Coreutils-ը գալիս է հարյուրից ավելի կոմունալ ծրագրերով, այդ թվում՝ sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln և ls: Նախագծի նպատակն է ստեղծել Coreutils-ի միջպլատֆորմային այլընտրանքային իրականացում, որը կարող է աշխատել Windows, Redox և Fuchsia հարթակներում, ինչպես նաև տարածել MIT թույլտվության լիցենզիայի ներքո՝ GPL copyleft լիցենզիայի փոխարեն:

    Նոր տարբերակը բարելավեց բազմաթիվ կոմունալ ծրագրերի իրականացումը, ներառյալ cp, dd, df, split և tr կոմունալ ծրագրերի զգալիորեն բարելավված համատեղելիությունը GNU նախագծի իրենց գործընկերների հետ: Ներկայացված առցանց փաստաթղթեր: Ծափերի վերլուծիչն օգտագործվում է հրամանի տողի արգումենտները վերլուծելու համար, ինչը բարելավում է «--help» դրոշի ելքը և ավելացնում է երկար հրամանների հապավումների աջակցությունը (օրինակ, «ls -color»-ի փոխարեն կարող եք նշել «ls -col»: »):

Source: opennet.ru

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