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

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

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

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

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

  • Добавлена поддержка литералов для Си-строк (c»текст»), которые хранятся в памяти с завершающим нулевым символом и ассоциированы с типом «CStr». Предполагается, что поддержка Си-строк упростит написание кода, взаимодействующего с прослойками на языках программирования, в которых применяются завершаемые нулевым байтом строки, и позволит выполнять необходимые проверки на стадии компиляции. const HELLO: &core::ffi::CStr = c»Hello, world!»;
  • В асинхронно выполняемых функциях, объявленных при помощи выражения «async fn», разрешено использование рекурсии, т.е. подобные функции теперь могут вызывать сами себя. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await } }
  • Стабилизирован макрос offset_of!, позволяющий определить байтовое смещение полей структур, перечислений, объединений и кортежей, относительно начала типа. На практике макрос может быть полезен в ситуациях, когда требуется работа на уровне смещения полей при отсутствии экземпляра типа. В частности, функциональность offset_of необходима при разработке низкоуровневых компонентов, таких как драйверы. use std::mem; #[repr(C)] struct FieldStruct { first: u8, second: u16, third: u8 } assert_eq!(mem::offset_of!(FieldStruct, first), 0); assert_eq!(mem::offset_of!(FieldStruct, second), 2); assert_eq!(mem::offset_of!(FieldStruct, third), 4);
  • В пакетном менеджере Cargo в профилях релизов по умолчанию включена очистка файлов от отладочных данных (strip = «debuginfo»), если в профиле Cargo явно не включён режим отладки, т.е. если параметр debug = 0.
  • Включена по умолчанию опция «-Zthir-unsafeck=on», обеспечивающая проверку unsafe для промежуточного представления THIR («Typed High-Level Intermediate Representation»).
  • Добавлена lint-проверка static_mut_refs для вывода предупреждения при использовании ссылок на изменяемые статические значения.
  • Реализована возможность применения типажа «From<&[T; N]>» для типа «Cow<[T]>». fn foo(data: impl Into<Cow<‘static, [&’static str]>>) { /* … */ } fn main() { foo(&[«hello», «world»]); }
  • В компиляторе обеспечено выравнивание 16-байтовых типов i128 и u128 для систем x86.
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • array::each_ref
    • array::each_mut
    • core::net
    • f32::round_ties_even
    • f64::round_ties_even
    • mem::offset_of!
    • slice::first_chunk
    • slice::first_chunk_mut
    • slice::split_first_chunk
    • slice::split_first_chunk_mut
    • slice::last_chunk
    • slice::last_chunk_mut
    • slice::split_last_chunk
    • slice::split_last_chunk_mut
    • slice::chunk_by
    • slice::chunk_by_mut
    • Bound::map
    • File::create_new
    • Mutex::clear_poison
    • RwLock::clear_poison
  • Реализован третий уровень поддержки для платформ aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf и riscv32im-risc0-zkvm-elf. Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.

Манбаъ: opennet.ru

Илова Эзоҳ