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

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

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

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

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

  • У пакетному менеджері «cargo» запропоновано команду «add», що дозволяє з командного рядка додавати до маніфеста Cargo.toml нові залежності або змінювати наявні залежності. Команда також дозволяє вказувати окремі властивості (feature) та версії, наприклад: cargo add serde — features derive cargo add nom@5
  • Додано можливість використання «#[derive(Default)]» з переліками (enum), у яких за допомогою атрибуту «#[default]» визначено варіант за замовчуванням. #[derive(Default)] enum Maybe { #[default] Nothing, Something(T), }
  • На платформі Linux задіяна компактніша і швидша реалізація механізму синхронізації Mutex, заснована на застосуванні ф'ютексів, що надаються ядром Linux. На відміну від раніше використовуваної реалізації на базі бібліотеки pthreads, для зберігання стану Mutex у новому варіанті витрачається всього 5 байт замість 40. Аналогічно на futex переведені механізми блокувань Condvar та RwLock.
  • Реалізовано другий рівень підтримки цільової платформи x86_64-unknown-none, призначеної для формування файлів, що виконуються, здатних працювати без операційної системи. Наприклад, цільова платформа може використовуватися при написанні компонентів ядра. Другий рівень підтримки передбачає гарантію складання.
  • Реалізовано третій рівень підтримки для платформ aarch64-pc-windows-gnullvm та x86_64-pc-windows-gnullvm. Третій рівень передбачає базову підтримку, але без автоматизованого тестування, публікації офіційних збірок та перевірки можливості складання коду.
  • У розряд стабільних переведено нову порцію API, у тому числі стабілізовано методи та реалізації типажів:
    • bool::then_some
    • f32::total_cmp
    • f64::total_cmp
    • Stdin::lines
    • windows::CommandExt::raw_arg
    • impl значення за замовчуванням для AssertUnwindSafe
    • від > for Rc
    • від > для Arc<[u8]>
    • FusedIterator для EncodeWide

    Джерело: opennet.ru

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