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

տեղի ունեցավ համակարգի ծրագրավորման լեզվի թողարկում Ժանգ 1.34, մշակված Mozilla նախագծի կողմից։ Լեզուն կենտրոնանում է հիշողության անվտանգության վրա, ապահովում է հիշողության ավտոմատ կառավարում և ապահովում է առաջադրանքների բարձր զուգահեռության հասնելու միջոց՝ առանց աղբահանող սարքի կամ գործարկման ժամանակի օգտագործման:

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

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

  • Cargo փաթեթի կառավարիչը գործիքներ է ավելացրել այլընտրանքային փաթեթների ռեգիստրների հետ աշխատելու համար, որոնք կարող են գոյակցել crates.io հանրային ռեգիստրի հետ: Օրինակ, սեփականատիրական հավելվածների մշակողները այժմ կարող են օգտագործել իրենց անձնական ռեգիստրը, որը կարող է օգտագործվել Cargo.toml-ում կախվածությունները ցուցակագրելիս, և կիրառել crates.io-ի նման տարբերակի մոդել իրենց արտադրանքի համար, ինչպես նաև կապել կախվածությունները երկու տուփերին: io և ձեր սեփական ռեգիստրում:

    Արտաքին ռեգիստրներ ավելացնելու համար .cargo/config (գտնվում է $HOME-ում կամ փաթեթի գրացուցակում)
    տրամադրվում է բաժինը «[registries]», իսկ արտաքին ռեգիստր օգտագործելու համար «registry» տարբերակը հայտնվել է Cargo.toml-ում յուրաքանչյուր կախվածության նկարագրության մեջ: Լրացուցիչ ռեեստրին միանալու համար պարզապես տեղադրեք նույնականացման նշանը ~/.cargo/credentials ֆայլում և գործարկեք հրամանը:
    «cargo login --registry=my-registry» և փաթեթ հրապարակել.
    «cargo public -registry=my-registry»;

  • Ավելացվեց «?» օպերատորի օգտագործման ամբողջական աջակցություն: թեստերում ուսմունքներ, որը թույլ է տալիս օգտագործել փաստաթղթերի օրինակելի կոդը որպես թեստեր: Նախկինում օպերատոր
    «? կարող է օգտագործվել թեստի կատարման ժամանակ սխալները կարգավորելու համար միայն «fn main()» ֆունկցիայի առկայության դեպքում կամ «#[test]» ֆունկցիաների առկայության դեպքում.

  • Մաքսային ատրիբուտներում, որոնք սահմանված են ընթացակարգային մակրոների միջոցով տրամադրվում է նշանների կամայական հավաքածուներ օգտագործելու ունակությունը («#[attr($tokens)]», «#[attr[$tokens]] և #[attr{$tokens}]»): Նախկինում տարրերը կարող էին սահմանվել միայն ծառի/ռեկուրսիվ ձևով՝ օգտագործելով տողերի տառերը, օրինակ՝ «#[foo(bar, baz(quux, foo = «bar»))]», բայց այժմ հնարավոր է օգտագործել թվարկումներ (' #[range(0. .10)]') և այնպիսի կառուցվածքներ, ինչպիսիք են «#[bound(T: MyTrait)]»;
  • Կայունացված տեսակներ (հատկանիշ) Փորձիր From и Փորձեք, որը թույլ է տալիս տիպի փոխարկումներ սխալների մշակմամբ: Օրինակ, մեթոդները, ինչպիսիք են from_be_bytes-ն ամբողջ թվով տիպերով, օգտագործում են զանգվածներ որպես մուտքագրում, բայց տվյալները հաճախ գալիս են Slice տիպի մեջ, և զանգվածների և կտորների միջև փոխակերպումը խնդրահարույց է ձեռքով անել: Նոր հատկանիշների օգնությամբ նշված գործողությունը կարող է իրականացվել անմիջապես .try_into(-ին) զանգի միջոցով, օրինակ՝ «թող num = u32::from_be_bytes(slice.try_into()?)»: Փոխարկումների համար, որոնք միշտ հաջողվում են (օրինակ՝ u8 տիպից u32), ավելացվել է սխալի տեսակ Անպատասխան, որը թույլ է տալիս թափանցիկ օգտագործել
    TryFrom «From»-ի բոլոր առկա իրականացումների համար;

  • Գործառույթը հնացել է CommandExt::before_exec, որը թույլ է տվել մշակողին գործարկել նախքան exec գործարկելը, որն իրականացվել է fork()-ի կանչից հետո պատառաքաղված երեխայի գործընթացի համատեքստում։ Նման պայմաններում մայր գործընթացի որոշ ռեսուրսներ, ինչպիսիք են ֆայլերի նկարագրիչները և քարտեզագրված հիշողության տարածքները, կարող են կրկնօրինակվել, ինչը կարող է հանգեցնել անորոշ վարքագծի և գրադարանների սխալ աշխատանքին:
    Նախորդ_exec-ի փոխարեն խորհուրդ է տրվում օգտագործել ոչ անվտանգ ֆունկցիա CommandExt::pre_exec.

  • Կայունացված ստորագրված և անստորագիր ատոմային ամբողջ թվերի տեսակները, որոնց չափերը տատանվում են 8-ից մինչև 64 բիթ (օրինակ. AtomicU8), ինչպես նաև ստորագրված տեսակները NonZeroI[8|16|32|64|128].
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub: ] և SystemTime մեթոդները կայունացվել են ::checked_[add|sub]: iter::from_fn և iter::successors ֆունկցիաները կայունացվել են;
  • Բոլոր ամբողջ տիպերի համար իրականացվում են checked_pow, saturating_pow, wrapping_pow և overflowing_pow մեթոդները;
  • Ավելացրել է կապի փուլում օպտիմալացումները միացնելու հնարավորությունը՝ նշելով «-C linker-plugin-lto» կառուցման տարբերակը:

Source: opennet.ru

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