Հրապարակվել է Rust 1.59 ընդհանուր նշանակության ծրագրավորման լեզվի թողարկումը, որը հիմնադրվել է Mozilla նախագծի կողմից, սակայն այժմ մշակվել է Rust Foundation անկախ ոչ առևտրային կազմակերպության հովանու ներքո: Լեզուն կենտրոնանում է հիշողության անվտանգության վրա և ապահովում է աշխատանքի բարձր զուգահեռականության հասնելու միջոցներ՝ միաժամանակ խուսափելով աղբահանող սարքից և գործարկման ժամանակից (աշխատանքի ժամանակը կրճատվում է մինչև ստանդարտ գրադարանի հիմնական սկզբնավորումը և պահպանումը):
Rust-ի հիշողության մշակման մեթոդները ծրագրավորողին փրկում են ցուցիչները մանիպուլյացիայի ժամանակ սխալներից և պաշտպանում են խնդիրներից, որոնք առաջանում են ցածր մակարդակի հիշողության հետ աշխատելու պատճառով, ինչպիսիք են հիշողության տարածք մուտք գործելը այն ազատվելուց հետո, չվերաբերվող ցուցիչները, բուֆերի գերակատարումները և այլն: Գրադարաններ բաշխելու, կառուցումներ տրամադրելու և կախվածությունները կառավարելու համար նախագիծը մշակում է Cargo փաթեթի կառավարիչը: Crates.io պահոցն աջակցվում է գրադարանների հոսթինգի համար:
Հիշողության անվտանգությունն ապահովվում է Rust-ում կոմպիլյացիայի ժամանակ՝ հղումների ստուգման, օբյեկտի սեփականության մասին հաշվառման, օբյեկտների կյանքի ժամկետների (շրջանակների) հետևելու և կոդի կատարման ընթացքում հիշողության հասանելիության ճշգրտության գնահատման միջոցով: Rust-ը նաև ապահովում է պաշտպանություն ամբողջ թվերի արտահոսքից, պահանջում է փոփոխական արժեքների պարտադիր սկզբնավորում նախքան օգտագործումը, ստանդարտ գրադարանում ավելի լավ է լուծում սխալները, լռելյայն կիրառում է անփոփոխ հղումների և փոփոխականների հայեցակարգը, առաջարկում է ուժեղ ստատիկ մուտքագրում՝ տրամաբանական սխալները նվազագույնի հասցնելու համար:
Հիմնական նորամուծությունները.
- Հնարավոր է օգտագործել անսամբլի լեզվի ներդիրներ, որոնք պահանջարկ ունեն այն հավելվածներում, որոնք պետք է վերահսկեն կատարումը ցածր մակարդակով կամ կարողանան օգտագործել մասնագիտացված մեքենայի հրահանգներ: Մոնտաժային ներդիրներն ավելացվում են «asm» մակրոների միջոցով: և «global_asm!» օգտագործելով տողերի ձևաչափման շարահյուսություն ռեգիստրների անվանման համար, որը նման է Rust-ում տողերի փոխարինման համար օգտագործվողին: Կազմողն աջակցում է x86, x86-64, ARM, AArch64 և RISC-V ճարտարապետությունների հավաքման հրահանգներին: Տեղադրման օրինակ՝ օգտագործել std::arch::asm; // Բազմապատկել x-ը 6-ով, օգտագործելով հերթափոխը և ավելացնում է, թող mut x: u64 = 4; անապահով {asm!( «mov {tmp}, {x}», «shl {tmp}, 1», «shl {x}, 2», «add {x}, {tmp}», x = inout(reg ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
- Ավելացված է աջակցություն ապակառուցված (զուգահեռ) հանձնարարությունների համար, որոնցում արտահայտության ձախ կողմում նշված են մի քանի հատկանիշներ, հատվածներ կամ կառուցվածքներ: Օրինակ՝ թող (a, b, c, d, e); (ա, բ) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct {e, .. } = Struct {e: 5, f: 3}; պնդել_էկ!([1, 2, 1, 4, 5], [a, b, c, d, e]);
- Տրված է const generics-ի լռելյայն արժեքներ նշելու հնարավորությունը՝ struct ArrayStorage {arr: [T; N], } իմպլ ArrayStorage {fn new(a: T, b: T) -> ArrayStorage {ArrayStorage {arr: [a, b], } } }
- Cargo փաթեթի կառավարիչը նախազգուշացումներ է տալիս կախվածության մեջ անվավեր կառուցվածքների օգտագործման մասին, որոնք մշակվում են կոմպիլյատորի սխալների պատճառով (օրինակ, սխալի պատճառով փաթեթավորված կառույցների դաշտերը թույլատրվել են փոխառել անվտանգ բլոկներում): Նման կառուցվածքներն այլևս չեն ապահովվի Rust-ի ապագա տարբերակում:
- Cargo-ն և rustc-ն ունեն ներկառուցված հնարավորություն՝ ստեղծելու գործարկվող ֆայլեր, որոնք զրկված են վրիպազերծման տվյալներից (strip = «debuginfo») և նշաններից (strip = «symbols»), առանց առանձին կոմունալ ծառայություն կանչելու անհրաժեշտության: Մաքրման կարգավորումն իրականացվում է Cargo.toml-ի «strip» պարամետրի միջոցով՝ [profile.release] strip = «debuginfo», «symbols»
- Ավելացվող կոմպիլյացիան լռելյայն անջատված է: Նշվում է, որ պատճառը կոմպիլյատորի սխալի ժամանակավոր լուծումն է, որը հանգեցնում է խափանումների և ապասերիալացման սխալների: Սխալների շտկումն արդեն պատրաստ է և կներառվի հաջորդ թողարկումում: Ավելացվող կոմպիլյացիան վերադարձնելու համար կարող եք օգտագործել RUSTC_FORCE_INCREMENTAL=1 միջավայրի փոփոխականը:
- API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
- std::thread::available_parallelism
- Արդյունք::պատճենված
- Արդյունք::կլոնավորված
- կամար::ասմ!
- arch::global_asm!
- ops::ControlFlow::is_break
- ops::ControlFlow::is_continue
- TryFrom u8-ի համար
- char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
- iter::zip
- NonZeroU8::is_power_of_two
- NonZeroU16::is_power_of_two
- NonZeroU32::is_power_of_two
- NonZeroU64::is_power_of_two
- NonZeroU128::is_power_of_two
- DoubleEndedIterator ToLowercase կառուցվածքի համար
- DoubleEndedIterator ToUppercase կառուցվածքի համար
- TryFrom<&mut [T]> համար [T; N]
- UnwindSafe for the Once կառուցվածքը
- RefUnwindSafe մեկ անգամ
- armv8 նեոնային աջակցության գործառույթները ներկառուցված են aarch64-ի կոմպիլյատորում
- «const» հատկանիշը, որը որոշում է այն ցանկացած համատեքստում օգտագործելու հնարավորությունը հաստատունների փոխարեն, օգտագործվում է գործառույթներում.
- mem::MaybeUninit::as_ptr
- mem::MaybeUninit::assume_init
- mem::MaybeUninit::assume_init_ref
- ffi::CStr::from_bytes_with_nul_unchecked
Source: opennet.ru