Випуск мови програмування 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

Додати коментар або відгук