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

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

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

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

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

  • Հիմնական գործառույթից հնարավոր է սահմանել ձեր սեփական վերադարձի կոդերը: Ի սկզբանե Rust-ի հիմնական ֆունկցիան կարող էր վերադարձնել միայն «()» (միավոր) տիպը, որը միշտ ցույց էր տալիս հաջող ելքի կարգավիճակը, եթե մշակողը բացահայտորեն չկոչեր «process::exit(code)» ֆունկցիան։ Rust 1.26-ում, օգտագործելով հիմնական ֆունկցիայի անկայուն Termination հատկանիշը, հնարավոր եղավ վերադարձնել «Ok» և «Err» արժեքները, որոնք համապատասխանում են C ծրագրերում EXIT_SUCCESS և EXIT_FAILURE կոդերին: Rust 1.61-ում Termination հատկանիշը դարձել է կայուն, և առաջարկվել է առանձին ExitCode տեսակ՝ ներկայացնելու հատուկ վերադարձի կոդ, որը վերացում է պլատֆորմին հատուկ վերադարձի տեսակները՝ տրամադրելով և՛ նախապես սահմանված հաստատունները SUCCESS և FAILURE, և՛ From մեթոդը: մաքսային վերադարձի կոդը վերադարձնելու համար: օգտագործել std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } Ելքի կոդ::ՀԱՋՈՂՈՒԹՅՈՒՆ }
  • Կայունացվել են «const fn» արտահայտությամբ սահմանված ֆունկցիաների լրացուցիչ հնարավորությունները, որոնք կարելի է անվանել ոչ միայն կանոնավոր ֆունկցիաներ, այլև օգտագործել ցանկացած համատեքստում՝ հաստատունների փոխարեն։ Այս գործառույթները հաշվարկվում են կոմպիլյացիայի ժամանակ, այլ ոչ թե գործարկման ժամանակ, ուստի դրանք ենթակա են որոշակի սահմանափակումների, օրինակ՝ միայն հաստատուններից կարդալու հնարավորությունը։ Նոր տարբերակում const ֆունկցիաների ներսում թույլատրվում են հիմնական գործողությունները ֆունկցիայի ցուցիչներով (թույլատրվում է ցուցիչների ստեղծում, փոխանցում և հեռարձակում, բայց ոչ ֆունկցիա ցուցիչով կանչելը); հատկանիշի սահմանները const ֆունկցիաների ընդհանուր պարամետրերի համար, ինչպիսիք են T: Copy; դինամիկ կերպով փոխանցվող հատկանիշներ (dyn Trait); impl Trait տեսակները ֆունկցիայի արգումենտների և վերադարձի արժեքների համար:
  • Հոսքը կարգավորում է Stdin-ը, Stdout-ը և Stderr-ը std::io-ում այժմ ստատիկ կյանքի տևողություն ("'static") երբ կողպված է, թույլ է տալիս այնպիսի կառուցվածքներ, ինչպիսիք են "let out = std::io::stdout().lock();" բռնակ ստանալու և մեկ արտահայտությամբ կողպեք դնելով։
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Գրել կուրսորի համար<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::process::Dermination
    • std::thread::JoinHandle::is_finished
  • «const» հատկանիշը, որը որոշում է այն ցանկացած համատեքստում օգտագործելու հնարավորությունը հաստատունների փոխարեն, օգտագործվում է գործառույթներում.
    • <*const T>::offset և <*mut T>::offset
    • <*const T>::wrapping_offset և <*mut T>::wrapping_offset
    • <*const T>::add և <*mut T>::add
    • <*const T>::sub և <*mut T>::sub
    • <*const T>::wrapping_add և <*mut T>::wrapping_add
    • <*const T>::wrapping_sub և <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

Բացի այդ, կարող եք նշել «Rust. A Critical Retrospective» հոդվածը Rust լեզվի տպավորությունների ամփոփմամբ՝ դրանում 100 հազար տող կոդ գրելուց հետո որոնվածում օգտագործվող Xous microkernel օպերացիոն համակարգի մշակման ընթացքում: Թերությունները ներառում են դժվար հասկանալի շարահյուսություն, անավարտությունը և լեզվի շարունակական զարգացումը, կրկնվող կառուցումների բացակայությունը, Crates.io-ի նկատմամբ կախվածության վստահության բնորոշ խնդիրները և անվտանգ կոդ գրելու որոշակի կարգապահության պահպանման անհրաժեշտությունը: Ակնկալիքները գերազանցող առանձնահատկությունները ներառում են արագ նախատիպավորման ժամանակ ավելացված կոդի վերամշակման և «հակերի» վերամշակման գործիքներ:

Source: opennet.ru

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