Нашри забони барномасозии Rust 1.59 бо дастгирии замимаҳои ассамблея

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

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

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

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

  • Истифодаи замимаҳои забони ассемблерӣ имконпазир аст, ки дар барномаҳое, ки бояд иҷроро дар сатҳи паст назорат кунанд ё метавонанд дастурҳои махсуси мошинро истифода баранд, талабот доранд. Замимаҳои васлкунӣ бо истифода аз макросҳои "asm!" ва "global_asm!" бо истифода аз синтаксиси форматкунии сатр барои номгузории регистрҳо, ки барои иваз кардани сатр дар Rust истифода мешавад. Компилятор дастурҳои васлкуниро барои меъмории x86, x86-64, ARM, AArch64 ва RISC-V дастгирӣ мекунад. Намунаи воридкунӣ: истифода std::arch::asm; // Бо истифода аз гузариш x-ро ба 6 зарб кунед ва let mut x-ро илова кунед: u64 = 4; хатарнок { asm!( "mov {tmp}, {x}", "shl {tmp}, 1", "shl {x}, 2", "add {x}, {tmp}", x = inout(reg ) x, tmp = out(reg) _, ); } assert_eq!(x, 4 * 6);
  • Дастгирии иловашуда барои супоришҳои вайроншуда (параллелӣ), ки дар он якчанд хислатҳо, буридаҳо ё сохторҳо дар тарафи чапи ифода нишон дода шудаанд. Масалан: бигзор (а, б, в, г, д); (а, б) = (1, 2); [c, .., d, _] = [1, 2, 3, 4, 5]; Struct { e, .. } = Struct { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • Имконияти муайян кардани арзишҳои пешфарз барои generics const дода шудааст: struct ArrayStorage {арр: [Т; N], } ишора ArrayStorage {fn new(a: T, b: T) -> ArrayStorage { ArrayStorage {арр: [a, b], } } }
  • Менеҷери бастаи боркаш дар бораи истифодаи сохторҳои беэътибор дар вобастагӣ, ки бо сабаби хатогиҳо дар компилятор коркард карда мешаванд, огоҳӣ медиҳад (масалан, аз сабаби хатогӣ, майдони сохторҳои бастабандӣ иҷозат дода шуд, ки дар блокҳои бехатар қарз гиранд). Чунин сохтмонҳо дигар дар версияи ояндаи Rust дастгирӣ намешаванд.
  • Cargo ва rustc дорои қобилияти дарунсохт барои тавлиди файлҳои иҷрошаванда, ки аз маълумоти хатогиҳо (рах = "debuginfo") ва рамзҳо (рах = "рамзҳо") ҷудо карда шудаанд, бе зарурати занги утилитаи алоҳида. Танзимоти тозакунӣ тавассути параметри "рах" дар Cargo.toml амалӣ карда мешавад: [profile.release] strip = "debuginfo", "рамзҳо"
  • Тартиби афзоянда бо нобаёнӣ ғайрифаъол аст. Гуфта мешавад, ки сабаб як роҳи муваққатии иштибоҳ дар компилятор мебошад, ки боиси садамаҳо ва хатогиҳои сериализатсия мешавад. Ислоҳи хато аллакай омода шудааст ва ба нашри навбатӣ дохил карда мешавад. Барои баргардонидани маҷмӯаи афзоянда, шумо метавонед тағирёбандаи муҳити RUSTC_FORCE_INCREMENTAL=1-ро истифода баред.
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • std::thread::available_parallelism
    • Натиҷа :: нусхабардорӣ шудааст
    • Натиҷа :: клон карда шудааст
    • arch::asm!
    • arch::global_asm!
    • ops :: ControlFlow :: is_break
    • опс :: ControlFlow :: идома дорад
    • TryFrom барои u8
    • char::TryFromCharError (Clone, Debug, Display, PartialEq, Copy, Eq, Error)
    • iter::zip
    • NonZeroU8 :: қудрати_аз_ду аст
    • NonZeroU16 :: қудрати_аз_ду аст
    • NonZeroU32 :: қудрати_аз_ду аст
    • NonZeroU64 :: қудрати_аз_ду аст
    • NonZeroU128 :: қудрати_аз_ду аст
    • DoubleEndedIterator барои сохтори ToLowercase
    • DoubleEndedIterator барои сохтори ToUppercase
    • TryFrom<&mut [T]> барои [T; N]
    • UnwindSafe барои сохтори Once
    • RefUnwindSafe барои як бор
    • armv8 функсияҳои дастгирии neon, ки дар compiler барои aarch64 сохта шудаанд
  • Аттрибути "const", ки имкони истифодаи онро дар ҳама гуна контекст ба ҷои доимӣ муайян мекунад, дар функсияҳо истифода мешавад:
    • mem ::MaybeUninit ::as_ptr
    • mem ::MaybeUninit ::assume_init
    • mem ::MaybeUninit ::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

Манбаъ: opennet.ru

Илова Эзоҳ