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

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

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

У тэксце анонсу новага выпуску распрацоўнікі Rust увязаліся ў палітыку і дэманстратыўна адмовіліся публікаваць паўнавартасны агляд змен у Rust 1.44 у знак салідарнасці з пратэстоўцамі супраць паліцыянта гвалту, паказаўшы, што гэтае пытанне важней абмену тэхнічнымі ведамі. Асноўныя навіны:

  • У пакетны мэнэджар Cargo інтэграваная каманда «cargo tree», якая выводзіць дрэвападобны граф залежнасцяў. Таксама дададзена опцыя "-duplicates" ("cargo tree -d"), якая дазваляе ацаніць залежнасці ў розных версіях аднаго пакета.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── ammonia v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── log v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── mac v0.1.1
    │ │ └── markup5ever v0.9.0
    │ │ ├── log v0.4.8 (*)
    │ │ ├── phf v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── siphasher v0.2.3
    │ │ │ └── unicase v1.4.2
    │ │ │ [build-dependencies] │ │ │ └── version_check v0.1.5
    ...

  • Для прыкладанняў, не прывязаных да std («#![no_std]»), рэалізавана падтрымка метадаў асінхроннага праграмавання, заснаваных на функцыі «async», блоку async move {…} і аператару «.await», якія спрашчаюць напісанне апрацоўшчыкаў, якія не блакуюць асноўны паток каманд.
  • У парсер дададзеная падтрымка якая пашыраецца схемы вызначэння іерархіі модуляў. Напрыклад, наступная канструкцыя не прывядзе да высновы памылкі, нягледзячы на ​​фактычную адсутнасць модуля "foo/bar/baz.rs" (семантычна канструкцыя па-ранейшаму недапушчальная і можа выклікаць памылку, але змены можна ўбачыць і разабраць на ўзроўні макрасаў і ўмоўнай кампіляцыі):

    #[cfg(FALSE)] mod foo {
    mod bar {
    mod baz;
    }
    }

  • У кампілятары rustc дададзена магчымасць выкарыстання сцяга "-C codegen-units" у інкрыментальным рэжыме. Перапрацаваная рэалізацыя catch_unwind, якая зараз не ўплывае на прадукцыйнасць, калі адключаны працэс «размоткі» (unwinding) і не ўзнікае выключэнняў.
  • Забяспечаны трэці ўзровень падтрымай для платформаў aarch64-unknown-none, aarch64-unknown-none-softfloat, arm64-apple-tvos і x86_64-apple-tvos. Трэці ўзровень мае на ўвазе базавую падтрымку, але без аўтаматызаванага тэсціравання і публікацыі афіцыйных зборак.
  • У разрад стабільных пераведзена новая порцыя API, у тым ліку стабілізаваны
    PathBuf::with_capacity,
    PathBuf::capacity,
    PathBuf::clear,
    PathBuf::reserve,
    PathBuf::reserve_exact,
    PathBuf::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    Layout::align_to,
    Layout::pad_to_align,
    Layout::array і
    Layout::extend.

  • Пашыраны функцыі стандартнай бібліятэкі:
    • Дададзены адмысловы варыянт "vec![]", які напроста адлюстроўваецца ў Vec::new(), што дазваляе выкарыстоўваць "vec![]" у кантэксце замест канстант.
    • У convert::Infallible дададзена рэалізацыя (impl) тыпажу гашыш.
    • У OsString рэалізаваны разумныя паказальнікі DerefMut и IndexMut, якія вяртаюць "&mut OsStr".
    • Дададзена падтрымка Unicode 13.
    • У String рэалізаваны From<&mut str>.
    • У IoSlice рэалізаваны тыпаж Скапіяваць.
    • У Vec рэалізаваны From<[T; N]>.
    • У proc_macro::LexError рэалізаваны fmt::Display і Error.
  • Прыкмета "const", які вызначае магчымасць выкарыстання ў любым кантэксце замест канстант, ужыты ў метадах from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes і to_ne_bytes для ўсіх цэлалікавых тыпаў.
  • Дададзена падтрымка генерацыі статычных бібліятэк у фармаце ".a" замест ".lib" для GNU-платформаў для Windows.
  • Мінімальныя патрабаванні да LLVM падняты да версіі LLVM 8.

Крыніца: opennet.ru

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