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

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

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

Бехатарии хотира дар Rust дар вақти тартибдиҳӣ тавассути санҷиши истинод, нигоҳ доштани моликияти объект, нигоҳ доштани мӯҳлати умри объект (миқёс) ва арзёбии дурустии дастрасии хотира ҳангоми иҷрои код таъмин карда мешавад. Rust инчунин муҳофизатро аз фаромадани ададҳо таъмин мекунад, пеш аз истифода оғозкунии ҳатмии арзишҳои тағирёбандаро талаб мекунад, хатогиҳоро дар китобхонаи стандартӣ беҳтар идора мекунад, консепсияи истинодҳо ва тағирёбандаҳоро ба таври нобаёнӣ татбиқ мекунад, чопкунии қавии статикиро барои кам кардани хатогиҳои мантиқӣ пешниҳод мекунад.

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

  • Дар рӯйхатҳо бо намояндагии бутун (аттрибути "#[repr(Int)]"), нишон додани возеҳи дискриминант (рақами вариант дар рӯйхат) иҷозат дода мешавад, ҳатто агар шумора дорои майдонҳо бошад. #[repr(u8)] enum Foo { A(u8), # дискриминант 0 B(i8), # дискриминант 1 C(bool) = 42, # дискриминант 42 }
  • Функсияи асосии ::hint::black_box иловашуда, ки танҳо арзиши гирифташударо бармегардонад. Азбаски компилятор фикр мекунад, ки ин функсия кореро иҷро мекунад, функсияи black_box метавонад барои хомӯш кардани оптимизатсияи компилятор барои ҳалқаҳо ҳангоми иҷрои санҷиши иҷрои код ё ҳангоми тафтиши коди мошини тавлидшуда истифода шавад (то он ки компилятор кодро истифоданашуда ҳисоб накунад ва онро нест кунад). Масалан, дар мисоли зер, black_box(v.as_ptr()) ба компилятор фикр намекунад, ки вектори v истифода намешавад. истифода std :: hint :: black_box; fn push_cap(v: &mut Vec) {барои i дар 0..4 {v.push(i); black_box(v.as_ptr()); } }
  • Менеҷери бастаи "бор" фармони "нест кардан" -ро пешниҳод мекунад, ки ба шумо имкон медиҳад вобастагиҳоро аз манифести Cargo.toml аз сатри фармон тоза кунед.
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • proc_macro :: Span :: source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{аввал, охирин, pop_first, pop_last}
    • BTreeMap::{арзиши_аввал_калиди, арзиши_охирин_калиди, вуруди_аввал, ворид_охирин, поп_аввал, поп_охирин}
    • Ҳангоми истифодаи WASI, татбиқи AsFd-ро барои намудҳои қулфи stdio илова кунед.
    • impl TryFrom > барои Box<[T; Н]>
    • аслӣ :: ишора :: қуттии сиёҳ
    • Давомнокӣ::try_from_secs_{f32,f64}
    • Варианти :: unzip
    • std::os::fd
  • Дар қолабҳо диапазони "..X" ва "..=X" иҷозат дода шудаанд.
  • Ҳангоми сохтани қисми пеши компилятори rustc ва пуштибони LLVM, режимҳои оптимизатсияи LTO (Link Time Optimization) ва BOLT (Binary Optimization and Layout Tool) барои баланд бардоштани самаранокии рамзи натиҷавӣ ва кам кардани истеъмоли хотира истифода мешаванд.
  • Дастгирии сатҳи сеюм барои платформаҳои armv5te-none-eabi ва thumbv5te-none-eabi амалӣ карда шуд. Сатҳи сеюм дастгирии асосиро дар назар дорад, аммо бидуни санҷиши автоматӣ, нашри сохторҳои расмӣ ва санҷиши қобилияти сохтани код.
  • Дастгирии иловашуда барои пайвастшавӣ ба китобхонаҳои умумии macOS.

Илова бар ин, мо метавонем ба пойгоҳи коди GCC дохил кардани компилятори фронталии забони Rust (gccrs) қайд кунем. Фронт ба филиали GCC 13 дохил карда шудааст, ки моҳи майи соли 2023 бароварда мешавад. Аз GCC 13 сар карда, асбоби стандартии GCC метавонад барои тартиб додани барномаҳои Rust бидуни насби компилятори rustc, ки бо истифода аз таҳияҳои LLVM сохта шудааст, истифода шавад. Татбиқи Rust дар GCC 13 дар ҳолати бета хоҳад буд, бо нобаёнӣ фаъол нест.

Манбаъ: opennet.ru

Илова Эзоҳ