Выпуск мовы праграмавання Rust 1.54

Апублікаваны рэліз мовы сістэмнага праграмавання Rust 1.54, заснаванага праектам Mozilla, але цяпер які развіваецца пад заступніцтвам незалежнай некамерцыйнай арганізацыі Rust Foundation. Мова сфакусаваная на бяспечнай працы з памяццю, забяспечвае аўтаматычнае кіраванне памяццю і дае сродкі для дасягнення высокага паралелізму выканання заданняў, пры гэтым абыходзячыся без выкарыстання зборшчыка смецця і runtime (runtime зводзіцца да базавай ініцыялізацыі і суправаджэнню стандартнай бібліятэкі).

Аўтаматычнае кіраванне памяццю ў Rust пазбаўляе распрацоўніка ад памылак пры маніпуляванні паказальнікамі і абараняе ад праблем, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў, вынахад за межы буфера і да т.п. Для распаўсюджвання бібліятэк, забеспячэнні зборкі і кіраванні залежнасцямі праектам развіваецца пакетны мэнэджар Cargo. Для размяшчэння бібліятэк падтрымліваецца рэпазітар crates.io.

Асноўныя навіны:

  • Дададзена магчымасць выкарыстання ўнутры атрыбутаў макрасаў, якія нагадваюць функцыі (працэдурныя макрасы і макрасы, створаныя пры дапамозе макраса "macro_rules!"). Ад функцый падобныя макрасы адрозніваюцца сімвалам "!" пасля імя (macro!(…)) і падстаноўкай зыходнага тэксту макраса замест генеравання выкліку функцыі. Выклік макрасаў усярэдзіне атрыбутаў можа апынуцца карысным для ўключэння ў якія дакументуюць каментары змесціва з іншых файлаў. Напрыклад, для ўстаўкі змесціва файла README і выніку выканання скрыпту можна паказаць: #![doc = include_str!(«README.md»)] #[path = concat!(env!(«OUT_DIR»)), «/generated.rs» )] mod generated;
  • Стабілізаваны ўбудаваныя ў кампілятар функцыі (Intrinsics) для платформы wasm32, якія дазваляюць выкарыстоўваць інструкцыі SIMD у WebAssembly. Вялікая частка функцый, такіх як v128_bitselect, даступныя ў рэжыме "safe", але некаторыя функцыі якія працуюць з паказальнікамі (напрыклад, v128_load) застаюцца "unsafe".
  • Вернута ўжыванне па змаўчанні інкрыментальнай кампіляцыі, якая дазваляе перазбіраць толькі якія змяніліся часткі кода, што дазваляе значна скараціць час зборкі праекту пры паўторнай кампіляцыі пасля занясення дробных правак. Інкрыментальная кампіляцыя была адключаная ў выпуску 1.52.1 з-за выяўленні ўтоеных памылак, якія ўсплылі пасля дадання дадатковай праверкі загрузкі дадзеных з дыскавага кэша.
  • У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны:
      BTreeMap::into_keys
    • BTreeMap::into_values
    • HashMap::into_keys
    • HashMap::into_values
    • arch::wasm32
    • VecDeque::binary_search
    • VecDeque::binary_search_by
    • VecDeque::binary_search_by_key
    • VecDeque::partition_point
  • У cargo-tree дададзеныя опцыі: «—prune »для выдалення пакета з графа залежнасцяў, «-depth» для высновы толькі элементаў зададзенага ўзроўня ўкладзенасці ў дрэве залежнасцяў, «-edges no-proc-macro» для ўтойвання залежнасцяў працэдурных макрасаў.

Крыніца: opennet.ru

Дадаць каментар