Rust – це мова програмування зі статичною типізацією, розроблена для підвищення продуктивності та безпеки, особливо для безпечного паралелізму та управління пам'яттю. Його синтаксис нагадує синтаксис C++. Цей проект з відкритим кодом розроблено фахівцями Mozilla Research. У 2021 році було створено Rust Foundation, який перейняв естафету та став рушійною силою розвитку мови.
Rust вирішує проблеми, з якими тривалий час боролися розробники C/C++: помилки пам'яті та паралельне програмування. Це вважається його основною перевагою. Однак це не єдині приклади того, що Rust вигідно відрізняється від C/C++. Звичайно, можна заперечити, що сучасний C++ приділяє більше уваги безпеці пам'яті (наприклад, шляхом реалізації інтелектуальних покажчиків), але багато проблем залишаються невирішеними. Один із них — «використовувати після звільнення помилок», які трапляються, коли програма продовжує використовувати покажчик після того, як його було звільнено, наприклад, виклик лямбда-функції після звільнення захоплених об'єктів посилання.
З іншого боку, у Rust є засіб перевірки запозичення - частина компілятора, яка стежить за тим, щоб посилання не пережили дані, на які вони посилаються. Ця функція допомагає усунути помилки порушення пам'яті. Такі проблеми виявляються під час компіляції, і збирання сміття не потрібно.
Крім того, в Rust у кожного посилання є час життя, де можна встановити область дії, для якої це посилання дійсне.
Ця функція вирішує проблему з більш недійсними посиланнями, а також вигідно відрізняє Rust C/C++. Важливість правильного керування пам'яттю стає очевидною на наступному прикладі: за останні 12 років близько 70% всіх помилок безпеки в продуктах Microsoft були пов'язані з безпекою пам'яті. Приблизно такі проблеми характерні і для Google Chrome.
У Rust є два режими написання коду: безпечний Rust та небезпечний Rust. Безпечний Rust накладає на програміста додаткові обмеження (наприклад, управління володінням об'єктами), забезпечуючи правильну роботу коду. Небезпечний Rust дає програмісту більше автономії (наприклад, він може працювати з необробленими C-подібними покажчиками), але код може зламатися.
Небезпечний режим Rust відкриває більше можливостей, але програмістам потрібно виявляти особливу обережність, щоб переконатися, що написаний код є дійсно безпечним. Для цього можна обернути його абстракціями вищого рівня, які гарантують безпеку всіх застосувань абстракції. Як і у випадку з іншими мовами програмування, до використання небезпечного коду слід підходити з обережністю, щоб уникнути невизначеної поведінки та мінімізувати ризик segfault (помилка сегментації) та вразливостей, що виникають через небезпеку пам'яті.
Дворежимна модель Rust - одна з його найбільших переваг. З іншого боку, у C++ ви ніколи не дізнаєтеся, що написали небезпечний код, поки десь у майбутньому ваше програмне забезпечення не вийде з ладу або не виникне пролом у системі безпеки.