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

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

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

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

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

  • Додано підтримку узагальнених асоційованих типів (GAT, Generic Associated Types), що дають можливість створювати псевдоніми типів, асоційовані з іншим типом, і що дозволяють пов'язувати конструктори типів з типажами. trait Foo {type Bar<'x>; }
  • Реалізовано вираз «let … else», що дозволяє перевіряти умову відповідності шаблону безпосередньо всередині виразу «let» та виконувати довільний код, якщо шаблон не збігається. let Ok(count) = u64::from_str(count_str) else { panic!(«Can't parse integer: '{count_str}'»); };
  • Дозволено використання виразу break для передчасного виходу з іменованих блоків, використовуючи ім'я блоку (мітку) для визначення блоку, що завершується. let result = 'block: { do_thing(); if condition_not_met() { break 'block 1; } do_next_thing(); if condition_not_met() { break 'block 2; } do_last_thing(); 3};
  • Для Linux додана можливість роздільного збереження налагоджувальної інформації (split-debuginfo), яка раніше доступна лише для платформи macOS. При вказанні опції "-Csplit-debuginfo=unpacked" дані debuginfo у форматі DWARF будуть збережені в декілька окремих об'єктних файлів з розширенням ".dwo". При вказівці "-Csplit-debuginfo=packed" буде створено один пакет у форматі ".dwp", що включає всі дані debuginfo для проекту. Для інтеграції debuginfo безпосередньо до .debug_* ELF-об'єктів можна використовувати опцію «-Csplit-debuginfo=off».
  • У розряд стабільних переведено нову порцію API, у тому числі стабілізовано методи та реалізації типажів:
    • std::backtrace::Backtrace
    • Bound::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • Ознака «const», що визначає можливість використання в будь-якому контексті замість констант, застосована у функціях <*const T&>::offset_from та <*mut T>::offset_from
  • У рамках фінальної стадії перекладу реалізації протоколу LSP (Language Server Protocol) на rust-analyzer, застаріла реалізація Rust Language Server (RLS) замінена на сервер-заглушку, що видає попередження з пропозицією перейти на використання rust-analyzer.
  • При компіляції включено підтримку inline-розгортання проміжного коду MIR, що призводить до прискорення компіляції типових crate-пакетів на 3-10%.
  • Для прискорення збірок за розкладом у пакетному менеджері Cargo забезпечено сортування робіт, які чекають на виконання в черзі.

Додатково можна наголосити на інтерв'ю про застосування мови Rust у компанії Volvo для розробки компонентів автомобільних інформаційних систем. Вже існуючий та протестований код переписувати на Rust не планують, але для нового коду Rust є одним із кращих варіантів підвищення якості з меншими витратами. Пов'язані з використанням мови Rust робочі групи також створені у автомобільних об'єднаннях AUTOSAR (AUTomotive Open System ARchitecture) та SAE (Society of Automotive Engineers).

Крім того, Девід Клейдермахер (David Kleidermacher), віце-президент Google з інжинірингу, розповів про переклад на мову Rust коду, що використовується в платформі Android для управління ключами шифрування, а також застосування Rust у реалізації протоколу DNS over HTTPS, у стеку для UWB- чіпів (Ultra-Wideband) та у вреймворку віртуалізації (Android Virtualization Framework), пов'язаному з чіпом Tensor G2. Для Android також розвиваються нові стеки для Bluetooth та Wi-Fi, переписані мовою Rust. Загальна стратегія полягає в поступовому посиленні захисту спочатку через переведення на використання Rust найбільш незахищених та життєво важливих програмних компонентів, а потім охоплюючи й інші пов'язані з ними підсистеми. Минулого року мова Rust була включена до числа мов, допустимих для розробки платформи Android.

Джерело: opennet.ru

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