Выпуск мовы праграмавання Rust 1.47

Апублікаваны рэліз 1.47 мовы сістэмнага праграмавання Rust, заснаванага праектам Mozilla. Мова сфакусаваная на бяспечнай працы з памяццю, забяспечвае аўтаматычнае кіраванне памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэнню стандартнай бібліятэкі).

Аўтаматычнае кіраванне памяццю ў Rust пазбаўляе распрацоўніка ад памылак пры маніпуляванні паказальнікамі і абараняе ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.

Асноўныя навіны:

  • Рэалізавана падтрымка тыпажоў для масіваў адвольнага памеру. Раней, з-за немагчымасці вызначыць generic-функцыі для ўсіх цэлых значэнняў, стандартная бібліятэка давала ўбудаваную падтрымку тыпажоў толькі для масіваў, памер якіх не перавышаў 32 элементы (тыпажы для кожнага памеру былі вызначаны статычна). Дзякуючы стварэнню функцыянальнасці канстантных джэнерыкаў («const generics») з'явілася магчымасць вызначэння generic-функцый для любых памераў масіва, але яны пакуль не ўключаны ў склад стабільных магчымасцяў мовы, хоць рэалізаваны ў кампілятары і зараз задзейнічаны ў стандартнай бібліятэцы для тыпажоў масіваў любога памеру.
    Напрыклад, наступная канструкцыя ў Rust 1.47 прывядзе да высновы змесціва масіва, хоць раней прывяла б да памылкі:

fn асноўны() {
let xs = [0; 34];
println!("{:?}", xs);
}

  • Забяспечана выснова карацейшых трасіровак (backtrace), выводных пры пазаштатных сітуацыях. З трасіроўкі выключаны элементы, якія не ўяўляюць цікавасці ў большасці сітуацый, але захламляюць вывад і адцягваюць увагу ад першасных прычын праблемы. Для вяртання поўнай трасіроўкі можна выкарыстоўваць зменную асяроддзі "RUST_BACKTRACE=full". Напрыклад, для кода

fn асноўны() {
panic!();
}

раней выводзілася трасіроўка ў 23 этапы, а зараз яна будзе зведзена да 3 этапаў, якія дазваляюць адразу ўлавіць сутнасць:

thread 'main' panicked at 'explicit panic', src/main.rs:2:5
stack backtrace:
0: std::panicking::begin_panic
at /rustc/d…d75a/library/std/src/panicking.rs:497
1: playground::main
at ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
at /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Кампілятар rustc абноўлены да зборкі з выкарыстаннем LLVM 11 (Rust выкарыстоўвае LLVM у якасці бэкенда для генерацыі кода). Пры гэтым захавана магчымасць зборкі са старымі LLVM, аж да версіі 8, але па змаўчанні (у rust-lang/llvm-project) зараз выкарыстоўваецца LLVM 11. Рэліз LLVM 11 чакаецца ў бліжэйшыя дні.
  • На платформе Windows у кампілятары rustc забяспечана падтрымка ўключэння праверак цэласнасці струменя выканання (Control Flow Guard), якія актывуюцца пры дапамозе сцяга "-C control-flow-guard". На іншых платформах гэты сцяг пакуль ігнаруецца.
  • У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваныя. TAU і f32::TAU.
  • Прыкмета "const", які вызначае магчымасць выкарыстання ў любым кантэксце замест канстант, ужыты ў метадах:
    • new для ўсіх цэлых, выдатных ад нуля;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub і saturating_mul для ўсіх цэлых;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_graphic, 8.
  • Для FreeBSD задзейнічаны інструментар з FreeBSD 11.4/10 (FreeBSD 11 не падтрымлівае LLVM XNUMX).

ўзята з opennet.ru

Крыніца: linux.org.ru

Дадаць каментар