Rust 1.88: новий реліз мови програмування
Rust 1.88: новий реліз мови програмування з покращеною безпекою пам’яті
Опубліковано реліз мови програмування загального призначення Rust 1.88. Хоча мова була започаткована проектом Mozilla, зараз вона розвивається під опікою незалежної некомерційної організації Rust Foundation. Rust фокусується на безпечній роботі з пам’яттю та надає засоби для досягнення високого паралелізму, при цьому обходячись без використання збирача сміття та runtime (який зводиться до базової ініціалізації та супроводу стандартної бібліотеки).
Особливості роботи з пам’яттю в Rust 1.88
Методи роботи з пам’яттю в Rust захищають розробника від помилок при маніпулюванні вказівниками. Вони запобігають проблемам, що виникають через низькорівневу роботу з пам’яттю. Це включає звернення до області пам’яті після її звільнення, розіменування нульових вказівників та вихід за межі буфера.
Для поширення бібліотек та керування залежностями проект розвиває пакетний менеджер Cargo. Бібліотеки розміщуються в репозиторії crates.io.
Безпечна робота з пам’яттю забезпечується під час компіляції через перевірку посилань, відстеження володіння об’єктами та врахування часу життя об’єктів. Крім того, Rust захищає від цілочисельних переповнень, вимагає ініціалізації змінних перед використанням і застосовує концепцію незмінності посилань за замовчуванням.
Ключові новації у версії Rust 1.88
- Додано можливість вказівки кількох виразів “let” всередині умовних блоків “if” і “while” з використанням для їх об’єднання оператора “&&” (логічне І).
- Додано підтримку написання “голих” функцій, що позначаються атрибутом “#[unsafe(naked)]” та містять всередині один виклик “naked_asm!”. Такі функції не мають епілогу та прологу, згенерованих компілятором.
- В мову предикатів, що застосовується в атрибутах умовної компіляції “cfg” і “cfg_attr”, додано підтримку булевих літералів “true” і “false”.
- У пакетному менеджері Cargo включено автоматичний запуск збирача сміття для очищення кешу в домашньому каталозі користувача. Механізм видалятиме файли crate, до яких не було звернень більше 3 місяців.
- До стабільних переведено нову порцію API, зокрема стабілізовано методи та реалізації типажів, такі як Cell::update, HashMap::extract_if, HashSet::extract_if та інші.
Проекти, пов’язані з Rust
Варто відзначити кілька важливих проектів, пов’язаних з екосистемою Rust:
Проект Munal OS розвиває експериментальну операційну систему, написану на Rust і засновану на концепції unikernel. Система оснащена графічним інтерфейсом та підтримує управління через клавіатуру і мишу. Для мережевої взаємодії пропонується TCP-стек і драйвер мережевого пристрою.
Відбувся випуск ядра Asterinas 0.15.2, написаного на Rust і сумісного з ABI ядра Linux. Ядро підтримує архітектури x86-64 і RISC-V та реалізує 206 з 368 системних викликів Linux.
Для ядра Linux підготовлено утиліту rsched, що дозволяє аналізувати статистику про роботу планувальника завдань. Інструментарій, що працює в просторі користувача, написаний на Rust.
Компанія Collabora повідомила про розробку варіанту інструментарію Coccinelle для мови Rust, призначеного для автоматизації пошуку та перетворення коду.
Розробники GNOME представили бібліотеку для завантаження зображень glycin, написану на мові Rust, яка забезпечує декодування зображень із застосуванням sandbox-ізоляції.
Більше інформації про новий реліз можна знайти на офіційному блозі Rust.