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

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

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

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

  • Истифодаи макроси «ваҳим!» устувор гардид. дар контекстҳое, ки ҳангоми таҳия сохта шудаанд, ба монанди эъломияҳои "const fn". Илова бар ин, ба ғайр аз истифодаи "ваҳшат!" Эъломияҳои const ба истифодаи макроси "тасдиқ!" иҷозат медиҳанд. ва баъзе дигар API-ҳои стандартии китобхона. Муътадилсозӣ ҳанӯз тамоми инфрасохтори форматкуниро фаро намегирад, аз ин рӯ дар шакли ҳозираи худ макроси "ваҳшат!" метавонад танҳо бо сатрҳои статикӣ (panic!(“...")) ё бо арзиши ягонаи интерполятсионии "&str" ҳангоми ивазкунӣ истифода шавад (panic!("{}", a)), ки бояд бо иваз кардани "{ маҳдуд карда шавад. }" бидуни форматкунии мушаххаскунанда ва дигар намудҳо. Дар оянда, татбиқи макросҳо дар контекстҳои доимӣ васеъ карда мешавад, аммо қобилиятҳои мӯътадилшуда барои анҷом додани санҷишҳои тасдиқкунӣ дар марҳилаи тартибдиҳӣ кифояанд: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = тасдиқ!(std::mem::size_of:: () == 8);
  • Менеҷери бастаи боркаш имкон медиҳад, ки профилҳоро бо номҳои худсарона истифода баранд, на бо "dev", "release", "test" ва "bench". Масалан, барои фаъол кардани оптимизатсия дар марҳилаи пайвастшавӣ (LTO) танҳо ҳангоми тавлиди маҷмӯаҳои ниҳоӣ, шумо метавонед дар Cargo.toml профили "истеҳсолӣ" эҷод кунед ва ба он парчами "lto = true" -ро илова кунед. Аммо, ҳангоми муайян кардани профилҳои худ, шумо бояд профили мавҷударо барои мерос гирифтани танзимоти пешфарз аз он муайян кунед. Намунаи дар поён овардашуда профили "истеҳсолӣ"-ро эҷод мекунад, ки профили "релиз"-ро тавассути дохил кардани парчами "lto = true" пурра мекунад. Худи профил тавассути занги бор бо варианти "--profile production" фаъол карда мешавад ва артефактҳои васлкунӣ дар директорияи "мақсад/истеҳсол" ҷойгир карда мешаванд. [profile.production] мерос = "озод" lto = ҳақиқӣ
  • Истифодаи try_reserve барои намудҳои Vec, String, HashMap, HashSet ва VecDeque мӯътадил карда шудааст, ки ба шумо имкон медиҳад, ки барои миқдори муайяни унсурҳои навъи додашуда ҷойро пешакӣ захира кунед, то басомади амалиёти тақсимоти хотираро коҳиш диҳед ва пешгирӣ кунед. хангоми кор аз сабаби нарасидани хотира.
  • Иҷозат дода мешавад, ки макросҳоро бо қавсҳои ҷингила дар ибораҳое мисли "m!{ .. }.method()" ва "m!{ .. }?".
  • Иҷрои функсияҳои File::read_to_end ва read_to_string оптимизатсия карда шудааст.
  • Дастгирии мушаххасоти Юникод ба версияи 14.0 навсозӣ шудааст.
  • Миқдори функсияҳое, ки бо аломати "#[бояд_истифода]" нишон дода шудаанд, барои додани огоҳӣ дар сурати сарфи назар кардани арзиши бозгашт, васеъ карда шуд, ки ба муайян кардани хатогиҳое, ки дар натиҷаи фарз кардани функсия ба вуҷуд омадаанд, ба ҷои баргардонидани арзиши нав арзишҳоро тағир медиҳад.
  • Иловаи пуштибонии таҷрибавӣ барои тавлиди код бо истифода аз libgccjit.
  • Қисмати нави API ба категорияи устувор гузаронида шуд, аз ҷумла усулҳо ва татбиқи хислатҳо устувор карда шуданд:
    • [Т; N] :: as_mut_slice
    • [Т; N]:: as_slice
    • коллексияҳо ::TryReserveError
    • HashMap::try_reserve
    • HashSet :: try_reserve
    • String ::try_reserve
    • Сатр :: try_reserve_exact
    • Vec::try_reserve
    • Vec :: try_reserve_exact
    • VecDeque :: try_reserve
    • VecDeque :: try_reserve_exact
    • Итератор :: map_while
    • iter :: MapWhile
    • proc_macro :: дастрас аст
    • Фармони ::get_program
    • Фармони ::get_args
    • Фармони ::get_envs
    • Фармони ::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Аттрибути "const", ки муайян мекунад, ки оё онро дар ҳама гуна контекст ба ҷои доимӣ истифода бурдан мумкин аст, дар функсияи hint::unreachable_unchecked истифода мешавад.
  • Сатҳи сеюми дастгирӣ барои armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi ва armv7a-km амалӣ карда шудааст. платформаҳои solid_asp3-eabihf. Сатҳи сеюм дастгирии асосиро дар бар мегирад, аммо бидуни санҷиши автоматикунонидашуда, нашри сохторҳои расмӣ ё тафтиши он, ки оё код сохта мешавад.

Манбаъ: opennet.ru

Илова Эзоҳ