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

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

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

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

  • Իրականացված աջակցություն տեսակների համար զանգվածներ ցանկացած չափի. Նախկինում, բոլոր ամբողջ արժեքների համար ընդհանուր գործառույթներ սահմանելու անկարողության պատճառով, ստանդարտ գրադարանը տրամադրում էր ներկառուցված հատկանիշի աջակցություն միայն մինչև 32 տարրի չափի զանգվածների համար (յուրաքանչյուր չափի հատկանիշները ստատիկորեն սահմանված էին): Հաստատուն գեներիկաների («const generics») ֆունկցիոնալության ստեղծման շնորհիվ հնարավոր դարձավ ընդհանուր ֆունկցիաներ սահմանել ցանկացած զանգվածի չափի համար, սակայն դրանք դեռ ներառված չեն կայուն լեզվական հատկանիշների մեջ, թեև դրանք ներդրված են կոմպիլյատորում և հիմա ներգրավված ստանդարտ գրադարանում՝ ցանկացած չափի զանգվածի գծերի համար:

    Օրինակ, Rust 1.47-ի հետևյալ կառուցվածքը կտպագրի զանգվածի բովանդակությունը, թեև նախկինում դա կհանգեցներ սխալի.

    fn main() {
    թող xs = [0; 34];

    println!("{:?}", xs);
    }

  • Արտակարգ իրավիճակներում ավելի կարճ հետքերի (հետադարձ հետքի) ելքը տրամադրվում է: Հետքը բացառում է այն տարրերը, որոնք շատ իրավիճակներում չեն հետաքրքրում, բայց խառնում են արդյունքը և ուշադրությունը շեղում խնդրի առաջնային պատճառներից: Ամբողջական հետքը վերադարձնելու համար կարող եք օգտագործել «RUST_BACKTRACE=full» միջավայրի փոփոխականը: Օրինակ՝ կոդի համար

    fn main() {
    խուճապ!();
    }

    Նախկինում հետքը թողարկվում էր 23 փուլով, սակայն այժմ այն ​​կկրճատվի մինչև
    3 քայլ, որոնք թույլ են տալիս անմիջապես հասկանալ էությունը.

    «հիմնական» շարանը խուճապի մատնվեց «բացահայտ խուճապի» ժամանակ, src/main.rs:2:5
    stack backtrace:
    0: std::panicking::begin_panic
    հասցեով /rustc/d…d75a/library/std/src/panicking.rs:497
    1: խաղահրապարակ::հիմնական
    ./src/main.rs:2 հասցեով
    2: հիմնական::ops::function::FnOnce::call_once
    հասցեով /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc կոմպիլյատորը թարմացվել է՝ օգտագործելով LLVM 11 (Ժանգ օգտագործում LLVM-ը որպես backend-ի համար կոդերի ստեղծում). Միևնույն ժամանակ, պահպանվում է ավելի հին LLVM-ներով մինչև 8 տարբերակ կառուցելու հնարավորությունը, բայց լռելյայն ( rust-lang/llvm-նախագիծ) այժմ օգտագործում է LLVM 11: LLVM 11-ը կթողարկվի առաջիկա օրերին:
  • Windows հարթակում rustc կոմպիլյատորը ապահովում է հսկողության հոսքի ամբողջականության ստուգումներ (Control Flow Guard) միացնելու համար, որն ակտիվացված է «-C control-flow-guard» դրոշի միջոցով: Այլ հարթակներում այս դրոշն առայժմ անտեսված է:
  • API-ների նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ կայունացված
    Նույնականացում::new_raw,
    Շրջանակ::is_empty,
    RangeInclusive::is_empty,
    Արդյունք::as_deref,
    Արդյունք::as_deref_mut,
    Vec::արտահոսք,
    ցուցիչ::offset_from,
    f32::TAU և
    f64::TAU.

  • «const» հատկանիշը, որը որոշում է այն օգտագործելու հնարավորությունը ցանկացած համատեքստում հաստատունների փոխարեն, օգտագործվում է մեթոդներում.
    • նոր բոլոր ոչ զրոյական ամբողջ թվերի համար;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub and saturating_mul բոլոր ամբողջ թվերի համար;
    • is_ascii_այբբենական, is_ascii_մեծատառ, is_ascii_փոքրատառ, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_կետադրական, is_ascii_graphic, is_ascii_whitespace and is_control.
  • FreeBSD-ի համար ներգրավված գործիքակազմ FreeBSD 11.4-ից (FreeBSD 10-ը չի աջակցում LLVM 11):

Source: opennet.ru

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