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

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

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

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

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

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

  • Дастгирии пурра барои истифодаи оператори “?” илова карда шуд. дар озмоишҳо доктестхо, ба шумо имкон медиҳад, ки рамзи намунаи ҳуҷҷатҳоро ҳамчун санҷиш истифода баред. Пештар оператор
    "?" метавонад барои коркарди хатогиҳо ҳангоми иҷрои санҷиш танҳо дар ҳузури функсияи “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), навъи хато илова карда шудааст Беэътибор, имкон медиҳад, ки истифодаи шаффоф
    TryFrom барои ҳамаи татбиқҳои мавҷудаи "Аз";

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

  • Навъҳои бутуни атомии мӯътадилшуда, ки аз 8 то 64 бит мебошанд (масалан, AtomicU8), инчунин намудҳои имзошуда NonZeroI[8|16|32|64|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" илова карда шуд.

Манбаъ: opennet.ru

Илова Эзоҳ