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

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

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

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

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

    Масалан, сохтори зерин дар 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 (Руст истифода мебарад 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,
    Диапазон :: холӣ аст,
    RangeInclusive ::is_empty,
    Натиҷа ::as_deref,
    Натиҷа ::as_deref_mut,
    Vec :: ихроҷ,
    нишондиҳанда ::офсет_аз,
    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

Илова Эзоҳ