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

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

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

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

  • Վերացված երկարատև թերություն ամբողջ թվերի և լողացող կետով թվերի փոխարկումներ կատարելիս: Քանի որ Rust կոմպիլյատորը օգտագործում է LLVM որպես հետին պլան, տիպի փոխակերպման գործողությունները կատարվել են LLVM միջանկյալ կոդերի հրահանգների միջոցով, ինչպիսիք են. fptoui, որոնք ունեն մեկ նշանակալի հատկություն՝ չսահմանված վարքագիծ, եթե ստացված արժեքը չի տեղավորվում թիրախային տեսակի մեջ։ Օրինակ՝ f300 տիպով float 32 արժեքը փոխարկելիս ամբողջ թվի u8 տիպի, արդյունքը անկանխատեսելի է և կարող է տարբեր լինել տարբեր համակարգերում: Խնդիրն այն է, որ այս հատկությունը հայտնվում է կոդում, որը նշված չէ որպես «անապահով»:

    Начиная с Rust 1.45 поведение при переполнении размера типа жёстко регламентировано, а операция преобразования «as» выполняет проверку на переполнение и приводит преобразуемое значение к максимальному или минимальному значению целевого типа (для вышеотмеченного примера значение 300 будет преобразовано в 255). Для отключения подобных проверок предусмотрены дополнительные вызовы API «{f64, f32}::to_int_unchecked», работающие в режиме unsafe.

    fn cast (x: f32) -> u8 {
    x որպես u8
    }

    fn main() {
    թող too_big = 300.0;
    let too_small = -100.0;
    թող նան = f32::NAN;

    թող x՝ f32 = 1.0;
    թող y՝ u8 = անապահով { x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(too_big)); // ելք 255
    println!("too_small_casted = {}", cast(too_small)); // ելք 0
    println!("not_a_number_casted = {}", cast(nan)); // ելք 0
    }

  • Օգտագործեք կայունացված ընթացակարգային մակրոներֆունկցիաների նման արտահայտություններ, կաղապարներ և հայտարարություններ: Նախկինում նման մակրոները չէին կարող կանչվել ամենուր, այլ միայն կոդի որոշակի հատվածներում (որպես առանձին զանգ, այլ կոդի հետ չմիահյուսված)։ Մակրոների անվանման ձևի ընդլայնումը, որը նման է գործառույթներին, վեբ շրջանակն աշխատելու պահանջներից մեկն էր: Հրթիռ Rust-ի կայուն թողարկումներում: Նախկինում Rocket-ում կարգավորիչների սահմանման հարցում լրացուցիչ ճկունության հասնելու համար պահանջվում էր միացնել «proc_macro_hygiene» կոչվող փորձարարական հատկանիշը, որը հասանելի չէ Rust-ի կայուն տարբերակներում: Այս ֆունկցիոնալությունն այժմ ներկառուցված է լեզվի կայուն թողարկումներում:
  • Թույլատրվում է օգտագործել «char» տիպով ընդգրկույթներ՝ միջակայքի արժեքները կրկնելու համար (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    ch-ի համար 'a'..='z' {
    տպել ("{}", ch);
    }
    println!(); // Տպելու է «abcdefghijklmnopqrstuvwxyz»

  • API-ների նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ կայունացված
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Թույլ::as_ptr,
    rc::Թույլ::from_raw,
    rc::Թույլ::into_raw,
    str::strip_prefix,
    str::strip_suffix,
    համաժամեցում::Թույլ::as_ptr,
    համաժամեցում::Թույլ::from_raw,
    sync::Weak::into_raw,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::գործընթաց::CommandExt::arg0.

  • Rustc կոմպիլյատորը աջակցություն է ավելացրել թիրախային պլատֆորմի տարբեր հատկանիշները վերացնելու համար՝ օգտագործելով «target-feature» դրոշը, օրինակ՝ «-C target-feature=+avx2,+fma»: Ավելացվել են նաև նոր դրոշներ.
    «force-unwind-tables»՝ անսարք զանգերի աղյուսակներ ստեղծելու համար՝ անկախ վթարի կառավարման ռազմավարությունից. «embed-bitcode»՝ վերահսկելու համար, թե արդյոք LLVM բիթկոդը ներառված է ստեղծված rlib-ներում: «Embed-bitcode» դրոշը լռելյայն միացված է Cargo-ում՝ կառուցման ժամանակը և սկավառակի տարածության սպառումը օպտիմալացնելու համար:

  • Աջակցության երրորդ մակարդակը տրամադրվել է mipsel-sony-psp և thumbv7a-uwp-windows-msvc հարթակների համար: Երրորդ մակարդակը ներառում է հիմնական աջակցություն, բայց առանց ավտոմատացված փորձարկման և պաշտոնական կառուցումների հրապարակման:

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

Source: opennet.ru

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