Опубліковано реліз мови програмування Rust 1.94, заснованого проектом Mozilla, але нині розвивається під заступництвом незалежної некомерційної організації Rust Foundation. Мова сфокусована на безпечній роботі з пам'яттю та надає засоби для досягнення високого паралелізму виконання завдань, при цьому обходячись без використання збирача сміття та runtime (runtime зводиться до базової ініціалізації та супроводу стандартної бібліотеки).
Методи роботи з пам'яттю в Rust націлені на виключення помилок при маніпулюванні вказівниками та захист від проблем, що виникають через низькорівневу роботу з пам'яттю, таких як звернення до області пам'яті після її звільнення, розіменування нульових покажчиків, вихід за межі буфера і т.п. Для поширення бібліотек, забезпечення збирання та управління залежностями проектом розвивається пакетний менеджер Cargo. Для розміщення бібліотеки підтримується репозиторій crates.io.
Безпечна робота з пам'яттю забезпечується в Rust під час компіляції через перевірку посилань, відстеження володіння об'єктами, облік часу життя об'єктів (області видимості) та оцінку коректності доступу до пам'яті під час виконання коду. Rust також надає засоби для захисту від цілих переповнень, вимагає обов'язкової ініціалізації значень змінних перед використанням, краще обробляє помилки в стандартній бібліотеці, застосовує концепцію незмінності посилань і змінних за умовчанням, пропонує сильну статичну типізацію для мінімізації логічних помилок.
Основні нововведення:
- У тип slice додано метод array_windows, що створює ітератор для проходження по зрізах (slice) вікнами фіксованого розміру, що зсуваються на один елемент за раз. На відміну від раніше доступного металу windows, метод array_windows оперує постійним розміром вікна та повертає при кожній ітерації посилання на масив фіксованого розміру (&[T; N]) замість зрізу невизначеного розміру (&[T]). Так як розмір масиву спочатку відомий компілятор, для підвищення продуктивності можна обійтися без перевірки меж масиву на кожній стадії ітерації. let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
- У конфігураційних файлах пакетного менеджера Cargo (.cargo/config.toml) реалізована директива "include", що дозволяє за місцем вставляти вміст інших файлів. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml"}, { path = "optional.toml", optional = true }, ]
- У файли з маніфестами та конфігураційні файли додана підтримка нової версії мови розмітки TOML 1.1, в якій з'явилася підтримка багаторядкових вбудованих таблиць, escape-послідовностей "\xHH" для вставки шістнадцяткового подання байтів і "\001" для заміни "\u" для заміни "\u" елемента та пропускати вказівку секунд у значеннях часу. serde = { version = "1.0", features = ["derive"] } тепер можна замінити на serde = { version = "1.0", features = ["derive"], }
- У розряд стабільних переведено нову порцію API, у тому числі стабілізовано методи та реалізації типажів:
- <[T]>::array_windows
- <[T]>::element_offset
- LazyCell::get
- LazyCell::get_mut
- LazyCell::force_mut
- LazyLock::get
- LazyLock::get_mut
- LazyLock::force_mut
- impl TryFrom for usize
- std::iter::Peekable::next_if_map
- std::iter::Peekable::next_if_map_mut
- Вбудовані функції для x86-інструкцій avx512fp16
- Вбудовані функції для AArch64-інструкцій NEON fp16
- f32::consts::EULER_GAMMA
- f64::consts::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- Ознака «const» застосована у функціях:
- f32::mul_add
- f64::mul_add
- Платформа riscv64im-unknown-none-elf переведена на третій рівень підтримки. Третій рівень охоплює базову підтримку, але без автоматизованого тестування, публікації офіційних збірок та перевірки можливості складання коду.
Додатково можна відзначити нещодавно анонсовані проекти та події, пов'язані з Rust:
- Айртон Муньос (Ayrton Muñoz), що свого часу реалізував підтримку платформи Sony PlayStation 1 у компіляторі Rust і займався портуванням FreeBSD на комп'ютери з чіпами Apple Silicon, реалізував для FreeBSD можливість створення компонентів ядра та драйверів пристроїв на мові Rust. Для тестування запропоновано набір KPI-обв'язок (Kernel Programming Interface), що дозволяють використовувати код на Rust в ядрі FreeBSD, а також створені з використанням даних обв'язок звуковий драйвер virtio (virtio_snd), HID‑драйвер DockChannel для клавіатури в M2 MacBook і кілька низькорівневих драйверів.
Зазначається, що робота над Rust-обв'язками ведеться з кінця 2024 року. У обв'язках поки що реалізовано лише частину C‑KPI і вони позиціонуються як не стабільні, але згодом рівень стабільності планують довести до аналогічного інтерфейсу мови Сі. Запропонований як приклад драйвер virtio_snd придатний для відтворення музики QEMU. Передбачається, що в 2026 році Rust-обв'язки буде достатньо стабілізовано для того, щоб зацікавлені розробники могли почати використовувати їх для написання коду.
- Бенні Зігерт (Benny Siegert), який бере участь у розробці NetBSD, спробував обґрунтувати причини, з яких підтримка мови Rust не з'явиться в ядрі NetBSD: NetBSD підтримує архітектури, для яких Rust недоступний; підтримка наявного в pkgsrc інструментарію Rust вимагає великих зусиль і супроводжується лише декількома розробниками; підтримка Rust у ядрі вимагає включення компілятора Rust до базової системи; при бутстрепінгу Rust в NetBSD використовується попередня версія бінарного пакета, що неприпустимо для самодостатніх дистрибутивів, що розповсюджуються у вихідному коді; цикли формування релізів Rust несумісні з циклом розробки NetBSD та підтримки минулих гілок (наприклад, продовжується підтримуватися гілка NetBSD 9, випущена в 2020 році, в цих умовах знадобилася б постачання та підтримка компілятора Rust шестирічної давності).
- Опубликован выпуск встраиваемой в приложения СУБД Turso 0.5, написанной на языке Rust и совместимой с SQLite на уровне диалекта SQL, формата файлов БД и C API. Из расширенных возможностей отмечается механизм CDC (Change data capture) для отслеживания изменения БД в реальном времени, использование io_uring для асинхронного ввода/вывода в Linux, поддержка векторного поиска, наличие выражения ALTER для изменения схемы БД, возможность шифрования данных в БД, режим инкрементальных вычислений, конструкция «BEGIN CONCURRENT».
- Проект надання можливості використання стандартної бібліотеки Rust в програмах, що виконуються на стороні GPU.
- Emuko — эмулятор RISC-V, написанный на Rust, способный загружать Linux, поддерживающий JIT-компиляцию, способный сохранять и восстанавливать снапшоты состояния.
- RustConn (flatpak) - графічний інтерфейс для керування зовнішніми мережевими з'єднаннями до інших хостів, що підтримує SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust та SFTP. Код написаний на Rust з використанням GTK4 та Wayland.
- Представлено нову гілку проекту zlib-rs 0.6, відзначену як першу стабільну версію, повністю сумісну з zlib C API і придатну для прозорої заміни zlib. Проект спрямований на створення захищеного аналога бібліотеки стиснення даних zlib. Розробка ведеться з огляду на проект zlib-ng, що розвиває високопродуктивний варіант zlib.
- Представлений проект vcad, що розвиває параметричну систему автоматизованого проектування (САПР), написану на Rust та інтегровану з AI-агентами за допомогою протоколу MCP. Підтримується 3D-моделювання, симуляція, робота з 2D-ескізами, компонентне складання, імпорт у форматі STEP та експорт у форматах STL/GLB/STEP/DXF.
- Опубліковано систему розпізнавання мови, написану на Rust і використовує AI-модель Mistral Voxtral Mini 4B Realtime та фреймворк машинного навчання Burn. Проект орієнтований розпізнавання промови на льоту на формування транскрипції при потоковому мовленні.
- Відбувся випуск інструментарію c2rust 0.22, призначеного для трансляції Сі-коду (C99) в unsafe-подання на Rust, близьке за своєю структурою до початкового коду на Сі. Отриманий робочий каркас надалі можна використовувати для поступового переведення на ідіоматичний Rust та позбавлення від unsafe-блоків.
Джерело: opennet.ru
