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

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

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

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

  • Իրականացված աջակցություն կամայական չափերի զանգվածների հատկանիշներին: Նախկինում, բոլոր ամբողջ արժեքների համար ընդհանուր գործառույթներ սահմանելու անհնարինության պատճառով, ստանդարտ գրադարանը տրամադրում էր ներկառուցված հատկանիշի աջակցություն միայն մինչև 32 տարրի չափսերի զանգվածների համար (յուրաքանչյուր չափի հատկանիշները սահմանվում էին ստատիկ կերպով): Const generic-ի ֆունկցիոնալության ստեղծման շնորհիվ հնարավոր դարձավ ընդհանուր գործառույթներ սահմանել ցանկացած զանգվածի չափի համար, սակայն դրանք դեռ ներառված չեն լեզվի կայուն հատկանիշների մեջ, թեև դրանք ներդրված են կոմպիլյատորում և այժմ օգտագործվում են ստանդարտ գրադարան ցանկացած չափի զանգվածի գծերի համար:
    Օրինակ, 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-ի միջոցով կառուցվելու համար (Rust-ն օգտագործում է LLVM-ը որպես կոդի ստեղծման հետնամաս): Միևնույն ժամանակ, պահպանվում է մինչև 8-րդ տարբերակի հին LLVM-ներով կառուցելու հնարավորությունը, սակայն լռելյայն (rust-lang/llvm-նախագծում) այժմ օգտագործվում է LLVM 11-ը: LLVM 11-ը նախատեսվում է թողարկել մոտ օրերս։
  • Windows հարթակում rustc կոմպիլյատորը ապահովում է Control Flow Guard ստուգումները միացնելու համար՝ ակտիվացված «-C control-flow-guard» դրոշով: Այլ հարթակներում այս դրոշն առայժմ անտեսված է:
  • API-ի նոր մասը տեղափոխվել է կայուն կատեգորիա, ներառյալ Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer: :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):

Վերցված ինչ - որ տեղից opennet.ru

Source: linux.org.ru

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