Rust (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Rust
. Дата последней синхронизации: 20 января 2022. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Rust package guidelines
Википедия
:
Rust
— мультипарадигмальный компилируемый язык программирования общего назначения, сочетает парадигмы функционального и процедурного программирования с объектной системой, основанной на типажах. Rust гарантирует безопасную работу с памятью благодаря встроенной в компилятор системе статической валидации ссылок (borrow checker). Ключевые приоритеты языка: безопасность, скорость и параллелизм. Rust сопоставим по скорости и возможностям с C++/Си, однако даёт большую безопасность при работе с памятью, что обеспечивается встроенными в язык механизмами контроля ссылок.
Ядро языка
Rust Core Library
Rust Core Library
— свободная от зависимостей основа стандартной библиотеки Rust. Она напрямую взаимодействует с примитивами LLVM, что позволяет Rust не зависеть от конкретных аппаратных и программных платформ. Именно эта интеграция с LLVM позволяет Rust получить производительность выше чем у эквивалентных приложений на C, скомпилированных с помощью Clang, что делает программы на Rust, разработанные с помощью libcore, более низкоуровневыми, чем на C. Она содержит только типы, не зависящие от платформы, такие как
Option
,
Result
и
Iterator
. Разработчики программ для встраиваемых систем могут отключить использование стандартной библиотеки с помощью
#![no_std]
и использовать только «безбатареечный» libcore для уменьшения размера скомпилированных программ и повышения производительности. Однако использование
#![no_std]
ограничивает объём поддержки, которую вы можете получить от сообщества Rust, поскольку большинство библиотек зависят от стандартной библиотеки.
Rust Standard Library
Стандартная библиотека Rust
предоставляет удобные абстракции высокого уровня, с помощью которых создаётся большинство переносимых программ на Rust. Например, она содержит типы
Vec
и
String
; огромное число методов для примитивов языка; много стандартных макросов; поддержка ввода-вывода и многопоточности; использование кучи (heap) с помощью
Box
; и многие другие высокоуровневые возможности, не доступные в libcore.
Цикл выпуска
Rust следует шестинедельному циклу выпуска, похожему на цикл выпуска Firefox. С каждым новым выпуском ядро и стандартные библиотеки улучшаются для поддержки большего числа платформ, повышения производительности и стабилизации новых возможностей для использования со стабильной версией Rust.
Установка
Есть два варианта установки Rust, один из которых поддерживается Arch Linux, а другой официально поддерживается Rust.
Из репозитория
Для установки последней стабильной версии Rust из официальных репозиториев Arch Linux
установите
пакет
rust
. Он установит компилятор
rustc
и
Cargo
.
В
AUR
также доступна development-версия компилятора. Используйте
rust-nightly-bin
AUR
[
ссылка недействительна
: package not found]
для установки заранее скомпилированных файлов или
rust-git
AUR
, чтобы собрать компилятор на своей системе.
С помощью Rustup
Официальный и рекомендумемый способ установки Rust для разработки ПО — с помощью инструмента
Rustup
, написанного на Rust.
Преимуществом использования Rustup вместо обычной установки Rust из репозитория является возможность установки нескольких toolchains (stable, beta, nightly) для нескольких целевых платформ (windows, mac, android) и архитектур (x86, x86_64, arm).
Официальный установочный скрипт
Скачайте скрипт установки командой
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rust.sh
, просмотрите его:
less ./rust.sh
и запустите:
./rust.sh
для установки. Этот скрипт вносит изменения в PATH только в
настройках оболочки входа
. Для применения изменений вам нужно перезайти или выполнить
source ~/.cargo/env
для обновления PATH в текущей командной оболочке. Для обновления rustup в будущем запускайте
rustup self update
.
Скрипт устанавливает и активирует инструментарий (toolchain) по умолчанию (тот же, который используется пакетом
rust
), поэтому нет необходимости устанавливать его вручную, чтобы начать использовать Rust.
Важно
Запуск команды наподобие
curl
какая-то-ссылка
| sh
, как предлагает документация Rust, считается риском для безопасности, поскольку он выполняет неизвестный код, который может быть даже повреждён в процессе загрузки. Поэтому рекомендуется вручную загрузить скрипт и проверить его перед выполнением.
Примечание
Перед запуском
rustup
убедитесь, что
~/.cargo/bin
добавился в переменную окружения
PATH
.
Пакет Arch Linux
В официальных репозиториях Arch Linux есть пакет
rustup
. Обратите внимание, что при установке с помощью этого пакета обновление с помощью
rustup self update
работать
не
будет, и для обновления rustup следует обновлять этот пакет с помощью pacman.
Преимущество этого пакета в том, что исполняемые файлы Rust находятся в
/usr/bin
вместо
~/.cargo/bin
, так что менять переменную окружения
PATH
не требуется.
Примечание
Пакет
rustup
по умолчанию
не
устанавливает никакой инструментарий. Вместо этого он предоставляет символические ссылки
/usr/bin/rustc
и
/usr/bin/cargo
, указывающие на
/usr/bin/rustup
. Пользователю нужно установить инструментарий вручную, чтобы эти команды Rust могли что-то сделать.
Для установки инструментария задайте в rustup интересующую вас версию:
stable
или
nightly
.
Например:
$ rustup default stable
Использование
Вам может потребоваться вручную установить инструментарий, например
stable
,
beta
,
nightly
или
1.58.0
. Это также необходимо сделать, если вы хотите использовать/тестировать другой инструментарий.
$ rustup toolchain install
toolchain
Теперь вы можете запускать команды Rust, выполняя
rustup run
toolchain
command
. Однако, чтобы использовать эти команды напрямую, необходимо активировать инструментарий:
$ rustup default
toolchain
Проверим версию Rust с помощью
rustc -V
:
$ rustc -V
rustc 1.58.0 (02072b482 2022-01-11)
Примечание
Rustup не устанавливает некоторые команды Rust, которые есть в пакете
rust
, такие как
rustfmt
и
rls
. Это позволяет сопровождающим Rust поставлять nightly Rust с неработающими
rustfmt
/
rls
. Чтобы установить их, запустите
rustup component add rustfmt
и
rustup component add rls
соответственно. Это также приостановит обновления nightly, если они сломают
rustfmt
/
rls
.
Rust не выполняет компоновку самостоятельно, поэтому нужно установить сторонний компоновщик. Вы можете использовать
gcc
, иначе Rust выдаст
error: linker `cc` not found.
Проверка после установки
Давайте убедимся, что Rust установился корректно, написав простую программу:
~/hello.rs
fn main() {
     println!("Hello, World!");
 }
Затем скомпилируйте её с помощью
rustc
, введя это:
$ rustc hello.rs && ./hello
Hello, World!
Кросс-компиляция
С помощью rustup
Использовать кросс-компиляцию с rustup очень легко. Он поддерживает очень много целевых платформ. Полный их список можно увидеть с помощью команды
rustup target list
.
Например, если вы хотите использовать stable Rust для Windows с компилятором GNU, сделайте следующее:
$ rustup toolchain install stable-x86_64-pc-windows-gnu
Эта команда установит только rust и инструменты для вашей целевой платформы, и для кросс-компиляции нужно сделать ещё несколько вещей.
Windows
В этом разделе
$ARCH
будет целевой архитектурой (
x86_64
или
i686
).
Установите
пакет
mingw-w64-gcc
.
Выполните
rustup target add $ARCH-pc-windows-gnu
чтобы установить стандартную библиотеку Rust для целевой архитектуры.
Подскажите cargo, где искать MinGW-w64 gcc/ar добавлением следующих параметров в
~/.cargo/config
(создайте файл, если он отсутствует):
~/.cargo/config
[target.$ARCH-pc-windows-gnu]
linker = "/usr/bin/$ARCH-w64-mingw32-gcc"
ar = "/usr/bin/$ARCH-w64-mingw32-ar"
Теперь вы можете выполнять кросс-компиляцию для Windows, указывая дополнительный аргумент
--target $ARCH-pc-windows-gnu
при вызове cargo:
$ # Сборка
$ cargo build --release --target "$ARCH-pc-windows-gnu"
$ # Запуск unit-тестов через wine
$ cargo test --target "$ARCH-pc-windows-gnu"
В настоящее время сборка исполняемых файлов с использованием MinGW 6 и инструментария, установленного через rustup, сломана. Чтобы исправить это, выполните
for lib in crt2.o dllcrt2.o libmsvcrt.a; do cp -v /usr/x86_64-w64-mingw32/lib/$lib $HOME/.rustup/toolchains/$CHANNEL-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/; done
где
CHANNEL
это канал обновлений (
stable
,
beta
или
nightly
)
Неофициальные пакеты
Неофициальный репозиторий archlinuxcn
содержит rust-nightly и стандартную библиотеку Rust для i686, ARM, ARMv7, Windows 32 и 64, и вы можете просто установить то, что вам нужно, и использовать кросс-компиляцию. Тем не менее вам нужно найти ARM toolchain самостоятельно. Для Windows 32bit вам нужно получить libgcc_s_dw2-1.dll (предоставляется пакетом
mingw-w64-gcc
) для сборки и запуска.
Cargo
Cargo
— система сборки и менеджер пакетов для Rust. Он является частью пакета
rust
. Версия nightly доступна в AUR:
rust-nightly-bin
AUR
[
ссылка недействительна
: package not found]
. Если у вас
rustup
, то он уже содержит в себе cargo.
Cargo помогает работать с зависимостями вашего проекта, скачивая их из своего
хранилища
или стороннего
Git
репозитория. Также он позволяет убедиться, что вы всегда будете получать повторяемые сборки. Рекомендуем прочитать
официальное руководство
.
Использование
Для создания нового проекта с помощью Cargo:
$ cargo new hello_world
Эта команда создаст директорию с файлом
Cargo.toml
по умолчанию и настроит сборку в исполняемый файл.
Примечание
Cargo использует файл
манифеста
Cargo.toml
, который содержит метаданные, необходимые Cargo для сборки вашего проекта.
Cargo.toml
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"

[dependencies]
Оптимизация для текущей платформы
Чтобы Cargo всегда компилировал оптимальный код для вашего текущего процессора, добавьте флаг в
~/.cargo/config
. Имейте в виду, что полученные двоичные файлы не должны распространяться для использования на других компьютерах и могут перестать работать даже на вашей собственной системе, если вы решите сменить процессор в будущем.
Узнайте, какая целевая платформа используется по умолчанию в вашей установке:
$ rustup toolchain list
stable-x86_64-unknown-linux-gnu (default)
В данном примере используется
stable
rust на платформе
x86_64-unknown-linux-gnu
.
Настройка Cargo для компилирования кода, оптимизированного для текущей платформы:
~/.cargo/config
[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "target-cpu=native"]
sccache
Время компиляции можно сильно сократить, используя
sccache
(пакет
sccache
). Он будет хранить локальный кэш артефактов компилятора, избавляя вас от необходимости перекомпилировать код, который не изменился с момента последней компиляции.
Чтобы включить sccache, можно использовать
переменную окружения
RUSTC_WRAPPER
:
export RUSTC_WRAPPER=sccache
cargo build
или
RUSTC_WRAPPER=sccache cargo build
Также можно добавить настройку в
~/.cargo/config
:
~/.cargo/config
[build]
rustc-wrapper = "sccache"
Поддержка в IDE
Инструменты
Список полезных инструментов можно посмотреть на
https://www.rust-lang.org/tools
RLS
RLS
реализует
Language Server Protocol
для Rust, предоставляя IDE, редакторам и другим инструментам информацию о программах на Rust. Он поддерживает 'goto definition', поиск символов, переформатирование и автодополнение кода, а также позволяет осуществлять переименование и рефакторинг.
RLS входит в состав пакета
rust
. Чтобы установить RLS с помощью rustup:
$ rustup component add rls rust-analysis rust-src
rust-analyzer
rust-analyzer
— это экспериментальная реализация Language Server Protocol для Rust, которая призвана заменить RLS.
Она доступна в виде пакета
rust-analyzer
, а последняя Git-версия доступна как
rust-analyzer-git
AUR
.
rust-analyzer нуждается в исходном коде стандартной библиотеки. Если его нет, rust-analyzer попытается установить его автоматически с помощью rustup. Чтобы установить исходный код вручную с помощью rustup, выполните следующую команду:
$ rustup component add rust-src
Racer
Racer
предоставляет поддержку автодополнения кода для редакторов и IDE. Он был заменён на RLS (который использует Racer в качестве запасного варианта).
Для этого требуется также установить копию исходного кода Rust, которую вы можете получить одним из нескольких способов:
С помощью rustup:
rustup component add rust-src
Из AUR:
rust-src-git
AUR
или
rust-nightly-src
AUR
[
ссылка недействительна
: package not found]
, в этом случае вы должны установить переменную окружения
RUST_SRC_PATH
.
После установки исходного кода вы можете использовать
Cargo
для установки racer или получить его из репозиториев (
rust-racer
AUR
).
$ cargo +nightly install racer
Clippy
Clippy
использует поддержку плагинов компилятора в Nightly-сборках Rust, чтобы обеспечить большое количество дополнительных проверок для обнаружения и предупреждения о более широком разнообразии ошибок и неидиоматическом Rust.
Clippy входит в состав пакета
rust
. Чтобы установить Clippy с помощью Rustup:
$ rustup component add clippy
Rustfmt
Rustfmt
— инструмент для форматирования кода Rust в соответствии с официальным руководством по стилю.
Rustfmt входит в состав пакета
rust
. Чтобы установить с помощью Rustup:
$ rustup component add rustfmt
Редакторы
IntelliJ IDEA
В
IntelliJ IDEA
имеется
Rust plugin
. Этот плагин также работает с CLion. При настройке toolchain используйте rustup для загрузки исходников (
rustup component add rust-src
), а затем выберите
~/.rustup/toolchains/<your toolchain>/bin
в качестве расположения toolchain.
При установке Rust из официальных репозиториев Arch Linux выберите
/usr/bin
в качестве каталога toolchain и
/usr/lib/rustlib/src/rust/library/
в качестве каталога, содержащего исходные коды стандартной библиотеки.
Visual Studio Code
В
Visual Studio Code
поддержка Rust может быть получена через официальное дополнение
rust-lang.rls
(требуется rustup). Если вы используете
rust-analyzer
, вместо этого расширения установите
matklad.rust-analyzer
.
Vim
В
Vim
поддержка Rust может быть получена через официальный плагин
rust.vim
, который предоставляет обнаружение файлов, подсветку синтаксиса, форматирование и поддержку плагина проверки синтаксиса
Syntastic
. Многие механизмы автодополнения имеют поддержку Rust, например
coc
(через плагин
coc.rls
) и
YouCompleteMe
.
Emacs
В
Emacs
поддержка Rust может быть получена через официальный
rust-mode
плагин.
Kate
Поддержка Rust в Kate реализуется через Language Server Protocol. По умолчанию используется
rust-analyzer
; всё, что вам нужно, — это установить его вместе с исходниками Rust.
GNOME Builder
Поддержка Rust в GNOME Builder реализуется через Language Server Protocol. По умолчанию используется
rust-analyzer
; всё, что вам нужно, — это установить его вместе с исходниками Rust.
Смотрите также
Официальный сайт языка программирования Rust (англ.)
Документация Rust (англ.)
Официальная Книга (англ.)
Перевод Книги на русский язык
Обзор API стандартной библиотеки (англ.)
Rust на примерах (англ.)
Rust на примерах (перевод на русский язык)
Подборка материалов по изучению Rust
Библиотеки (крейты, crates), доступные через Cargo
Новостная рассылка This Week in Rust (англ.)
Блог языка программирования Rust (англ.)
Форум пользователей Rust (англ.)
The Rust Internals Forum (англ.)
Список библиотек и ресурсов Awesome Rust: A curated list of Rust libraries and resources (англ.)
Статья в Википедии
Русскоязычный сайт о Rust
Русскоязычный форум