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

Забони барномасозии системавии Rust 1.34, ки аз ҷониби лоиҳаи Mozilla таҳия шудааст, бароварда шуд. Забон ба бехатарии хотира тамаркуз мекунад, идоракунии автоматии хотираро таъмин мекунад ва воситаеро барои ноил шудан ба параллелизми баланди вазифаҳо бидуни истифодаи коллектор ё вақти корӣ таъмин мекунад.

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

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

  • Менеҷери бастаи боркаш асбобҳоро барои кор бо феҳристи бастаҳои алтернативӣ илова кардааст, ки метавонанд бо феҳристи ҷамъиятии crates.io ҳамзист бошанд. Масалан, таҳиягарони замимаҳои хусусӣ акнун метавонанд феҳристи хусусии худро истифода баранд, ки онро ҳангоми номгӯи вобастагӣ дар Cargo.toml истифода бурдан мумкин аст ва модели версияи шабеҳи crates.io-ро барои маҳсулоти худ истифода баранд ва инчунин вобастагӣ ба ҳарду қуттиҳоро истинод кунанд. io ва ба феҳристи шахсии худ.

    Барои илова кардани феҳристи беруна ба ~/.cargo/config
    варианти нави "реестри ман" дар бахши "[реестрҳо]" пешниҳод карда шудааст ва опсияи "дигар-сантиқ" барои зикри феҳристи беруна дар вобастагӣ дар Cargo.toml дар бахши "[вобастагӣ]" илова карда шудааст. Барои пайваст шудан ба реестри иловагӣ, танҳо аломати аутентификатсияро дар файли ~/.cargo/credentials ҷойгир кунед ва фармонро иҷро кунед.
    "login cargo --registry=my-registry" ва барои нашри баста -
    "cargo publish -registry=my-registr";

  • Дастгирии пурра барои истифодаи оператори “?” илова карда шуд. дар doctests, ки ба шумо имкон медиҳанд рамзи намунаи ҳуҷҷатҳоро ҳамчун санҷиш истифода баред. Пештар оператор
    "?" метавонад барои коркарди хатогиҳо ҳангоми иҷрои санҷиш танҳо дар ҳузури функсияи “fn main()” ё дар функсияҳои “#[test]” истифода шавад;

  • Дар атрибутҳои фармоишӣ, ки бо истифода аз макросҳои мурофиавӣ муайян карда шудаанд, мумкин аст, ки маҷмӯи худсаронаи нишонаҳо (“#[attr($tokens)]”, “#[attr[$tokens]] ва #[attr{$tokens}]”) истифода шаванд. Пештар, элементҳоро танҳо дар дарахт/шакли рекурсивӣ бо истифода аз литералҳои сатр муайян кардан мумкин буд, масалан "#[foo(bar, baz(quux, foo = "bar"))]", аммо ҳоло имкони истифодабарии шуморишҳо (' #[диапазон(0. .10)]') ва конструксияҳо ба монанди "#[bound(T: MyTrait)]";
  • Хусусиятҳои TryFrom ва TryInto мӯътадил карда шуданд, ки имкон медиҳад табдили намуд бо коркарди хатогӣ. Масалан, усулҳо ба монанди from_be_bytes бо намудҳои бутун массивҳоро ҳамчун вуруд истифода мебаранд, аммо маълумот аксар вақт дар намуди Slice меояд ва табдил додани байни массивҳо ва буридаҳо ба таври дастӣ мушкил аст. Бо ёрии хислатҳои нав, амалиёти муайяншударо метавон тавассути занг ба .try_into(), масалан, “бигзор num = u32::from_be_bytes(slice.try_into()?)” иҷро кард. Барои табдилҳое, ки ҳамеша муваффақ мешаванд (масалан, аз навъи u8 то u32), як навъи хатои Infallible илова карда шудааст, то истифодаи шаффофи
    TryFrom барои ҳамаи татбиқҳои мавҷудаи "Аз";

  • Функсияи CommandExt::before_exec бекор карда шуд, ки иҷрои коркардкунандаро пеш аз exec иҷозат дод, ки дар контексти раванди кӯдак пас аз занги fork() иҷро мешуд. Дар чунин шароит, баъзе захираҳои раванди волидайн, аз қабили дескрипторҳои файл ва минтақаҳои хотираи хариташуда, метавонанд такрор шаванд, ки ин метавонад ба рафтори номуайян ва кори нодурусти китобхонаҳо оварда расонад.
    Ба ҷои before_exec, тавсия дода мешавад, ки функсияи хатарноки CommandExt::pre_exec истифода шавад.

  • Навъҳои бутуни атомии мӯътадилшуда аз 8 то 64 бит (масалан, AtomicU8), инчунин намудҳои аломати NonZeroI[8|16|32|54|128].
  • Қисми нави API ба категорияи устувор интиқол дода шуд, аз ҷумла Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] ва усулҳои SystemTime устувор карда шуданд ::checked_[add|sub]. Функсияҳои iter::from_fn ва iter::successors устувор карда шуданд;
  • Барои ҳамаи намудҳои адад усулҳои checked_pow, saturating_pow, wrapping_pow ва overflowing_pow амалӣ карда мешаванд;
  • Имконияти фаъолсозии оптимизатсия дар марҳилаи пайвастшавӣ тавассути муайян кардани варианти сохтани "-C linker-plugin-lto" илова карда шуд (rustc рамзи Rust-ро ба bitcode LLVM тартиб медиҳад, ки имкон медиҳад беҳсозии LTO татбиқ карда шавад).

Манбаъ: opennet.ru

Илова Эзоҳ