Թողարկվել է Rust 1.99.0 տարբերակը։ Microsoft-ը Rust-ը դարձրել է հիմնական լեզու։

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

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

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

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

  • Rust-ը այժմ թույլ է տալիս ստեղծել C նախագծերից (C ABI) կանչի համար արտահանված փոփոխական ֆունկցիաներ։ Նման ֆունկցիաներում պարամետրերի ցանկի վերջին տարրը կարող է լինել "..." կոնստրուկտը, որը Rust-ում մշակվում է հատուկ VaList տիպի միջոցով, որը գործում է C-ում va_list-ի նման։ unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg:: () }; թող b = անվտանգ չէ { args.next_arg:: () }; a + b } fn foo() -> i32 { անվտանգ չէ { գումար(0i32, 2i32) } }
  • Layout::for_value_raw, mem::size_of_val_raw և mem::align_of_val_raw ֆունկցիաները կայունացվել են՝ raw ցուցիչների չափսերի և հավասարեցման անվտանգ կարգավորում ապահովելու համար, այդ թվում՝ դինամիկ չափսերի տեսակների, ինչպիսիք են շերտերը, օգտագործման դեպքում՝ առանց տվյալների հղումներ ստեղծելու անհրաժեշտության։
  • Փաստաթղթերում այժմ խորհուրդ է տրվում խուսափել Box::leak-ին կանչելու միջոցով անորոշ ժամկետով (&'static) ստատիկորեն հղված հիշողության ազատումից (round-trip unleaking), քանի որ այս գործողությունը կարող է հանգեցնել խնդիրների՝ կապված ապագա կոմպիլյատորների օպտիմալացումների և միացվող հիշողության բաշխման մեխանիզմների հետ անհամատեղելիության հետ։ Ժամանակավոր սեփականության փոխանցման համար ստատիկ հղում ստեղծելու փոխարեն խորհուրդ է տրվում օգտագործել հում ցուցիչներ, օրինակ՝ Box::into_non_null-ին կանչելու միջոցով։
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ մեթոդները և հատկությունների իրականացումը կայունացվել են.
    • IntoIterator-ը Box<[T; N]>-ի համար
    • IntoIterator-ը &Box<[T; N]>-ի համար
    • IntoIterator-ը &mut Box<[T; N]>-ի համար
    • VecDeque::retain_back
    • միջուկ::ffi::VaList
    • Տուփ::into_non_null
    • Տուփ::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • միջուկ::mem::size_of_val_raw
    • միջուկ::mem::align_of_val_raw
    • core::alloc::Layout::for_value_raw
    • Տող::from_utf8_lossy_owned
    • տող::FromUtf8Error::into_utf8_lossy
    • FusedIterator StepBy-ի համար
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • Բեռների փաթեթների կառավարիչն այժմ ունի նոր ներկառուցված «debug» պրոֆիլ, որը նման է «dev» պրոֆիլին (ապագայում նախատեսվում է debug-ի և մշակման հնարավորությունները առանձնացնել): CI-ում կառուցելիս աստիճանական կոմպիլյացիան լռելյայնորեն անջատված է:
  • riscv64-unknown-linux-musl թիրախային հարթակը տեղափոխվել է 2-րդ մակարդակի աջակցության, որը տրամադրում է կառուցման երաշխիք, բայց ոչ թեստերի փաթեթի հաջողության երաշխիք։

Բացի այդ, մենք կցանկանայինք առանձնացնել Rust-ին վերաբերող վերջերս հայտարարված նախագծերն ու միջոցառումները.

  • Microsoft-ը Rust-ը թարմացրել է մինչև Tier 1 լեզու և կապահովի դրա լիարժեք աջակցությունը ընկերության մշակման բոլոր փուլերում: Նախկինում Tier 1 աջակցությունը տրամադրվում էր C++, C# և TypeScript լեզուների համար: Rust-ն արդեն օգտագործվում է Microsoft-ի ավելի քան 100 պահոցներում: Ի թիվս այլ բաների, Rust-ի բաղադրիչներն արդեն օգտագործվում են այնպիսի արտադրանքներում, ինչպիսիք են Microsoft 365-ը և Copilot-ը, և MSVC կոմպիլյատորի համար մշակվել է Rust-ի համար նախատեսված rustc_codegen_utc backend-ը, որը հիմնված է rustc կոմպիլյատորի վրա:

    Microsoft-ը Rust-ը որպես անվտանգության համար կարևոր կոդը ամրապնդելու հիմնական նպատակ է նշում։ Microsoft Azure-ի տեխնիկական տնօրենի խոսքով՝ բոլոր խոցելիությունների մոտ 70%-ը Windows առաջանում են հիշողության կառավարման խնդիրներից, որոնք կարելի է խուսափել Rust-ի օգտագործմամբ։

  • Google-ը այն հեռացրել է միջուկից։ Linux C լեզվով գրված Binder IPC-ի հին իրականացումը հնացել է՝ փոխարինվելով Rust լեզվով վերաշարադրված նոր Binder IPC դրայվերով։ Նշվում է, որ իր գոյության 15 տարիների ընթացքում հին դրայվերը կուտակել է զգալի տեխնիկական պարտք և բազմաթիվ բարդություններ, որոնք խոչընդոտել են սխալների հայտնաբերմանը, պահպանմանը և նոր գործառույթների ավելացմանը։ Rust-ում Binder IPC դրայվերը նշանակվել է որպես հիմնական դրայվեր և այլևս չի ներկայացվում որպես փորձարարական մշակում։
  • Թողարկվել է Arti 2.7.0-ը, որը Tor գործիքակազմի Rust իրականացումն է։ Երբ Arti-ի կոդի բազան հասնի C իրականացումը լիովին փոխարինելու ունակ մակարդակի, Tor մշակողները մտադիր են Arti-ն դարձնել Tor-ի հիմնական իրականացումը և աստիճանաբար դադարեցնել C իրականացման սպասարկումը։ Նոր տարբերակը ներառում է ռելեների և սերվերներ Directory Authority (DA) ֆունկցիոնալություն, որը կապված է փաստաթղթերի վերլուծության, Directory Server-ի հայելային աջակցության և DNS երթևեկության մշակման հետ: Ավելացվել է RPC իրականացում կոնֆիգուրացիայի փոփոխությունների և ստուգումների համար: Ուղղվել են մի քանի խոցելիություններ. onion ծառայության ադմինիստրատորներին խորհուրդ է տրվում շտապ թարմացնել իրենց համակարգերը:

Source: opennet.ru

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster