Опубліковано реліз мови системного програмування Іржа 1.44, Заснованого проектом Mozilla. Мова сфокусована на безпечній роботі з пам'яттю, забезпечує автоматичне керування пам'яттю та надає засоби для досягнення високого паралелізму виконання завдань, при цьому обходячись без використання збирача сміття та час виконання.
Автоматичне управління пам'яттю в Rust позбавляє розробника помилок при маніпулюванні покажчиками і захищає від проблем, що виникають через низькорівневу роботу з пам'яттю, таких як звернення до області пам'яті після її звільнення, розіменування нульових покажчиків, вихід за межі буфера і т.п. Для поширення бібліотек, забезпечення складання та управління залежностями проектом розвивається пакетний менеджер Вантаж, що дозволяє отримати необхідні програми бібліотеки в один клік. Для розміщення бібліотек підтримується репозиторій crates.io.
У тексті анонсу нового випуску розробники Rust вплуталися в політику і демонстративно відмовилися публікувати повноцінний огляд змін у Rust 1.44 на знак солідарності з протестувальниками проти поліцейського насильства, вказавши, що це питання важливіше за обмін технічними знаннями. Основні нововведення:
У пакетний менеджер Cargo інтегрована команда cargo tree, що виводить деревоподібний граф залежностей. Також додана опція "- duplicates" ("cargo tree -d"), що дозволяє оцінити залежності в різних версіях одного пакета.
Для додатків, не прив'язаних до std («#![no_std]»), реалізовано підтримку методів асинхронного програмування, заснованих на функції «async», блоці async move { … } та оператора «.await», які спрощують написання обробників, які не блокують основний потік команд.
У парсер додано підтримку розширюваної схеми визначення ієрархії модулів. Наприклад, наступна конструкція не призведе до виведення помилки, незважаючи на фактичну відсутність модуля «foo/bar/baz.rs» (семантично конструкція, як і раніше, неприпустима і може викликати помилку, але зміни можна побачити та розібрати на рівні макросів та умовної компіляції):
#[cfg(FALSE)] mod foo {
mod bar {
mod baz;
}
}
У компіляторі rustc додано можливість використання прапора "-C codegen-units" в інкрементальному режимі. Перероблено реалізацію catch_unwind, яка тепер не впливає на продуктивність, якщо відключено процес «розмотування» (unwinding) і не виникає винятків.
Забезпечено третій рівень підтримки для платформ aarch64-unknown-none, aarch64-unknown-none-softfloat, arm64-apple-tvos та x86_64-apple-tvos. Третій рівень має на увазі базову підтримку, але без автоматизованого тестування та публікації офіційних збірок.
У розряд стабільних переведено нову порцію API, у тому числі стабілізовано
PathBuf::with_capacity,
PathBuf::capacity,
PathBuf::clear,
PathBuf::reserve,
PathBuf::reserve_exact,
PathBuf::shrink_to_fit,
{f32|f64}::to_int_unchecked,
Layout::align_to,
Layout::pad_to_align,
Layout::array та
Layout::extend.
Розширено функції стандартної бібліотеки:
Доданий спеціальний варіант «vec![]», що безпосередньо відображається у Vec::new(), що дозволяє використовувати «vec![]» у контексті замість констант.
У convert::Infallible додано реалізацію (impl) типажу Мішанина.
В OsString реалізовані розумні покажчики DerefMut и IndexMut, що повертають "&mut OsStr".
У proc_macro::LexError реалізовані fmt::Display та Error.
Ознака «const», що визначає можливість використання у будь-якому контексті замість констант, застосований у методах from_le_bytes, to_le_bytes, from_be_bytes, to_be_bytes, from_ne_bytes та to_ne_bytes для всіх цілих типів.
Додано підтримку генерації статичних бібліотек у форматі «.a» замість «.lib» для GNU-платформ для Windows.
Мінімальні вимоги до LLVM піднято до версії LLVM 8.