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

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

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

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

  • Функсияҳое, ки бо истифодаи генерикҳои const алоқаманданд, ҳадди ақали маҳсулоти қобили ҳаёт (MVP) таъин шудааст, ки барои қабули васеъ нури сабз медиҳад. Генерикҳои Const имкон медиҳанд, ки намудҳо барои арзишҳои доимӣ, яъне истифодаи далелҳои умумӣ, ки ба як қатор арзишҳои доимӣ маҳдуданд, на намудҳо ё мӯҳлати умр. Ин қобилият имкон медиҳад, ки намудҳои аз рӯи параметри бутун ва абстраксия ҳангоми эҷоди аломатҳо барои массивҳои ҳама гуна андоза бидуни зарурати эҷоди як навъи алоҳида барои ҳар як диапазони арзишҳои эътибор, то аз ҳад зиёд нагузарад.

    Аз нашри ҷорӣ сар карда, массивҳои навъи "[T; N]" (навъи T ва андозаи N) акнун қобилияти абстракт кардани намуд ва андозаро доранд, бо истифода аз арзишҳои ҳама гуна ададҳои бутун, логикӣ ё аломатҳо (намудҳои сохтор ва рақам ҳанӯз дастгирӣ намешаванд). Const generics рушди китобхонаро ба таври назаррас содда мекунад; масалан, барои истифодаи массив, ки ба намуд ва андозаи мушаххас алоқаманд нест, шумо метавонед муайян кунед: struct Array { // ^^^^^^^^^^^^^^^^^^^^ таърифи руйхати умумии доимй: [Т; LENGTH] // ^^^^^^ истифодаи он }

    Вақте ки воқеан бо ин таъриф истифода мешавад, "Array " компилятор версияи мономорфии Array тавлид мекунад: struct Array { рӯйхат: [u8; 32] }

  • API std::array::IntoIter, ки ба генерикҳои доимӣ асос ёфтааст, устувор карда шудааст. Бо он шумо метавонед итераторҳоро аз рӯи арзиш барои ҳама массив эҷод кунед: fn main() { let array = [1, 2, 3, 4, 5]; // Пештар, барои такрори арзиш, шумо бояд усули .iter()-ро барои элемент дар array.iter().copied() { println!(«{}», item); } // Акнун шумо метавонед барои объект дар std::array::IntoIter::new(array) { println!(«{}», item); } }
  • Менеҷери бастаи боркаш ҳоло майдони нави ҳалкунандаро дар Cargo.toml дастгирӣ мекунад, ки метавонад барои фаъол кардани версияи дуюми ҳалли хусусият истифода шавад. Ин ҳалкунандаи нав аз якҷоя кардани хусусиятҳои вобастагии дар бахши "[хусусиятҳо]" номбаршуда худдорӣ мекунад, вақте ки ин кор номувофиқ аст, масалан ҳангоми дохил кардани вобастагӣ, ки хусусияти стандартиро дар сохтани скриптҳо ва макросҳо талаб мекунад, аммо дар иҷрошавандаи ниҳоӣ хусусияти ғайристандартиро истифода мебарад.

    Қаблан, қобилиятҳои бастае, ки дар графики вобастагӣ борҳо зикр шуда буданд, якҷоя карда мешуданд. Масалан, агар лоиҳа foo вобастагӣ дошта бошад, ки қобилиятҳои А ва Вро муайян мекард ва ин баста дар дигар бастаҳои bar ва baz истифода мешуд ва бар аз foo бо қобилияти А ва baz аз foo бо қобилияти B вобаста бошад, пас боркаш ин қобилиятҳоро муттаҳид мекунад ва foo-ро бо қобилиятҳои A ва B фаъол месозад. Ин усул метавонад ба қобилият оварда расонад, ки вобастагӣ бо системаи мақсаднок, ки барои он сохтани ниҳоӣ иҷро шуда буд, номувофиқ аст. Масалан, вақте ки версияи foo бо "#![no_std]" дар файли иҷрошавандаи бо "#![no_std]" сохташуда истифода мешуд ва foo бо "std" ҳангоми сохтан дар build.rs истифода мешуд. Бо нишон додани resolver="2" дар Cargo.toml, менеҷери баста ҳоло кӯшиш мекунад, ки ин низоъро дуруст ҳал кунад ва вобастагии таҳиякунанда, мизбон ва ҳадафро ҷудо кунад.

  • В cargo реализована опция split-debuginfo, задаваемая в секции «[profile]» и соответствующий флаг «-Csplit-debuginfo=unpacked» в rustc, предлагающие реализацию нового метода сохранения отладочной информации, который позволяет избавиться от необходимости вызова утилиты dsymutil и существенно ускорить процесс сборки с отладочной информацией в macOS.
  • "ptr::addr_of!" ва "ptr::addr_of_mut!" макросҳо мӯътадил карда шуданд, ки имкон медиҳад нишондиҳандаҳои хом ба майдонҳои номувофиқ эҷод карда шаванд. истифода std::ptr; #[repr(маҷмӯа)] struct Бастабандишуда { f1: u8, f2: u16, } бигзор басташуда = Бастабандишуда { f1: 1, f2: 2 }; // &packed.f2 нишоннамои номуайян эҷод мекунад, ки боиси рафтори номуайян мегардад, бигзор raw_f2 = ptr::addr_of!(packed.f2); assert_eq!(бехатар {raw_f2.read_unaligned() }, 2);
  • Маҷмӯи нави APIҳо ба категорияи устувор кӯчонида шуд, аз ҷумла усулҳои зерин:
    • Arc :: decrement_strong_count
    • Arc::increment_strong_count
    • Як бор :: як маротиба_заг
    • Peekable::next_agar_eq
    • Пайдошаванда :: оянда_агар
    • Ҷустуҷӯ :: ҷараёни_мақом
    • массив :: IntoIter
    • panic :: panic_any
    • ptr::addr_of!
    • ptr::addr_of_mut!
    • буридан :: бо
    • буридаи :: split_inclusive_mut
    • буридаи ::split_inclusive
    • slice :: strip_prefix
    • slice :: strip_suffix
    • str::split_inclusive
    • sync::OnceState
    • вазифа:: Бедор шавед
  • Дастгирии сатҳи 3 барои i386-unknown-linux-gnu, i486-unknown-linux-gnu, aarch64_be-unknown-linux-gnu, aarch64-unknown-linux-gnu_ilp32 ва aarch64_be-unknown-linux32-platforms амалӣ карда шудааст. Сатҳи 3 дастгирии асосиро таъмин мекунад, аммо бидуни санҷиши автоматӣ, сохтани расмӣ ё санҷиши сохтмон.

Манбаъ: opennet.ru

Хостинги боэътимодро барои сайтҳо бо муҳофизати DDoS, серверҳои VPS VDS харед 🔥 Харидани хостинги боэътимоди вебсайт бо муҳофизати DDoS, серверҳои VPS VDS | ProHoster