Rust 1.47 Варақаи забони барномасозӣ

Нашри 1.47 забони барномасозии системаи Rust, ки аз ҷониби лоиҳаи Mozilla асос ёфтааст, нашр шуд. Забон ба бехатарии хотира тамаркуз мекунад, идоракунии автоматии хотираро таъмин мекунад ва воситаҳоро барои ноил шудан ба параллелизми баланди вазифаҳо бидуни истифодаи коллектори партов ё вақти корӣ таъмин мекунад (вақти кор то ибтидосозӣ ва нигоҳдории китобхонаи стандартӣ кам карда мешавад).

Идоракунии хотираи автоматии Rust хатогиҳоро ҳангоми коркарди нишондиҳандаҳо бартараф мекунад ва аз мушкилоте, ки аз коркарди хотираи сатҳи паст ба вуҷуд меоянд, ба монанди дастрасӣ ба минтақаи хотира пас аз озод шудани он, истинодҳои нули нишоннамо, изофаи буфер ва ғайра муҳофизат мекунад. Барои паҳн кардани китобхонаҳо, таъмини ҷамъбаст ва идоракунии вобастагӣ, лоиҳа менеҷери бастаи боркашониро таҳия мекунад. Анбори crates.io барои хостинги китобхонаҳо дастгирӣ карда мешавад.

Навовариҳои асосӣ:

  • Дастгирии хусусиятҳо барои массивҳои андозаи худсарона амалӣ карда шуд. Пештар, аз сабаби номутаносибии муайян кардани функсияҳои умумӣ барои ҳамаи арзишҳои бутун, китобхонаи стандартӣ танҳо барои массивҳои то 32 элементи андозааш пуштибонии дарунсохтро таъмин мекард (сислатҳо барои ҳар як андоза статикӣ муайян карда шуданд). Ба шарофати эҷоди функсияи generics const, имкон пайдо шуд, ки функсияҳои умумӣ барои ҳама гуна андозаи массив муайян карда шаванд, аммо онҳо ҳанӯз ба хусусиятҳои устувори забон дохил карда нашудаанд, гарчанде ки онҳо дар компилятор амалӣ карда мешаванд ва ҳоло дар китобхонаи стандартӣ истифода мешаванд барои намудҳои массивҳои ҳама гуна андоза.
    Масалан, сохтори зерин дар Rust 1.47 мундариҷаи массивро чоп мекунад, гарчанде ки қаблан он ба хатогӣ оварда мерасонад:

fn main() {
бигзор xs = [0; 34];
println!("{:?}", xs);
}

  • Таъмини баромади кӯтоҳтар (backtrace), баромад дар ҳолатҳои фавқулодда. Унсурҳое, ки дар аксари ҳолатҳо ҷолиб нестанд, аммо натиҷаро парешон мекунанд ва диққатро аз сабабҳои асосии мушкилот парешон мекунанд, аз пайгирӣ хориҷ карда мешаванд. Барои баргардонидани пайгирии пурра, шумо метавонед тағирёбандаи муҳити "RUST_BACKTRACE=full"-ро истифода баред. Масалан, барои код

fn main() {
дар воҳима будан!();
}

Пештар, пайгирӣ дар 23 марҳила бароварда мешуд, аммо ҳоло он ба 3 марҳила кам карда мешавад, ки ба шумо имкон медиҳад, ки моҳиятро фавран дарк кунед:

риштаи "маин" аз "ваҳми ошкор" ба воҳима афтод, src/main.rs:2:5
пайгирии стек:
0: std :: panicking ::begin_panic
дар /rustc/d…d75a/library/std/src/panicking.rs:497
1: майдони бозӣ :: асосӣ
дар ./src/main.rs:2
2: core ::ops ::function ::FnOnce ::call_once
дар /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, compiler 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 ва 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_whitescii_ ва барои намудҳои ucont.
  • Барои FreeBSD, абзорҳои FreeBSD 11.4 истифода мешавад (FreeBSD 10 LLVM 11-ро дастгирӣ намекунад).

Аз даст дода шудааст opennet.ru

Манбаъ: linux.org.ru

Илова Эзоҳ