Випуск мови програмування Rust 1.67

Опубліковано реліз мови програмування загального призначення Rust 1.67, заснованого проектом Mozilla, але нині розвивається під заступництвом незалежної некомерційної організації Rust Foundation. Мова сфокусована на безпечній роботі з пам'яттю та надає засоби для досягнення високого паралелізму виконання завдань, при цьому обходячись без використання збирача сміття та runtime (runtime зводиться до базової ініціалізації та супроводу стандартної бібліотеки).

Методи роботи з пам'яттю в Rust позбавляють розробника помилок при маніпулюванні покажчиками і захищають від проблем, що виникають через низькорівневу роботу з пам'яттю, таких як звернення до області пам'яті після її звільнення, розіменування нульових покажчиків, вихід за межі буфера і т.п. Для поширення бібліотек, забезпечення збирання та управління залежностями проектом розвивається пакетний менеджер Cargo. Для розміщення бібліотеки підтримується репозиторій crates.io.

Безпечна робота з пам'яттю забезпечується в Rust під час компіляції через перевірку посилань, відстеження володіння об'єктами, облік часу життя об'єктів (області видимості) та оцінку коректності доступу до пам'яті під час виконання коду. Rust також надає засоби для захисту від цілих переповнень, вимагає обов'язкової ініціалізації значень змінних перед використанням, краще обробляє помилки в стандартній бібліотеці, застосовує концепцію незмінності посилань і змінних за умовчанням, пропонує сильну статичну типізацію для мінімізації логічних помилок.

Основні нововведення:

  • Для функцій async з Future::Output реалізована можливість вказівки анотацій «#[must_use]», що включають виведення попередження у разі ігнорування значення, що повертається, що допомагає виявити помилки, викликані припущенням, що функція змінить значення, а не поверне нове значення. #[must_use] async fn bar() -> u32 { 0 } async fn caller() { bar().await; } warning: unused output of future returned by `bar` that must be used —> src/lib.rs:5:5 | 5 | bar().await; | ^^^^^^^^^^^ | = note: `#[warn(unused_must_use)]` on by default
  • Оновлено реалізацію FIFO-черг std::sync::mpsc (multi-producer single-consumer), яка переведена на використання модуля crossbeam-channel із збереженням колишнього API. Нова реалізація відрізняється вирішенням низки проблем, більш високою продуктивністю та спрощенням супроводу коду.
  • У розряд стабільних переведено нову порцію API, у тому числі стабілізовано методи та реалізації типажів:
    • {integer}::checked_ilog
    • {integer}::checked_ilog2
    • {integer}::checked_ilog10
    • {integer}::ilog
    • {integer}::ilog2
    • {integer}::ilog10
    • NonZeroU*::ilog2
    • NonZeroU*::ilog10
    • NonZero*::BITS
  • Ознака «const», що визначає можливість використання в будь-якому контексті замість констант, застосована у функціях:
    • char::from_u32
    • char::from_digit
    • char::to_digit
    • core::char::from_u32
    • core::char::from_digit
  • Реалізовано третій рівень підтримки для використання Rust в ядрі Linux (linuxkernel), а також для платформ Sony PlayStation 1 (mipsel-sony-psx), PowerPC з AIX (powerpc64-ibm-aix), QNX Neutrino RTOS (aarch64-unknown-nto- qnx710, x86_64-pc-nto-qnx710). Третій рівень передбачає базову підтримку, але без автоматизованого тестування, публікації офіційних збірок та перевірки можливості складання коду.

Додатково можна відзначити публікацію компанією ARM патчів, що дозволяють використовувати мову Rust для розробки драйверів та модулів ядра Linux, які збираються для систем на базі архітектури AArch64.

Джерело: opennet.ru

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