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

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

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

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

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

  • Ամբողջ թվերի ներկայացումներով թվարկումներում («#[repr(Int)]» հատկանիշ) թույլատրվում է հստակ նշել դիսկրիմինանտը (տարբերակի համարը թվարկումում), նույնիսկ եթե թվարկումը պարունակում է դաշտեր։ #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • Ավելացվեց ֆունկցիայի միջուկը::hint::black_box, որը պարզապես վերադարձնում է ստացված արժեքը: Քանի որ կոմպիլյատորը կարծում է, որ այս ֆունկցիան ինչ-որ բան է անում, black_box ֆունկցիան կարող է օգտագործվել՝ անջատելու կոմպիլյատորների օպտիմիզացումները օղակների համար՝ կոդի կատարողականի փորձարկում կատարելիս կամ գեներացված մեքենայի կոդը ուսումնասիրելիս (որպեսզի կոմպիլյատորը չհամարի կոդը չօգտագործված և հեռացնի այն): Օրինակ՝ ստորև բերված օրինակում black_box(v.as_ptr())-ը թույլ չի տալիս կոմպիլյատորին մտածել, որ v վեկտորը չի օգտագործվում: օգտագործել std::hint::black_box; fn push_cap(v: &mut Vec) {i-ի համար 0..4-ում {v.push(i); black_box (v.as_ptr ()); } }
  • «Cargo» փաթեթի կառավարիչն առաջարկում է «հեռացնել» հրամանը, որը թույլ է տալիս հրամանի տողից հեռացնել կախվածությունները Cargo.toml մանիֆեստից։
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap.:{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Ավելացրեք AsFd իրականացումներ stdio կողպեքի տեսակների համար, երբ օգտագործում եք WASI:
    • impl TryFrom > տուփի համար<[T; N]>
    • միջուկ::ակնարկ::սև_արկղ
    • Տևողությունը՝:փորձել_վրկյան_{f32,f64}
    • Տարբերակ::unzip
    • std::os::fd
  • Կաղապարներում թույլատրված են «..X» և «..=X» միջակայքերը:
  • Rusc կոմպիլյատորի և LLVM backend-ի առջևի մասը կառուցելիս օգտագործվում են LTO (Link Time Optimization) և BOLT (Binary Optimization and Layout Tool) օպտիմալացման ռեժիմները՝ արդյունքում կոդի արդյունավետությունը բարձրացնելու և հիշողության սպառումը նվազեցնելու համար:
  • Իրականացվել է 5-րդ մակարդակի աջակցություն armv5te-none-eabi և thumbvXNUMXte-none-eabi հարթակների համար: Երրորդ մակարդակը ենթադրում է հիմնական աջակցություն, բայց առանց ավտոմատացված թեստավորման, պաշտոնական կառուցումների հրապարակում և կոդը ստեղծելու կարողության ստուգում։
  • Ավելացվեց macOS Ընդհանուր գրադարաններին կապելու աջակցություն:

Բացի այդ, մենք կարող ենք նշել, որ ներառված է Rust լեզվի (gccrs) ֆրոնտային կոմպիլյատորի GCC կոդերի բազայում: Frontend-ը ներառված է GCC 13 մասնաճյուղում, որը կթողարկվի 2023 թվականի մայիսին: Սկսած GCC 13-ից, ստանդարտ GCC գործիքակազմը կարող է օգտագործվել Rust ծրագրերը կազմելու համար՝ առանց LLVM մշակումների միջոցով կառուցված rustc կոմպիլյատորը տեղադրելու անհրաժեշտության: Rust-ի ներդրումը GCC 13-ում կլինի բետա կարգավիճակում, լռելյայն միացված չէ:

Source: opennet.ru

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