Rust (язык)

Материал из llmdocs — справочник разработчика
Портал: Go и Rust
Rust (язык)
Класс языкамультипарадигменный, системный
Появился в2010 (публично), 1.0 — 15 мая 2015
АвторГрейдон Хоар
Разработчикпроект Rust, Rust Foundation (с 2021)
Выпуск версийкаждые 6 недель; редакции 2015, 2018, 2021, 2024
Типизациястатическая, строгая, с выводом типов
Управление памятьювладение и заимствование, без сборщика мусора
Компиляторrustc (бэкенд LLVM)
Расширение файлов.rs
ЛицензияMIT / Apache 2.0
Сайтrust-lang.org

Rust — компилируемый системный язык программирования, который сочетает производительность уровня C и C++ с гарантиями безопасности памяти. Ошибки вроде обращения к освобождённой памяти, двойного освобождения и гонок данных отсекаются ещё на этапе компиляции благодаря системе владения и заимствования, без сборщика мусора и без накладных расходов во время работы программы. Rust используют для операционных систем, браузеров, сетевых сервисов, инструментов командной строки и WebAssembly.

История

Грейдон Хоар начал Rust как личный проект в 2006 году; в 2009-м его разработку стала спонсировать Mozilla, рассчитывая использовать язык для нового браузерного движка Servo. Ранние версии сильно отличались от современной: в языке были сборщик мусора и зелёные потоки, от которых впоследствии отказались.

Стабильная версия Rust 1.0 вышла 15 мая 2015 года с обещанием обратной совместимости.[2] С тех пор новые версии выходят каждые шесть недель.[6] Несовместимые изменения синтаксиса вводятся через редакции (editions) — 2015, 2018, 2021 и 2024; крейты разных редакций свободно работают вместе.[4]

В 2021 году создан независимый фонд Rust Foundation, учредителями которого стали AWS, Google, Huawei, Microsoft и Mozilla.[3] В 2022 году поддержка Rust вошла в ядро Linux (версия 6.1) как второй язык после C.[5] Язык много лет подряд возглавлял опрос Stack Overflow в номинации «самый любимый». Неофициальный талисман — краб Феррис.

Ключевые идеи

  • Владение. У каждого значения ровно один владелец; когда владелец выходит из области видимости, значение освобождается. Передача значения перемещает владение.
  • Заимствование. Можно одновременно иметь либо сколько угодно неизменяемых ссылок &T, либо одну изменяемую &mut T. Это правило исключает гонки данных.
  • Абстракции без накладных расходов. Итераторы, замыкания, обобщённые типы компилируются в код, сравнимый с написанным вручную.
  • Алгебраические типы и сопоставление с образцом. enum с данными и match, проверяющий полноту вариантов.
  • Нет null и исключений. Отсутствие значения выражается типом Option<T>, ошибка — Result<T, E> (см. Обработка ошибок в Rust (Result, ?)).
  • Трейты вместо наследования (см. Трейты (Rust)).

Пример

use std::collections::HashMap;

fn word_count(text: &str) -> HashMap<String, usize> {
    let mut counts = HashMap::new();
    for word in text.split_whitespace() {
        *counts.entry(word.to_lowercase()).or_insert(0) += 1;
    }
    counts
}

fn main() {
    let counts = word_count("Раз два раз три раз");
    match counts.get("раз") {
        Some(n) => println!("«раз» встречается {n} раз(а)"),
        None => println!("не найдено"),
    }
}

Инструменты

Экосистема собрана вокруг официальных утилит:

  • rustup — установка компилятора и переключение между версиями;
  • Cargo — сборка, зависимости, тесты, публикация пакетов (крейтов) на crates.io;
  • Clippy и rustfmt — линтер и форматировщик;
  • rust-analyzer — языковой сервер для редакторов.

Компилятор славится подробными сообщениями об ошибках с подсказками, как их исправить.

Применение

  • системное ПО: компоненты Windows, Android, ядра Linux;
  • инфраструктура: прокси, базы данных, среды исполнения (например, Deno);
  • инструменты разработчика: Ruff и uv для Python, ripgrep, сборщики JavaScript;
  • встраиваемые системы и WebAssembly.

Сравнение

Rust C++ Go
Безопасность памяти гарантирована компилятором (вне unsafe) на совести программиста сборщик мусора
Сборщик мусора нет нет есть
Скорость компиляции низкая низкая высокая
Порог входа высокий высокий низкий

Для низкоуровневых операций, которые компилятор не может проверить, есть блоки unsafe (см. Unsafe Rust).

Критика

Главные претензии — крутая кривая обучения (споры с «проверяющим заимствования»), долгая компиляция больших проектов и сложность асинхронного программирования. Кроме того, экосистема моложе, чем у C++ или Java, и ряд библиотек ещё не достиг версии 1.0.

См. также

Источники

  1. The Rust Programming Language (книга)
  2. Announcing Rust 1.0 — Rust Blog
  3. Rust Foundation — About
  4. The Rust Edition Guide
  5. Rust for Linux
  6. Rust Release Train (6-week cycle)